html - 从 QWebPage 获取完整的 href 列表

标签 html qt anchor href qwebkit

我正在尝试使用 QWebPage(来自 QWebKit)列出带有完整 URL 的 A 标记中的所有 href 属性。目前,我这样做:

QWebElementCollection collection = webPage->mainFrame()->findAllElements("a");
foreach (QWebElement element, collection)
{
    QString href = element.attribute("href");
    if (!href.isEmpty())
    {
        // Process
    }
}

但问题是 href 可以是一个完整的 URL,也可以只是一个页面,也可以是前面带有/的 URL,也可以是前面带有 ../的 URL。有没有办法解析所有这些不同的 URL 以在 QString 或 QUrl 中生成完整的 URL?

最佳答案

QWebFrame有一个名为baseUrl的函数,它将提供一个QUrl对象来帮助您解析页面中的url。

使用它,您可以使用单独的 QUrl(从 href 构建)调用解析函数来解析 url。如果 url 是相对的,它会将其转换为已解析的绝对 url。如果它不是相对的,它将返回而不进行任何修改。

这是一个基于您提供的代码的(未经测试的)示例:

QUrl baseUrl = webPage->mainFrame()->baseUrl();

QWebElementCollection collection = webPage->mainFrame()->findAllElements("a");
foreach (QWebElement element, collection)
{
    QString href = element.attribute("href");
    if (!href.isEmpty())
    {
        QUrl relativeUrl(href);

        QUrl absoluteUrl = baseUrl.resolved(relativeUrl);

        // Process
    }
}

关于html - 从 QWebPage 获取完整的 href 列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5903620/

相关文章:

html - 重定向到其他页面并滚动到指定元素而不在 URL 中显示 id

css - 右键单击更改 anchor 链接颜色

javascript - 如何根据表单的内容更改跨度的内容?

html - 当我在手机或 Safari 上查看我的网页时,为什么我的 CSS 网格和 flexbox 图像显示空白区域?

Jquery获取h2标签的值

windows - clang 构建 qt 的 mkspecs 是什么?

c++ - 我可以在 Qt 内部设置断点吗?

javascript - 在 html 中相互显示 svg 文件

c++ - QThread:线程仍在运行时被销毁,QMutex 被销毁

html - anchor 标签 href 不工作