Извлечь информацию с веб-сайта, используя Qt?

Я хотел бы извлечь "информацию" в теге "b" => 123456789

Это HTML-код:

<body>
       <div>
          <table>
               <tbody>
                     <tr>
                         <td class="myclass">
                               <b>123456789</b>
                         </td>
                     </tr>
              </tbody>
          </table>
       </div>
 </body>

Итак, я пытаюсь это:

void My_Test_Dialog::on_pushButton_clicked()
{


        QWebView *webview = new QWebView(parentWidget());

        webview->load(QUrl("http://www.esesese.com"));

        webview->show();

         // get HTML element information
        QWebElementCollection colls = webview->page()->mainFrame()->findAllElements("td.myclass b");



         foreach(QWebElement elemento, colls)
        {
                    ui->lineEdit_data->setText(elemento.toInnerXml());
        }
}

у меня есть форма с кнопкой ("вызов обновления") и LineEdit, поэтому, если я нажимаю кнопку "обновить", автоматически LineEdit должен установить текст "123456789". но мой код не работает.. Текст LineEdit остается Emply.

Я включаю это:

#include <QtWebKit>
#include <QtWebKitWidgets/QWebFrame>
#include <QWebView>

QT file.pro это:

QT += core gui
QT += network
QT += webkit
QT += webkitwidgets

1 ответ

Как уже упоминалось, вы должны убедиться, что вы ждете достаточно данных в вашем QWebView загрузить.

Вы можете сделать это (очень упрощенно) примерно так:

Определите webView как часть класса диалога, а также объявите слот, который вы позже сможете подключить к сигналу веб-представления

class My_Test_Dialog
{
public slots:

  // slot to read your data once you are finished
  void readPage(bool ok);

  // whatever else you did
private: 
  QWebView *webView;

}

Затем, например, в конструкторе или в другом месте вы можете создать веб-представление и подключить его loadFinished() сигнал к readPage() слот показан также в определении класса выше

// create QWebview and connect its loadFinished signal to our slot 
webView = new QWebView(this);
QObject::connect(webView,SIGNAL(loadFinished(bool)), this, SLOT( readPage(bool) ) );

тогда в вашем on_pushButton_clicked() метод, которым вы только загружаете страницу (и показывает веб-просмотр, если это то, что вам нужно)

void My_Test_Dialog::on_pushButton_clicked()
{
  webView->load(QUrl("http://www.esesese.com"));
}

а затем, как только диалог закончил загрузку слота readData() будет вызван автоматически, и там вы можете просто сделать операцию чтения

void MyDialog::readPage(bool ok)
{
  // get HTML element information                                                                                                                                                                    
  QWebElementCollection colls = webView->page()->mainFrame()->findAllElements("td.myclass b");

  foreach(QWebElement elemento, colls)
    {
      lineEdit->setText(elemento.toInnerXml());
    }

}

Позвольте мне знать, если это помогает.

Другие вопросы по тегам