2013-11-30 1 views
7

Я пытаюсь войти на сайт с селеном, а затем передать cookie для механизации. Я успешно вошел в систему с селеном и сохранил его cookie сеанса переменной. Проблема возникает при попытке загрузить файл cookie с cookielib.loading cookie from selenium to mechanize with cookielib

Соответствующее кодирование:

. 
. #loging in to website with selenium 
. 
cookie = browser.get_cookies() #save the session cookie from selenium to variable "cookie" 
. 
. #starting up mechanize 
. 
cj = cookielib.LWPCookieJar() 
. 
. 
. 
cj.set_cookie(cookie) #load cookie from selenium 

проблема появляется при установке куки с функцией cj.set_cookie, и я получаю следующее сообщение об ошибке

File "..../cookielib.py", line 1627, in set_cookie 
if cookie.domain not in c: c[cookie.domain] = {} 
AttributeError: 'list' object has no attribute 'domain' 

ответ

7

если вы печатаете печенье, собранное селен и сравните его с файлом cookie, собранным mechanize/cookielib, вы заметите, что они используют разные форматы.

Чтобы преодолеть это, вы можете попробовать что-то вроде этого (возможно, потребуется изменить его немного, чтобы соответствовать вашим потребностям, но вы получите общее представление.):

cj = cookielib.LWPCookieJar() 

for s_cookie in cookie: 
    cj.set_cookie(cookielib.Cookie(version = 0, name = s_cookie['name'], value = s_cookie['value'], port = '80', port_specified = False, domain = s_cookie['domain'], domain_specified = True, domain_initial_dot = False, path = s_cookie['path'], path_specified = True, secure = s_cookie['secure'], expires = s_cookie['expiry'], discard = False, comment = None, comment_url = None, rest = None, rfc2109 = False)) 

Немного больше фантазии решение было бы перебирать селеновые куки и делать словарь с именем: пары значений

+0

спасибо за ваш ответ. Теперь я могу войти на сайт. Однако возникла новая проблема, когда я собираю ссылки на сайте этой функции «urlparse.urlparse (url) .hostname» возвращает значение None, которое делает эту сбой функции «mylinks.append» («http: //» + urlparse. urlparse (url) .hostname + urlparse.urlparse (url) .path) "из-за сообщения об ошибке" TypeError: не может конкатенировать объекты 'str' и 'NoneType'. Знаете ли вы какие-либо решения этой проблемы? – user3053161

+1

@ пользователь3053161. счастлив быть полезным. Эта новая проблема отличается от ваших проблем с файлами cookie, поэтому вы должны создать новый отдельный вопрос об этом – RobinKarlsson