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