问:我可以在不渲染页面的情况下使用QWebKit加载和操作网页dom吗?

时间:2010-09-06 07:36:04

标签: qt qwebkit

有没有办法加载网址并操纵页面dom而不渲染页面 我喜欢在没有在浏览器中显示自己的页面的情况下解决问题

1 个答案:

答案 0 :(得分:5)

我相信您应该能够使用QNetworkAccessManager加载网页并使用QTextDocument操纵其内容;下面是一个小例子。您也可以使用QWebPage类而不显示页面内容。我还将它包含在下面的示例中:

void MainWindow::on_pushButton_clicked()
{
    // load web page
    QNetworkAccessManager *manager = new QNetworkAccessManager(this);
    connect(manager, SIGNAL(finished(QNetworkReply*)), this, SLOT(replyFinished(QNetworkReply*)));
    manager->get(QNetworkRequest(QUrl("http://www.google.com")));
}

void MainWindow::replyFinished(QNetworkReply* reply)
{
    QByteArray content = reply->readAll();

    // process network reply using QTextDocument 
    QTextDocument page;
    page.setHtml(content);
    for (QTextBlock block = page.begin(); block != page.end(); block = block.next())
    {
        // do smth here
        qDebug() << block.text();
    }

    // process network reply using QWebPage    
    QWebPage webPage;
    webPage.mainFrame()->setHtml(content);

    QWebElement document = webPage.mainFrame()->documentElement();
    QWebElementCollection elements = document.findAll("element_name");

    foreach (QWebElement element, elements)
    {
        // do smth here
        qDebug() << element.toPlainText();
    }
}

希望这有帮助,尊重