- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我最终想要完成的是捕获用户在网站中输入的用户名和密码。例如,如果用户在 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/
好吧,我绞尽脑汁想弄明白 QWebEngine。 我理解实现虚拟功能的概念,但我不确定如何让用户点击的 url 成为页面或 View 请求的 newTab/newWindow 链接。 QWebEngi
当我使用以下代码浏览到一个页面时,结果是另一种语言(我认为是俄语)。当我在其他浏览器中浏览到相同的 url 时,我会按预期获得英文 404 页面。我尝试设置接受语言,但这没有帮助。我错过了什么? im
我在 PyQt5 和 Python 3.6 中使用 QWebEngineView 小部件。我想在加载页面时显示进度。出于演示目的,我只是使用打印语句来执行此操作(稍后我想让进度条小部件出现、显示进度并
我正在尝试使用 QWebEngineView 创建一个窗口,并在窗口关闭后删除 QWebEngineView。但是,QWebEngineView 似乎永远不会被删除,并且会继续运行我加载的任何 QUr
我有以下代码片段在 PySide 中工作,需要将其转换为在 PySide2 中工作。目的是在单击时强制所有链接在系统浏览器中打开(而不是小部件尝试加载它们): from PySide.QtWebKit
我正在将我的代码从 QtWebKit 转移到 QtWebEngine。总的来说,过渡相当顺利,但是,我被困在一个特定问题上。我使用 QWebEngineView 来显示 Google map 页面。一
如何在QWebEngineView中改变用户代理?我知道 QWebView 有一种方法可以做到这一点,但我没有找到 QWebEngineView 的解决方案。 最佳答案 在构建 QWebEngineP
如何检测 QWebEngineView 小部件中的鼠标点击? 我试过这个但不起作用: class MyWin(QtWidgets.QMainWindow): def __init__(self
我想编写一个程序来自动测试不同屏幕尺寸的网页尺寸。我使用 QWebEngineView 创建窗口,我需要模拟用户鼠标在网页中单击并拖放元素。我试过 qApp->sendEvent 和 qApp->po
我想开发一个桌面应用程序,该应用程序涉及每秒从串行端口接收地理坐标并实时添加到 map 中。该 map 应类似于以下链接: 我编写了一段代码来测试 Folium 执行此任务的能力。 import sy
我正在构建一个 pyqt5 桌面界面,我在其中使用 QWebEngineView 来显示一个 html 文件,其中我显示了 Leaflet map 。这工作正常。下一步是导出用户添加到 map 的所有
我有这部分工作,但我面临几个困难: 1) 看来 QWebEnginePage 需要一个 QWebEngineView。 (请参阅此处的 setView() 方法: https://code.woboq
我正在尝试在 Qt 中创建一个加载 URL 的对话框(我不想向最终用户公开,因此是一个对话框)。一旦用户在页面上输入了他们的凭据,服务器就会返回一个我想要捕获的重定向 URL。我怎样才能做到这一点?
有没有功能 QWebView 和 QWebEngineView 的区别?如果我理解正确,QWebView 是 webkit,而 QWebEngineView 是闪烁的。程序员有什么区别吗?一个比另一个
我来自 tkinter 背景,所有东西都可以放在框架中。 我怎样才能让我当前的工作代码结果(它启动一个页面的 WebEngine View ,在这个例子中是谷歌)位于主窗口中,如图所示?例如,我希望将
我来自 tkinter 背景,所有东西都可以放在框架中。 我怎样才能让我当前的工作代码结果(它启动一个页面的 WebEngine View ,在这个例子中是谷歌)位于主窗口中,如图所示?例如,我希望将
我最终想要完成的是捕获用户在网站中输入的用户名和密码。例如,如果用户在 Facebook 登录中输入“test@example.com”作为电子邮件地址,然后单击“提交”,我想将该电子邮件地址存储在我
我有一个简单的网页,我想提取文本 My First Heading。 //This is a single line comment /* This is a block comment */
也许这是一个错误。有一个顶级小部件必须有阴影。在那个小部件中,我想显示一个浏览器(只能呈现 html)。顶级小部件的不透明度必须是可调的。为了使投影效果如预期(不显示黑色边框),我们需要将 Qt::W
编辑:这不是重复的。链接的问题处理 CORS 安全问题,浏览器不允许您从不同来源加载脚本。我的问题与基本资源加载方案有关(file:/// vs qrc:/)。 我正在尝试使用 file:/// 方案
我是一名优秀的程序员,十分优秀!