2011-05-05 91 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