3

我对 Python 编程很陌生,所以请多多包涵。

我有一个带有几个 div 层的 HTML 文件。此文件在 webkit.WebView 对象中打开。单击时,每个 div 层都会在全局变量 (JavaScript) 中保存一个值。

如何从我的 Python 脚本中读取该全局 JavaScript 变量的值?

我找到了一些答案,但它们似乎不适合我的情况(但我当然可能是错的):

将 JavaScript 变量传递给 Python

使用 Python 解析 JavaScript 变量

[编辑]
我正在使用 webkit.WebView 因为我必须在现有的 glade (libglade) 应用程序中显示它。

4

2 回答 2

0

试试这个。它使用 addToJavaScriptWindowObject 方法将 QObject 添加到 QWebView 中。这将启用您的 python 脚本和 webview 中的 HMTL/Javascript 之间的通信。下面的示例将允许您通过 JavaScript 提示将 javascript 全局变量消息的值更改为您想要的任何值,然后每当您单击 Python Print Message 链接时,它将执行您的 python 代码,该代码将获取 javascript 值并打印它到控制台。

import sys
from PyQt4 import QtCore, QtGui, QtWebKit

HTML = """
<html><body onload="broker.print_msg(message)">
<script>var message = 'print_msg message'</script>
<a href="javascript:message=prompt('Enter Message')">Change Message</a><br/>
<a href="javascript:broker.print_msg(message)">Python Print Message</a>
</body></html>
"""

class Broker(QtCore.QObject):
    @QtCore.pyqtSlot(str)
    def print_msg(self, data):
        print data

app = QtGui.QApplication(sys.argv)
view = QtWebKit.QWebView()
view.page().mainFrame().addToJavaScriptWindowObject('broker', Broker(view))
view.setHtml(HTML)
window = QtGui.QMainWindow()
window.setCentralWidget(view)
window.show()
sys.exit(app.exec_())
于 2012-11-07T12:29:11.383 回答
0

我知道这是一个老问题,但仍然希望它对某人有用。

您可以使用警报处理程序并在 python 端读取值。http://webkitgtk.org/reference/webkitgtk/stable/webkitgtk-webkitwebview.html#WebKitWebView-script-alert

单击按钮的示例您可以执行以下操作

 alert("Button Clicked");

在 python 端,您将收到警报通知,您可以解析字符串。如果对象不是简单对象,则必须将其转换为可以在 python 端解析的字符串格式。我见过几个警报处理程序的例子。https://github.com/nhrdl/notesMD/blob/master/notesmd.py是我编写的,它使用警报处理程序在 javascript 和 python 之间传递大量数据

于 2013-04-01T05:13:02.487 回答