首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >QtWebKit - Userscript/Javascript注入

QtWebKit - Userscript/Javascript注入
EN

Stack Overflow用户
提问于 2012-04-10 20:36:26
回答 2查看 1.7K关注 0票数 4

我一直在使用QtWebkit/Spynner在Python中进行测试。由于QtWebKit有像Chrome一样的Javascript支持,是否有可能像在Chrome中的常规用户脚本一样在中注入用户脚本或javascript (页面的开头部分)?

希望对这些经验提出一个简单的问题!提前感谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-04-10 20:48:48

您可以使用以下方法:

  1. QWebPage.frameCreated注册一个处理程序
  2. 在该事件处理程序中,为QWebFrame.javaScriptWindowObjectCleared注册一个新的事件处理程序。
  3. 在第二个事件处理程序中,使用QWebFrame.evaluateJavaScript (或Spynner的runjs方法)运行Javascript。

这是水豚-webkit执行其实用脚本的方法。不幸的是,我不能给您提供Python代码示例,因为我不熟悉Qt绑定。

票数 3
EN

Stack Overflow用户

发布于 2014-09-29 09:51:54

从前面的答案(尼可拉斯B.):capybara-webkit使用信号插槽()的不太有用的双重订阅,并在injectJavascriptHelpers()函数中使用发送方()调用,这对解耦的代码不是很好的实践。

实际上,您只需要将"javaScriptWindowObjectCleared“信号从mainFrame()连接到您的插槽。

假设您正在为PyQt使用旧的Widget编码样式(然后没有qml ):

代码语言:javascript
复制
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)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10096078

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档