如何在 QWebView 上获取 DOM innerText?

How to get DOM innerText on QWebView?

如何在 QWebView 上获取所有 document.body.innerText?我用的是QT 5.5.1.

例如,

html 要加载的文件

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

我想得到 "hello world"。

所以,我在 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

我预计字符串是 "hello world",但是什么也没有。 我搜索了一下,找到了这个link,我就这样改了代码,还是没有。

我是否误解了 toPlainText()?以及如何在 QT 5.5 上获得 DOM innerText?

您没有为页面更新留出足够的时间。加载 HTML 需要一些时间,更不用说执行 Javascript 了。

这里有几个解决方法:

  1. 使用 QTimer 等待几秒钟,然后调用 toPlainText()。这是 hacky,因为无法确切知道要等待多长时间,但这足以用于演示目的。
  2. 更新 Javascript 代码以在调用 document.write() 后向您的 C++ 代码发回通知。例如,您可以通过 WebSocket 执行此操作,或使用 Qt WebChannel.