QWebEngineView 并忽略证书错误
QWebEngineView and ignoring cert errors
我正试图了解它是如何工作的,并且正在努力弄清楚如何使用它。我能找到的唯一示例不在 Python 中,显然我不擅长翻译。
我一直在研究这些模块中的大多数的 help() 结果,但我仍然无法弄清楚它们是如何工作的。现在,如果我没看错的话,这应该可以用来在加载页面时忽略证书错误。
QWebEngineCertificateError.ignoreCertificateError()
但是当我尝试 运行 时,出现以下错误。我很确定我用错了,但我找不到一个很好的例子来说明它应该如何工作。
TypeError: ignoreCertificateError(self): first argument of unbound method must have type 'QWebEngineCertificateError'
在普通浏览器中,当您 运行 遇到这样的证书错误时 "ERR_CERT_AUTHORITY_INVALID"
您仍然可以选择继续。该选项似乎不是 QWebEngineView 的默认功能。我想做的是实现它或让它自动忽略错误并继续。
有没有人知道如何做到这一点,你愿意给我一个正确方向的指示吗?我很难过。我试图通过将 Chrome 或边缘浏览器嵌入到应用程序中来解决这个问题,但它不会让我在浏览器中键入内容,尽管我可以单击并右键单击。
下面是打开网站时触发相同错误的示例代码。它不是我需要加载的,而是触发相同错误的站点。
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_())
错误截图:
您必须覆盖 QWebEnginePage 的 certificateError() 方法:
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)
```
我正试图了解它是如何工作的,并且正在努力弄清楚如何使用它。我能找到的唯一示例不在 Python 中,显然我不擅长翻译。
我一直在研究这些模块中的大多数的 help() 结果,但我仍然无法弄清楚它们是如何工作的。现在,如果我没看错的话,这应该可以用来在加载页面时忽略证书错误。
QWebEngineCertificateError.ignoreCertificateError()
但是当我尝试 运行 时,出现以下错误。我很确定我用错了,但我找不到一个很好的例子来说明它应该如何工作。
TypeError: ignoreCertificateError(self): first argument of unbound method must have type 'QWebEngineCertificateError'
在普通浏览器中,当您 运行 遇到这样的证书错误时 "ERR_CERT_AUTHORITY_INVALID"
您仍然可以选择继续。该选项似乎不是 QWebEngineView 的默认功能。我想做的是实现它或让它自动忽略错误并继续。
有没有人知道如何做到这一点,你愿意给我一个正确方向的指示吗?我很难过。我试图通过将 Chrome 或边缘浏览器嵌入到应用程序中来解决这个问题,但它不会让我在浏览器中键入内容,尽管我可以单击并右键单击。
下面是打开网站时触发相同错误的示例代码。它不是我需要加载的,而是触发相同错误的站点。
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_())
错误截图:
您必须覆盖 QWebEnginePage 的 certificateError() 方法:
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)
```