加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

python – 打印来自QNetworkCookie,PyQt4的cookie

发布时间:2020-12-20 13:32:21 所属栏目:Python 来源:网络整理
导读:我正在尝试存储我从网站获得的所有cookie而不是打印它们. 请帮助我让它工作,因为我认为我不存储任何东西,这就是我没有输出任何东西的原因. 我正在谷歌网站上测试这个代码,我很确定他们一旦到达那里就会存储cookie. 所以我正在尝试获取所有可用的cookie并打印
我正在尝试存储我从网站获得的所有cookie而不是打印它们.
请帮助我让它工作,因为我认为我不存储任何东西,这就是我没有输出任何东西的原因.

我正在谷歌网站上测试这个代码,我很确定他们一旦到达那里就会存储cookie.

所以我正在尝试获取所有可用的cookie并打印它们.这是代码:

#! /usr/bin/env python2.7


from PyQt4.QtCore import *
from PyQt4.QtGui import *
from PyQt4.QtNetwork import *
from PyQt4.QtWebKit import *
import sys,os,simplejson,signal

class MainWindow(QMainWindow):
    def __init__(self):
        QMainWindow.__init__(self)
        self.tabs = QTabWidget()
        self.setCentralWidget(self.tabs)
        self.settings = QSettings()
        self.numberOfTabs = 0
        self.cookies = QNetworkCookieJar()
        self.cookies.setAllCookies([QNetworkCookie.parseCookies(c)[0] for c in self.get('cookiejar')])

    def put(self,key,value):
        self.settings.setValue(key,simplejson.dumps(value))
        self.settings.sync()

    def get(self,key):
        v = self.settings.value(key)
        return simplejson.loads(unicode(v.toString())) 

    def addNewTab(self,url=QUrl('')):
        self.numberOfTabs += 1
        self.tabs.setCurrentIndex(self.tabs.addTab(Tab(QUrl(url)),'%s'%str(self.numberOfTabs)))
        self.setCookies()
        return self.tabs.currentWidget()

    def setCookies(self):
        self.put('cookiejar',[str(c.toRawForm()) for c in self.cookies.allCookies()])
        print self.get('cookiejar')

class Tab(QWebView):
    def __init__(self,url):
        QWebView.__init__(self)
        self.load(url)

if __name__ == '__main__':
    app = QApplication(sys.argv)
    browser = MainWindow()
    browser.addNewTab('https://google.com')
    browser.show()
    if signal.signal(signal.SIGINT,signal.SIG_DFL):
        sys.exit(app.exec_())
    app.exec_()

解决方法

你应该在检查cookie之前等待loadFinished,无论如何,也许这样的东西适合你,在这里我重新实现QNetworkCookieJar并完成从那里存储和加载cookie的所有工作:

#!/usr/bin/env python
#-*- coding:utf-8 -*-

import sip
sip.setapi('QString',2)
sip.setapi('QVariant',2)

from PyQt4 import QtCore,QtGui,QtWebKit,QtNetwork

class cookieJar(QtNetwork.QNetworkCookieJar):
    def __init__(self,cookiesKey,parent=None):
        super(cookieJar,self).__init__(parent)

        self.mainWindow = parent
        self.cookiesKey = cookiesKey
        cookiesValue    = self.mainWindow.settings.value(self.cookiesKey)       

        if cookiesValue:
            cookiesList = QtNetwork.QNetworkCookie.parseCookies(cookiesValue)
            self.setAllCookies(cookiesList)

    def setCookiesFromUrl (self,cookieList,url):
        cookiesValue = self.mainWindow.settings.value(self.cookiesKey)
        cookiesArray = cookiesValue if cookiesValue else QtCore.QByteArray()

        for cookie in cookieList:
            cookiesArray.append(cookie.toRawForm() + "n")

        self.mainWindow.settings.setValue(self.cookiesKey,cookiesArray)

        return super(cookieJar,self).setCookiesFromUrl(cookieList,url)

class webView(QtWebKit.QWebView):
    def __init__(self,url,parent=None):
        super(webView,self).__init__(parent)

        self.cookieJar = cookieJar(cookiesKey,parent)

        self.page().networkAccessManager().setCookieJar(self.cookieJar)

class myWindow(QtGui.QMainWindow):
    def __init__(self,parent=None):
        super(myWindow,self).__init__(parent)

        self.cookiesKey = "cookies"

        self.centralwidget = QtGui.QWidget(self)

        self.tabWidget = QtGui.QTabWidget(self.centralwidget)
        self.tabWidget.setTabsClosable(True)

        self.verticalLayout = QtGui.QVBoxLayout(self.centralwidget)
        self.verticalLayout.addWidget(self.tabWidget)

        self.actionTabAdd = QtGui.QAction(self)
        self.actionTabAdd.setText("Add Tab")
        self.actionTabAdd.triggered.connect(self.on_actionTabAdd_triggered)

        self.lineEdit = QtGui.QLineEdit(self)
        self.lineEdit.setText("http://www.example.com")

        self.toolBar = QtGui.QToolBar(self)
        self.toolBar.addAction(self.actionTabAdd)
        self.toolBar.addWidget(self.lineEdit)

        self.addToolBar(QtCore.Qt.ToolBarArea(QtCore.Qt.TopToolBarArea),self.toolBar)
        self.setCentralWidget(self.tabWidget)

        self.settings = QtCore.QSettings()

    @QtCore.pyqtSlot()
    def on_actionShowCookies_triggered(self):
        webView = self.tabWidget.currentWidget()
        listCookies = webView.page().networkAccessManager().cookieJar().allCookies()

        for cookie in  listCookies:
            print cookie.toRawForm()

    @QtCore.pyqtSlot()
    def on_actionTabAdd_triggered(self):
        url = self.lineEdit.text()
        self.addNewTab(url if url else 'about:blank')

    def addNewTab(self,url):
        tabName = u"Tab {0}".format(str(self.tabWidget.count()))

        tabWidget= webView(self.cookiesKey,self)
        tabWidget.loadFinished.connect(self.on_tabWidget_loadFinished)
        tabWidget.load(QtCore.QUrl(url))

        tabIndex = self.tabWidget.addTab(tabWidget,tabName)

        self.tabWidget.setCurrentIndex(tabIndex)

    @QtCore.pyqtSlot()
    def on_tabWidget_loadFinished(self):
        print self.settings.value(self.cookiesKey)

if __name__ == "__main__":
    import sys

    app = QtGui.QApplication(sys.argv)
    app.setApplicationName('myWindow')

    main = myWindow()
    main.resize(666,333)
    main.show()

    sys.exit(app.exec_())

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读