qtwebview设置cookie

qtwebview访问设置cookies后的网页

因为在python项目中需要用到浏览器显示自动登录后的网页,调用系统浏览器的话暂时没找到什么好的解决方法,这里利用qt的webview来实现浏览器展示登录后的网页。

我是用requests进行自动登录的,看了下文档可以通过webview->page()->networkAccessManager()->setCookieJar(QNetworkCookieJar)方法设置cookie
,从requests中获取到的是RequestsCookieJar对象,去看了它的文档就可以知道如何转化成字典:
requests.utils.dict_from_cookiejar(requests.cookies)

得到字典格式的cookies后可以转化成QNetworkCookie的形式了,
注意还需要设置cookie的domain,domin代表cookie生效的网站。

for key, values in my_cookie_dict.items():
    my_cookie = QNetworkCookie(QByteArray(key), QByteArray(values))
    my_cookie.setDomain('.baidu.com')
    cookies.append(my_cookie)

QNetworkCookieJar中有个setAllCookies方法的参数要求是QNetworkCookie列表

示例代码:

from PyQt4.QtGui import QApplication
from PyQt4.QtWebKit import QWebView
from PyQt4.QtCore import QUrl, QByteArray
from PyQt4.QtNetwork import QNetworkCookieJar, QNetworkCookie


class Browser(QWebView):
    def __init__(self, my_cookie_dict):
        super(Browser, self).__init__()
        # 将字典转化成QNetworkCookieJar的格式
        self.cookie_jar = QNetworkCookieJar()
        cookies = []
        for key, values in my_cookie_dict.items():
            my_cookie = QNetworkCookie(QByteArray(key), QByteArray(values))
            my_cookie.setDomain('.baidu.com')
            cookies.append(my_cookie)
        self.cookie_jar.setAllCookies(cookies)
        # 如果没有在前面设置domain,那么可以在这里指定一个url作为domain
        # self.cookie_jar.setCookiesFromUrl(cookies, QUrl('https://www.baidu.com/'))

        # 最后cookiejar替换完成
        self.page().networkAccessManager().setCookieJar(self.cookie_jar)


if __name__ == '__main__':
    app = QApplication(sys.argv)
    cookie_dict = {填入你要设置的cookies}
    browser = Browser(cookie_dict)
    browser.load(QUrl('https://www.baidu.com/'))
    browser.show()
    app.exec_()

参考:

http://doc.qt.io/qt-4.8/qnetworkaccessmanager.html#setCookieJar
http://doc.qt.io/qt-4.8/qnetworkcookiejar.html
http://doc.qt.io/qt-4.8/qnetworkcookie.html

写于: 3/9/2017 3:51:33 PM

你可能感兴趣的:(python学习)