Retrieving information from a Webview seemingly only reliable via pushButton - solved

  • I don't get it. I'm trying to retrieve information from a website using a webView. The site uses javascript and Ajax which could be part of the problem. I've implemented a loop that gets quit as soon as the webView's loadFinished signal is received. I then try to read some info from a 'span' element.

    The behaviour I don't understand is as follows:

    When I load the page I call a function to retrieve some span information (output via qDebug). I then wait 5 seconds and call the function again (output via qDebug). Sometimes (not all the times) both attempts don't retrieve the requested information (output "").

    However, when the requested information isn't retrieved I try and call the same function via a pushButton. This never fails to retrieve the requested information.

    I don't understand why within MainWindow it sometimes fails but then always succeeds when pushing the button and calling the same function. I would like to retrieve the information without having to push a button outside MainWindow.

    Here is my code.

    .pro file


    Project created by QtCreator 2014-11-17T15:44:22


    QT += core gui webkitwidgets

    greaterThan(QT_MAJOR_VERSION, 4): QT += widgets

    TARGET = WorkingExampleTwo
    TEMPLATE = app

    SOURCES += main.cpp

    HEADERS += mainwindow.h

    FORMS += mainwindow.ui@


    @#ifndef MAINWINDOW_H
    #define MAINWINDOW_H

    #include <QMainWindow>
    #include <QUrl>
    #include <QWebFrame>
    #include <QWebElement>
    #include <QtWebKitWidgets/QWebView>

    namespace Ui {
    class MainWindow;

    class MainWindow : public QMainWindow

    explicit MainWindow(QWidget *parent = 0);

    private slots:
    void on_webView_loadFinished();
    void on_pushButton_clicked();
    void getInfo();

    Ui::MainWindow *ui;

    #endif // MAINWINDOW_H


    @#include "mainwindow.h"
    #include <QApplication>

    int main(int argc, char *argv[])
    QApplication a(argc, argv);
    MainWindow w;;

    return a.exec&#40;&#41;;



    @#include "mainwindow.h"
    #include "ui_mainwindow.h"
    #include <QThread>

    MainWindow::MainWindow(QWidget *parent) :
    ui(new Ui::MainWindow)
    // define a loop that is quit as soon as the page has loaded
    QEventLoop loop;
    // connect the webview signal loadfinished to the loop's quit slot
    QObject::connect(ui->webView, SIGNAL(loadFinished(bool)), &loop, SLOT(quit()));
    QUrl url("http://www.somesite/somepage.html");

    // load the url
    // show the page
    qDebug() << "loading page...";
    // execute the loop
    qDebug(&#41; << "page loaded";


    delete ui;
    void MainWindow::on_webView_loadFinished(){
    // do stuff

    void MainWindow::on_pushButton_clicked(){
    // do stuff

    void MainWindow::getInfo(){
    QWebFrame* frame = ui->webView->page()->currentFrame();
    QWebElementCollection spans = frame->findAllElements("span");
    foreach(QWebElement span, spans) {
    if (span.attribute("class")=="h-init h-time-tick ng-valid ng-binding ng-dirty")
    qDebug() << span.toPlainText();

    mainwindow only contains a pushButton and a webView.

Log in to reply

Looks like your connection to Qt Forum was lost, please wait while we try to reconnect.