如何在 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 了。
这里有几个解决方法:
- 使用 QTimer 等待几秒钟,然后调用
toPlainText()
。这是 hacky,因为无法确切知道要等待多长时间,但这足以用于演示目的。
- 更新 Javascript 代码以在调用
document.write()
后向您的 C++ 代码发回通知。例如,您可以通过 WebSocket 执行此操作,或使用 Qt WebChannel.
如何在 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 了。
这里有几个解决方法:
- 使用 QTimer 等待几秒钟,然后调用
toPlainText()
。这是 hacky,因为无法确切知道要等待多长时间,但这足以用于演示目的。 - 更新 Javascript 代码以在调用
document.write()
后向您的 C++ 代码发回通知。例如,您可以通过 WebSocket 执行此操作,或使用 Qt WebChannel.