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