使用Javascript从Qt WebView获取文本

Getting text from Qt WebView using Javascript

本文关键字:获取 取文本 WebView Qt Javascript 使用      更新时间:2023-09-26

是否可以从使用javascript或qml在QT中加载的WebView页面中获取文本?我找到的所有答案都是在Java或其他与QT不相似的东西中。

在Qt5中,大多数WebView功能成为未记录的(和不支持的)QtWebKit.experimental的一部分。这篇博文是我发现的对这些特性最全面的解释。

在继续之前,提醒一句:实验特性可以——并且将会——在未来的版本中改变。因此,在运行示例代码时,您将在控制台中看到一个警告。

下面是一个完整的示例,它将整个HTML发送到控制台。将此更改为仅转储页面的一部分,将HTML发送到其他地方,等等,应该是相当微不足道的。

import QtQuick 2.2
import QtWebKit 3.0
import QtWebKit.experimental 1.0
Rectangle {
    width: 800
    height: 600
    WebView {
        url: "http://stackoverflow.com/"
        anchors.fill: parent
        // Enable communication between QML and WebKit
        experimental.preferences.navigatorQtObjectEnabled: true;
        // When the document loads, post the outerHTML back to the QML layer.
        onLoadingChanged: {
            if (loadRequest.status === WebView.LoadSucceededStatus) {
                experimental.evaluateJavaScript(
                    "navigator.qt.postMessage(document.documentElement.outerHTML)");
            }
        }
        // When we get the message, dump the string data to the console.
        experimental.onMessageReceived: {
            console.log(message.data);
        }
    }
}

总结一下,下面是这段代码的作用:

  • 将Stack Overflow的主页加载到WebView实例
  • 当页面完全加载时,它要求WebView评估读取文档的outerHTML属性的Javascript并将其作为消息返回给QML
  • 当收到消息时,它将该HTML转储到控制台