qtwebview设置cookie

    xiaoxiao2021-03-25  140

    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

    转载请注明原文地址: https://ju.6miu.com/read-22818.html

    最新回复(0)