Qt WebEngine 密码管理器 - 如何检测网站上何时使用用户名/密码

Posted

技术标签:

【中文标题】Qt WebEngine 密码管理器 - 如何检测网站上何时使用用户名/密码【英文标题】:Qt WebEngine Password Manager - How To Detect When A Username / Password Is Used On A Website 【发布时间】:2019-08-31 17:32:01 【问题描述】:

我使用 PyQt5 框架在 Python 3.7.2 中构建了一个浏览器。创建密码管理器,如何检测用户名和密码的输入和发送,以及用户名和密码是什么,以便弹出提示保存用户名和密码?

【问题讨论】:

【参考方案1】:

QWebView::url方法可以帮你判断当前加载的网站。您应该有一个存储密码的本地数据库;因此,使用当前域,在所述数据库中查找任何存储的密码。 (理想情况下,密码将使用密码加密)。

至于 html 插入部分,您可以采用两种方法;我已经有一段时间没有这样做了,但请看一下以下方法:

`QWebView::setHtml` 
`QWebFrame::evaluatejavascript`
`QWebFrame::documentElement()`

With a `QWebFrame` there are many helpful methods that you can use.

更新:以上这些已被弃用,但仍有办法实现这一点。

注意:您应该有一个强大的密码字段检测

决定何时是存储新密码的合适时间是一件非常棘手的事情,这似乎是它在商业浏览器上的工作方式:

检测到包含password-type 字段的成功 POST 请求(为此,您需要监视和检查浏览器内发生的所有 HTTP 请求。

查找是否有存储的域密码。如果有,如果密码不同,提示用户更新密码,否则提示用户存储新密码。 INSERT/UPDATE将密码存入数据库。

【讨论】:

QWebView 和 QWebFrame 是 QtWebkit 的一部分,自 Qt 5.6 起已弃用,目前使用的是 QtWebEngine,所以我认为您的一般建议是足够的,但您指出的部分不再有效。 QtWebEngine 不再由 Qt Network(QNetworkAccessManager) 处理,而是由内部 API + chromium 处理,因此不再可能使用 QNetworkRequest 和 QWebPage::setNetworkAccessManager(...) 方法访问请求 @eyllanesc 感谢您的澄清。新版本中是否有新的方式访问网络请求? 也许doc.qt.io/qt-5/qwebengineurlrequestinterceptor.html,虽然我认为Qtwebengine提供了所需的功能,但我还没有能够测试它

以上是关于Qt WebEngine 密码管理器 - 如何检测网站上何时使用用户名/密码的主要内容,如果未能解决你的问题,请参考以下文章

如何为PyQt5构建Qt WebEngine?

如何单击 Qt WebEngine 中的按钮?

如何使用 Qt webEngine 而不是 Qt webkit

如何使用 QT WebEngine 发送 HTTPHeader?

Qt WebEngine 失败

项目错误:QT 中的未知模块:webengine