从 QWebPage 获取完整的 href 列表

发布于 2024-11-05 01:53:58 字数 449 浏览 0 评论 0原文

我正在尝试使用 QWebPage (来自 QWebKit)列出 A 标签中具有完整 URL 的所有 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?

I am trying to use a QWebPage (from QWebKit) to list all the href attributes from A tags with the full URL. At the moment, I do this:

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

But the problem is that href could be a full URL, just a page, a URL with / at the front, or a URL with ../ at the front. Is there a way to parse all these different URLs to produce the full URL in a QString or a QUrl?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

旧街凉风 2024-11-12 01:53:58

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
    }
}

QWebFrame has a function named baseUrl which will provide a QUrl object for helping you to resolve the urls in the page.

With it you can call the resolved function with a separate QUrl (built from the href) to resolve the url. If the url is relative, it converts it to the resolved absolute url. If it isn't relative, it returns it with no modifications instead.

Here's an (untested) example based on the code you provided:

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
    }
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文