gpt4 book ai didi

python - QWebEngineView - Javascript 回调

转载 作者:行者123 更新时间:2023-12-01 02:46:19 24 4
gpt4 key购买 nike

我最终想要完成的是捕获用户在网站中输入的用户名和密码。例如,如果用户在 Facebook 登录中输入“test@example.com”作为电子邮件地址,然后单击“提交”,我想将该电子邮件地址存储在我的 PyQt 应用程序中。

我最接近实现这一目标的方法是使用一系列 JavaScript 命令在“登录按钮”上放置一个监听器,该监听器返回用户参数的当前值。我的问题是 PyQt 提供的回调是在 runJavaScript 函数完成时提供的,而不是 JavaScript 事件监听器。我想知道是否有任何方法可以从 JavaScript 函数捕获回调函数,或者是否有更好的方法来完成此操作。

import os
import sys
from PyQt5.QtWidgets import QApplication, QVBoxLayout, QWidget
from PyQt5.QtCore import QUrl, QEventLoop
from PyQt5.QtWebEngineWidgets import QWebEngineView

class WebPage(QWebEngineView):
def __init__(self):
QWebEngineView.__init__(self)
self.load(QUrl("https://facebook.com"))
self.loadFinished.connect(self._on_load_finished)
#self.page().runJavaScript("document.getElementById("myBtn").addEventListener("click", displayDate)", print)

def _on_load_finished(self):
print("Finished Loading")
cmds = ["btn=document.getElementById('u_0_r')", # Login Button
"user=document.getElementsByName('email')[0]",
"function get_username(){return user.value}",
"btn.addEventListener('click', get_username)"]
self.page().runJavaScript("; ".join(cmds), lambda x: print("test: %s" % x))

if __name__ == "__main__":
app = QApplication(sys.argv)
web = WebPage()
web.show()
sys.exit(app.exec_()) # only need one app, one running event loop

最佳答案

我找到了一种使用“urlChanged”信号的解决方法,到目前为止,该信号似乎适用于我的应用程序

import os
import sys
from PyQt5.QtWidgets import QApplication, QVBoxLayout, QWidget
from PyQt5.QtCore import QUrl, QEventLoop
from PyQt5.QtWebEngineWidgets import QWebEngineView
from PyQt5.QtWebEngineCore import QWebEngineUrlRequestInterceptor

class WebPage(QWebEngineView):
def __init__(self):
QWebEngineView.__init__(self)
self.current_url = ''
self.load(QUrl("https://facebook.com"))
self.loadFinished.connect(self._on_load_finished)
self.urlChanged.connect(self._on_url_change)

def _on_load_finished(self):
self.current_url = self.url().toString()

def _on_url_change(self):
self.page().runJavaScript("document.getElementsByName('email')[0].value", self.store_value)

def store_value(self, param):
self.value = param
print("Param: " +str(param))

if __name__ == "__main__":
app = QApplication(sys.argv)
web = WebPage()
web.show()
sys.exit(app.exec_()) # only need one app, one running event loop

关于python - QWebEngineView - Javascript 回调,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45230931/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com