javascript - 如何将 JavaScript 函数的结果放入 python 变量中。 PyQt

标签 javascript python qt pyqt

我想在 PyQt 中创建一个函数 evaluateJavaScript() (或者可能是类似的函数),然后显示评估函数的结果。 真正的函数会更大,而且它可能不是一个字符串。

我只对如何在 PyQt 代码中创建函数并将结果存入 python 变量感兴趣。

为了更清楚,我举个例子: 这就是我想在 http://jquery.comloadFinished 之后输入的 js :

w = document.getElementsByTagName('p')[0];
w.innerHTML

如果我在浏览器控制台中执行此操作,我将得到一个输出:

"jQuery is a fast and concise JavaScript Library ...... blah blah blah"

我想将这个输出存储在一个变量中。

#!/usr/bin/env python

from PyQt4.QtCore import *
from PyQt4.QtGui import *
from PyQt4.QtWebKit import *
import os, sys, signal
from urllib2 import urlopen

class GBot(QWebView):

    def __init__(self):
        QWebView.__init__(self)
        self.setPage(BrowserSettings())
        #self.jquery = get_jquery()
        self.load(QUrl('http://jquery.com'))
        self.frame = self.page().currentFrame()

    def _loadFinished(self, ok):
        doc = self.frame.documentElement()
        #doc.evaluateJavaScript(self.jquery)
        r = doc.evaluateJavaScript('''w = document.getElementsByTagName('p')[0]; w.innerHTML''')
        print r #want to do something like this


if __name__ == '__main__':
    app = QApplication(sys.argv)
    bot = GBot()
    bot.show()
    if signal.signal(signal.SIGINT, signal.SIG_DFL):
        sys.exit(app.exec_())
    app.exec_()

最佳答案

在这个例子中,我首先通过将 self 传递给主框架来创建一个 myWindow javascript 对象,然后在 loadFinished 时调用 evaluateJavaScript :

#!/usr/bin/env python
#-*- coding:utf-8 -*-

from PyQt4 import QtCore, QtGui, QtWebKit  

getJsValue = """ 
w = document.getElementsByTagName('p')[0];
myWindow.showMessage(w.innerHTML);
"""  

class myWindow(QtWebKit.QWebView):  
    def __init__(self, parent=None):
        super(myWindow, self).__init__(parent)

        self.page().mainFrame().addToJavaScriptWindowObject("myWindow", self)

        self.loadFinished.connect(self.on_loadFinished)

        self.load(QtCore.QUrl('http://jquery.com'))

    @QtCore.pyqtSlot(str)  
    def showMessage(self, message):
        print "Message from website:", message

    @QtCore.pyqtSlot()
    def on_loadFinished(self):
        self.page().mainFrame().evaluateJavaScript(getJsValue) 

if __name__ == "__main__":
    import sys

    app = QtGui.QApplication(sys.argv)
    app.setApplicationName('myWindow')

    main = myWindow()
    main.show()

    sys.exit(app.exec_())

关于javascript - 如何将 JavaScript 函数的结果放入 python 变量中。 PyQt,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14208166/

相关文章:

javascript - HTML Canvas 透明度永远不会达到不透明

javascript - 在 ng-click 上更改 div 的背景颜色

python - 在 Python 中不能定义多个构造函数吗?

c++ - Qt5 的分步对话框

python - 如何将StyleSheet设置为QStandardItem

c++ - Qt 获取 QWidget 来反射光线

javascript - Web Audio API - 录制到 MP3?

Javascript (jQuery) 带滚动/加速的触摸/滑动垂直轮播

python - 在python中将列表的字符串列表转换为整数

python - 如何在 Pandas 中将负列值和 Nan 列值都更改为零