2016-03-02 3 views
0

У меня есть рабочий код, который получает данные с веб-сайта, при необходимости подключается к нему и сохраняет файлы cookie в файле, чтобы они сохранялись каждый раз при запуске кода. Вот то, что код выглядит (очевидно, я удалил импорт и большую часть кода, чтобы сделать его более удобным для чтения)Запросы и файл cookiejar не работают в классе

cookiejar_file = 'tmp/cookies.txt' 

cj = http.cookiejar.LWPCookieJar(cookiejar_file) 
try: 
    cj.load(ignore_discard=True) 
except: 
    pass 

s = requests.Session() 
s.cookies = cj 

# Do stuff, connect if necessary by doing a s.post() on the connect page 

cj.save(cookiejar_file, ignore_discard=True) 

Но теперь, когда я пытаюсь создать более чистый класс делает эту работу есть проблема: каждый раз, когда я запускаю код, он должен снова подключиться к веб-сайту. Поэтому я должен делать что-то неправильно, и файлы cookie не загружены успешно, я думаю?

class Parent: 

    CookieFile = 'tmp/cookies.txt' 

    def __init__(self): 
     self.cj = http.cookiejar.LWPCookieJar(Parent.CookieFile) 
     self.cj.load() 
     self.session = requests.Session() 
     self.session.cookies = self.cj 

    def save_cookies(self): 
     self.cj.save(Parent.CookieFile, ignore_discard=True) 


class Child(Parent): 

    def __init__(self): 
     Parent.__init__(self) 

    def main(self): 
     # Do stuff, connect if necessary 
     self.save_cookies() 

a = Child 
a.main() 

Есть ли проблема с тем, как я это делаю? Для меня это похоже на то, что нужно делать то же самое. Файл cookie был успешно создан при первом запуске кода, а файлы cookie меняются каждый раз при его выполнении.

+0

почему не self.CookieFile вместо Parent.CookieFile? И вы должны создать экземпляр класса Child, выполнив это: a = Child() – tinySandy

+0

Parent.CookieFile работает, так что это не проблема. Код работает тоже, я просто упростил его здесь, чтобы он был более читабельным и забыл круглые скобки. – Symael

ответ

0

Ну, проблема была в том, что я забыл «ignore_discard = True», когда загружаю Cookiejar.

Это отлично работает с Python 3.5.1 и 2.9.1 просит:

import requests 
import http.cookiejar 


class Parent: 

    CookieFile = 'tmp/cookies.txt' 

    def __init__(self): 
     self.cj = http.cookiejar.LWPCookieJar(Parent.CookieFile) 
     self.cj.load(ignore_discard=True) 
     self.session = requests.Session() 
     self.session.cookies = self.cj 

    def save_cookies(self): 
     self.cj.save(Parent.CookieFile, ignore_discard=True) 


class Child(Parent): 

    def __init__(self): 
     Parent.__init__(self) 

    def main(self): 
     # Do stuff, connect if necessary 
     self.save_cookies() 

a = Child 
a.main() 
Смежные вопросы