2

我正在尝试使用 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?

4

1 回答 1

3

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
    }
}
于 2011-05-05T21:14:17.510 回答