Как сохранить cookie-файлы mechanize.Browser () в файл? - PullRequest
3 голосов
/ 22 сентября 2011

Как я могу сделать модуль Python механизированным (в частности, mechanize.Browser ()), чтобы сохранить его текущие файлы cookie в удобочитаемый файл?Кроме того, как мне загрузить этот файл cookie на веб-страницу с ним?

Спасибо

Ответы [ 3 ]

3 голосов
/ 28 октября 2011

Deusdies, я только что придумал способ с ссылкой на пост Николая Харечко

#to save cookie
>>>cookiefile=open('cookie','w')
>>>cookiestr=''
>>>for c in br._ua_handlers['_cookies'].cookiejar:
>>>    cookiestr+=c.name+'='+c.value+';'
>>>cookiefile.write(cookiestr)  
#binding this cookie to another Browser
>>>while len(cookiestr)!=0:
>>>    br1.set_cookie(cookiestr)
>>>    cookiestr=cookiestr[cookiestr.find(';')+1:]
>>>cookiefile.close()
2 голосов
/ 24 марта 2016

Если вы хотите использовать cookie для веб-запроса, такого как GET или POST (который не поддерживает mechanize.Browser), вы можете использовать библиотеку запросов и файлы cookie следующим образом:

import mechanize, requests

br = mechanize.Browser()
br.open (url)
# assuming first form is a login form
br.select_form (nr=0)
br.form['login'] = login
br.form['password'] = password
br.submit()
# if successful we have some cookies now
cookies = br._ua_handlers['_cookies'].cookiejar
# convert cookies into a dict usable by requests
cookie_dict = {}
for c in cookies:
    cookie_dict[c.name] = c.value
# make a request
r = requests.get(anotherUrl, cookies=cookie_dict)
1 голос
/ 19 октября 2015

CookieJar имеет несколько подклассов, которые можно использовать для сохранения файлов cookie в файл.Для совместимости с браузером используйте MozillaCookieJar, для простого удобочитаемого формата используйте LWPCookieJar, вот так (аутентификация через HTTP POST):

import urllib
import cookielib
import mechanize

params = {'login': 'mylogin', 'passwd': 'mypasswd'}
data = urllib.urlencode(params)

br = mechanize.Browser()
cj = mechanize.LWPCookieJar("cookies.txt")
br.set_cookiejar(cj)
response = br.open("http://example.net/login", data)
cj.save()
...