2016-12-12 2 views
1

Как я могу получить все document.body.innerText в QWebView? Я использую QT версии 5.5.1.Как получить DOM innerText на QWebView?

Например,

HTML-файл для загрузки

<script> 
    document.write("hello world!"); 
</script> 

и я хочу, чтобы получить "привет мир".

так, я пытался, как это на QT

QWebView *wv = new QWebView(this); 
QWebFrame *frame = wv->page()->mainFrame(); 
frame->load(QUrl("file:// ~ file path ~")); 
QString string = frame->toPlainText(); 
// then write string to file for checking 

Я ожидал, что строка «привет мир», но там не было ничего. Я искал и нашел это link, и я изменил код, как будто, но все равно ничего не было.

Не понимаю ли я toPlainText(), возможно? И как я могу получить DOM innerText на QT 5.5?

ответ

0

Вы не оставляете достаточно времени для обновления страницы. Для загрузки HTML потребуется некоторое время, не говоря уже о том, чтобы Javascript выполнялся.

Там есть несколько обходных путей здесь:

  1. Используйте QTimer подождать пару секунд перед вызовом toPlainText(). Это хаки, потому что нет способа точно знать, как долго ждать, но это было бы адекватно для демонстрационных целей.
  2. Обновить код Javascript для отправки уведомлений на ваш код C++ после вызова document.write(). Например, вы можете сделать это через WebSocket или использовать Qt WebChannel.
+0

Благодарим вас за ответ, но он не выполнен на шаге 1. Я пытаюсь вставить сон (2) - на unistd.h - перед toPlainText, но никаких изменений нет. (Если функция спящего режима не подходит в этой ситуации, скажите мне, плз. Я попробую еще раз с QTimer.) – pr0gr4m

+0

oh, Он работает, когда я пытаюсь загрузить Load. Я очень ценю вас. Спасибо. – pr0gr4m

Смежные вопросы