私はQtWebkit/Spynnerを使ってPythonでテスト作業を行ってきました。 QtWebKitはChromeのWebkitと同じようにJavascriptをサポートしていますので、には、のように、Chromeの通常のユーザースクリプトと同じように、userscriptまたはjavascriptを挿入できますか?QtWebKit - Userscript/Javascript Injection
うまくいけば、それらの経験のための簡単な質問!前もって感謝します!
私はQtWebkit/Spynnerを使ってPythonでテスト作業を行ってきました。 QtWebKitはChromeのWebkitと同じようにJavascriptをサポートしていますので、には、のように、Chromeの通常のユーザースクリプトと同じように、userscriptまたはjavascriptを挿入できますか?QtWebKit - Userscript/Javascript Injection
うまくいけば、それらの経験のための簡単な質問!前もって感謝します!
次のアプローチを使用することができます。
QWebPage.frameCreated
QWebFrame.javaScriptWindowObjectCleared
QWebFrame.evaluateJavaScript
を使用する(またはSpynnerのrunjs
メソッド)を使用してJavascriptを実行します。capybara-webkitがユーティリティスクリプトを実行する方法です。残念ながら、私はQt Pythonバインディングに慣れていないので、Pythonコードの例を挙げることはできません。前の回答(のNiklas B.)から
: はカピバラ、WebKitの信号スロット(frameCreated-javaScriptWindowObjectCleared)のない有用な二重のサブスクリプションを使用し、injectJavascriptHelpersに送信者()()関数の呼び出しを使用しますデカップリングされたコードの良い習慣ではありません。
実際には、mainFrame()からの "javaScriptWindowObjectCleared"シグナルをスロットに接続するだけで済みます。
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)
:あなたはPyQtは(当時なしQML)のための
古いウィジェットのコーディングスタイルを使用していると仮定すると