Получить полный список ссылок из QWebPage - PullRequest
2 голосов
/ 06 мая 2011

Я пытаюсь использовать QWebPage (из QWebKit), чтобы вывести список всех атрибутов href из тегов A с полным URL-адресом. На данный момент я делаю это:

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

Но проблема в том, что href может быть полным URL, просто страницей, URL с / впереди или URL с ../ впереди. Есть ли способ проанализировать все эти разные URL-адреса для получения полного URL-адреса в QString или QUrl?

1 Ответ

3 голосов
/ 06 мая 2011

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
    }
}
...