我使用QNetworkAccessManager加载页面并登录某些站点。我想保存cookie并使用此程序将它们加载到下一个。
我写这段代码来保存cookie:
import shelve
self.netManager=QNetworkAccessManager()
#... Load Pages and Login ....
with shelve.open('LoginDb','c') as db:
db['cooki']=netManager.CookieJar()
和此代码加载Cookie:
with shelve.open('LoginDb','c') as db:
self.netManager.setCookieJar(db['cooki'])
但是setCookieJar无法正常工作并出现此错误:
从未调用过类型QNetworkCookieJar的超类 init ()
我该怎么办呢?
答案 0 :(得分:1)
我认为你需要使用QNetWork的cookiejar,
alvas@ubi:~$ python -mtimeit 'from nltk.corpus import wordnet as wn'
10 loops, best of 3: 1.1 usec per loop
alvas@ubi:~$ python -mtimeit 'from pattern.en import wordnet as wn'
1000000 loops, best of 3: 0.702 usec per loop
alvas@ubi:~$ python -mtimeit 'from nltk.corpus import wordnet as wn; wn.synsets("man")'
10 loops, best of 3: 22 usec per loop
alvas@ubi:~$ python -mtimeit 'from pattern.en import wordnet as wn; wn.synsets("man")'
10000 loops, best of 3: 81.8 usec per loop
答案 1 :(得分:1)
该错误消息通常意味着您已进行子类化QNetworkCookieJar
并忘记调用超类__init__
。你应该做这样的事情(假设Python 3):
class CookieJar(QNetworkCookieJar):
def __init__(self, parent):
super().__init__(parent) # You probably don't do this
# Do custom stuff here
我也建议不要使用shelve
。它很脆弱,很慢,而且确实如此
情景安全风险。我个人只是将它们存储在一个纯文本文件中
我的项目 - 像这样:
class CookieJar(QNetworkCookieJar):
# [...]
def parse_cookies(self):
cookies = []
with open('cookies', 'r') as f:
for line in f:
cookies += QNetworkCookie.parseCookies(line)
self.setAllCookies(cookies)
def save(self):
with open('cookies', 'w') as f:
for cookie in self.allCookies():
if not cookie.isSessionCookie():
f.write(cookie.toRawForm() + '\n')