2013-01-03 38 views
4

我试图存储从网站获取的所有饼干并打印它们。 请帮我开始工作,因为我认为我没有储存任何东西,这就是为什么我没有输出任何东西的原因。从QNetworkCookie打印饼干,PyQt4

我测试在谷歌网站的代码,我敢肯定,他们存储的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_() 

回答

1

你或许应该等待loadFinished检查饼干之前,无论如何,也许这样的事情对你的作品,我在这里重新实现QNetworkCookieJar,做从那里存储和加载饼干的所有工作:

#!/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, cookiesKey, 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, url, 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_()) 
+0

非常感谢您! – Vor