2

QWebPage (QWebKit から) を使用して、A タグのすべての href 属性を完全な URL とともにリストしようとしています。現時点では、私はこれを行います:

QWebElementCollection collection = webPage->mainFrame()->findAllElements("a");
foreach (QWebElement element, collection)
{
    QString href = element.attribute("href");
    if (!href.isEmpty())
    {
        // Process
    }
}

しかし問題は、href が完全な URL、単なるページ、先頭に / がある URL、または先頭に ../ がある URL である可能性があることです。QString または QUrl で完全な URL を生成するために、これらすべての異なる URL を解析する方法はありますか?

4

1 に答える 1

3

QWebFrameにはbaseUrlという名前の関数があり、ページ内のURLを解決するのに役立つQUrlオブジェクトを提供します。

これを使用すると、別のQUrl(hrefから作成)を使用して解決された関数を呼び出して、URLを解決できます。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
    }
}
于 2011-05-05T21:14:17.510 に答える