从QWebPage获取完整的href列表

时间:2011-05-05 20:22:19

标签: 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?

1 个答案:

答案 0 :(得分: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
    }
}