QtWebKit - Userscript/Javascript Injection
QtWebKit - Userscript/Javascript Injection
我一直在使用QtWebkit/Spynner在Python中进行测试工作。由于QtWebKit像Chrome的Webkit一样支持Javascript,是否可以像Chrome中的普通用户脚本一样在页面开头注入用户脚本或一段javascript?
希望是这些经历的简单问题!提前感谢!
您可以使用以下方法:
- 注册
QWebPage.frameCreated
处理程序
在该事件处理程序 - 中,注册一个新的事件处理程序以
QWebFrame.javaScriptWindowObjectCleared
- 在第二个事件处理程序中,使用
QWebFrame.evaluateJavaScript
(或 Spynner 的runjs
方法)来运行 Javascript。
这是 capybara-webkit 执行其实用程序脚本的方法。不幸的是,我不能给你示例Python代码,因为我不熟悉Qt Python绑定。
从之前的答案(Niklas B.):Capybara-webkit 使用不太有用的信号槽(frameCreated-javaScriptWindowObjectCleared)的双重订阅,并在 injectJavascriptHelpers() 函数中使用 sender() 调用,这对于解耦代码来说不是一个好的做法。
实际上,您只需要将来自mainFrame()的"javaScriptWindowObjectCleared"信号连接到您的插槽。
假设您使用的是 PyQt 的旧 Widget 编码风格(然后没有 qml):
class InstrumentedPage(PyQt5.QtWebKitWidgets.QWebPage):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.loadFinished.connect(self.finished)
self.mainFrame().javaScriptWindowObjectCleared.connect(self.initYourJavascriptAtTheBeginningHere)
def javaScriptConsoleMessage(self, message, lineNumber, sourceID):
message = "%s (%s:%d)" % (message, sourceID, lineNumber)
self.__logger.info("JS :: %s" % message )
def initYourJavascriptAtTheBeginningHere(self):
js = "console.log('"INITED'");"
self.mainFrame().evaluateJavaScript(js)
def injectYourJavascriptHere(self, js):
return self.mainFrame().evaluateJavaScript(js)
def finished(self, status):
self.__logger.info("InstrumentedPage.finished() :: init status => %s" % status)
class MainWindow(PyQt5.QtWidgets.QWidget):
def __init__(self, config, config_file_name, parent=None):
super().__init__(parent)
self.ui = Ui_MainWindow.Ui_MainWindow()
self.ui.setupUi( self )
self.web_page = InstrumentedPage()
self.ui.webView.setPage(self.web_page)
相关文章:
- 为什么不't Javascript对我的输入值进行了一些重新检查
- 创建一个类似链接的按钮,并通过Javascript函数打开一个新的弹出窗口
- 将函数的上下文应用于javascript变量
- 使用php或javascript从facebook相册URL中删除多余的部分
- 正在添加'X'按钮,在文本字段旁边使用javascript
- 如何在JavaScript中将字符串转换为函数引用
- 模糊事件的Javascript测试
- Javascript更改图标
- 如何将HTML id分配给元素,以及如何将JavaScript应用于元素
- 如何使用WCF服务和javascript表单post上传.doc文件
- javascript结合了数组和字典
- 这是什么 ==- javascript 运算符
- 从javascript创建一个列表
- Javascript json eval() injection
- QtWebKit - Userscript/Javascript Injection
- UIWebView vs WebView Javascript Injection
- Javascript injection with CDHtmlDialog (MFC)
- Javascript injection by ISP
- firebase javascript injection
- React-Native:Webview Javascript-Injection无法按预期工作