首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >QWebEngineView和忽略证书错误

QWebEngineView和忽略证书错误
EN

Stack Overflow用户
提问于 2021-05-10 00:19:38
回答 1查看 191关注 0票数 1

我正在尝试理解它是如何工作的,并且正在努力弄清楚如何使用它。我能找到的唯一例子不是用Python写的,显然我也不擅长翻译。

我已经深入研究了大多数模块的help()结果,但仍然不能弄清楚它们是如何工作的。现在,如果我没看错的话,这应该可以用来在加载页面时忽略证书错误。

代码语言:javascript
运行
复制
QWebEngineCertificateError.ignoreCertificateError()

但是当我尝试运行它时,我得到了以下错误。我很确定我用错了,但我找不到一个很好的例子来说明它是如何工作的。

代码语言:javascript
运行
复制
TypeError: ignoreCertificateError(self): first argument of unbound method must have type 'QWebEngineCertificateError'

在正常的浏览器中,当你遇到像这样的"ERR_CERT_AUTHORITY_INVALID"证书错误时,你可以选择继续。该选项似乎不是QWebEngineView的默认功能。我要做的就是实现它,或者让它自动地忽略错误并继续。

有没有人知道怎么做,你愿意给我一个正确的方向吗?我被难住了。我试图通过将Chrome或edge浏览器嵌入到应用程序中来解决这个问题,但它不允许我在浏览器中输入内容,尽管我可以单击内容并单击鼠标右键。

下面是打开一个网站的示例代码,它会触发相同的错误。这不是我需要加载,但这是一个网站,触发了同样的错误。

代码语言:javascript
运行
复制
from PyQt5.QtCore import QUrl
from PyQt5.QtWebEngineWidgets import QWebEngineView
from PyQt5.QtWidgets import QApplication
import sys

app = QApplication(sys.argv)
webview = QWebEngineView()
webview.load(QUrl("https://www.us.army.mil/"))
webview.show()
sys.exit(app.exec_())

错误的屏幕截图:

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-05-10 01:33:27

您必须覆盖QWebEnginePage的certificateError()方法:

代码语言:javascript
运行
复制
import sys


from PyQt5.QtCore import QUrl
from PyQt5.QtWidgets import QApplication


from PyQt5.QtWebEngineWidgets import QWebEnginePage, QWebEngineView


class WebEnginePage(QWebEnginePage):
    def certificateError(self, error):
        # If you want to ignore the certificates of certain pages
        # then do something like
        # if error.url() == QUrl("https://www.us.army.mil/"):
        #     error.ignoreCertificateError()
        #     return True
        # return super().certificateError(error)

        error.ignoreCertificateError()
        return True


def main(args):
    app = QApplication(args)
    webview = QWebEngineView()
    page = WebEnginePage()
    webview.setPage(page)
    webview.load(QUrl("https://www.us.army.mil/"))
    webview.show()
    sys.exit(app.exec_())


if __name__ == "__main__":
    main(sys.argv)
代码语言:javascript
运行
复制
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67459911

复制
相关文章

相似问题

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