我一直在尝试使用 PySide 和 QWebView 实现浏览器。但是浏览器不会加载 www.facebook.com。我可以加载其他 https 网站,例如 google,所以我猜 SSL 工作正常。使用http://code.google.com/p/foobrowser/或 PySide 附带的示例浏览器时,同样的问题仍然存在。问题是什么?
问问题
706 次
3 回答
0
有同样的问题 - 在我的情况下,它与 ssl 错误有关。处理sslErrors信号解决了这个问题:
m_view = new QWebView(parent);
connect(
m_view->page()->networkAccessManager(),
SIGNAL(sslErrors(QNetworkReply*, const QList<QSslError> & )),
this,
SLOT(sslErrorHandler(QNetworkReply*, const QList<QSslError> & ))
);
和插槽:
void myClass::sslErrorHandler(QNetworkReply* qnr, const QList<QSslError> & errlist)
{
qnr->ignoreSslErrors();
}
于 2013-07-09T15:23:48.337 回答
0
POODLE漏洞被发现后,一些网站放弃了 SSLv3。
我在 Windows 8.1 上的 PySide (1.1.1) 版本具有PySide.QtNetwork.QSsl.SslProtocol.SslV3
默认协议。
要解决此问题,您需要更改QSslConfiguration
以NetworkAccessManager
使用 TLS。
from PySide.QtNetwork import QNetworkAccessManager, QNetworkRequest, QNetworkReply, QSslConfiguration, QSsl
class HtmlFrame(QFrame):
def __init__(self, parent=None):
QFrame.__init__(self, parent)
self.webview = QWebView()
# Developer extras settings to debug Webview
# QWebSettings.globalSettings().setAttribute(QWebSettings.WebAttribute.DeveloperExtrasEnabled, True)
self._network_manager = FNetworkManager()
self.webview.page().setNetworkAccessManager(self._network_manager)
url = "https://www.facebook.com"
self.webview.load(QUrl(url))
class FNetworkManager(QNetworkAccessManager):
def __init__(self):
QNetworkAccessManager.__init__(self)
# bind a custom virtual function to createRequest
self.createRequest = self._create_request
def _create_request(self, operation, request, data):
ssl_config = QSslConfiguration.defaultConfiguration()
ssl_config.setProtocol(QSsl.TlsV1)
request.setSslConfiguration(ssl_config)
reply = QNetworkAccessManager.createRequest(self, operation, request, data)
return reply
归功于https://github.com/intericho/和https://github.com/intericho/path-of-a-pyqter/
于 2014-12-17T13:13:07.373 回答
-1
在 PySide qwebview 中加载 Facebook 是没有问题的,可能是你平台的问题。
#!/usr/bin/env python3
# -*- coding:utf-8 -*-
import sys
import platform
import PySide
from PySide.QtCore import QUrl
from PySide.QtGui import QApplication
from PySide.QtWebKit import QWebView
print(PySide.__version__) # output: 1.1.1
print(PySide.QtCore.__version__) # output: 4.8.3
print(platform.platform()) # output: Linux-3.5.0-36-generic-x86_64-with-Ubuntu-12.10-quantal
app = QApplication(sys.argv)
web = QWebView()
web.load(QUrl("https://www.facebook.com"))
web.show()
sys.exit(app.exec_())
高温高压
于 2013-07-09T18:03:35.057 回答