2011-05-05 82 views
2

我试图使用QWebPage(来自QWebKit)从完整的URL列出A标签中的所有href属性。目前,我这样做:从QWebPage获取完整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?

回答

3

QWebFrame有一个名为baseUrl的函数,它将提供一个QUrl对象来帮助您解析页面中的URL。

有了它,你可以使用单独的QUrl(从href构建)来调用已解析的函数来解析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 
    } 
} 
+0

您也可以呼吁QUrl的ToString()返回完整的URL与QString。 – jsherer 2011-05-05 21:17:19

+0

太棒了,谢谢! – 2011-05-06 05:51:30