使用cookielib将Selenium中的cookies加载到Mechanize中

7
我将尝试使用selenium登录网站,然后将cookie传递给mechanize。我已经成功使用selenium登录并将其会话cookie保存到变量中。但当尝试使用cookielib加载cookie时出现问题。
相关代码:
.
. #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函数设置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'
1个回答

7
如果您打印Selenium收集的Cookie并将其与Mechanize/CookieLib收集的Cookie进行比较,您会注意到它们使用不同的格式。为了克服这个问题,您可以尝试以下方法(您可能需要稍微修改以适应您的需求,但您可以得到一般想法):
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))

稍微高级的解决方案是遍历Selenium cookies并创建一个以名称:value对为键值对的字典。

谢谢你的回答。我现在可以登录到网站了。然而,出现了一个新问题,当我在网站上收集链接时,这个函数"urlparse.urlparse(url).hostname"返回一个None值,导致这个函数崩溃:"mylinks.append("http://" + urlparse.urlparse(url).hostname + urlparse.urlparse(url).path)",因为错误信息是"TypeError: cannot concatenate 'str' and 'NoneType' objects"。你知道如何解决这样的问题吗? - user3053161
1
@user3053161。很高兴为您服务。您的这个新问题与您的登录cookie问题是分开的,因此您应该创建一个新的单独问题来解决它。 - RobinKarlsson

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接