在 urllib2 中使用 selenium 的会话 cookie
Posted
技术标签:
【中文标题】在 urllib2 中使用 selenium 的会话 cookie【英文标题】:Using a session cookie from selenium in urllib2 【发布时间】:2011-12-12 20:03:21 【问题描述】:我正在尝试使用 Selenium 登录网站,然后使用 urllib2 发出 RESTy 请求。不过,为了让它工作,我需要 urllib2 才能使用与 Selenium 相同的会话。
使用 selenium 登录效果很好,我可以打电话
self.driver.get_cookies()
我有一个 selenium 知道的所有 cookie 的列表,它最终看起来有点像这样:
[u'domain': u'my.awesome.web.app.local',
u'expiry': 1319230106,
u'name': u'ci_session',
u'path': u'/',
u'secure': False,
u'value': u'9YEz6Qs9rNlONzXbZPZ5i9jm2Nn4HNrbaCJj2c%2B...'
]
我尝试了几种不同的方法来使用 urllib2 中的 cookie,我认为这个看起来最好:
# self.driver is my selenium driver
all_cookies = self.driver.get_cookies()
cp = urllib2.HTTPCookieProcessor()
cj = cp.cookiejar
for s_cookie in all_cookies:
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=None
, discard=False
, comment=None
, comment_url=None
, rest=None
, rfc2109=False
)
)
opener = urllib2.build_opener(cp)
response = opener.open(url_that_requires_a_logged_in_user)
response.geturl()
但它不起作用。
最后一次调用 response.geturl() 返回登录页面。
我错过了什么吗?
关于如何寻找问题的任何想法?
谢谢。
【问题讨论】:
【参考方案1】:我可以通过使用requests
库来解决这个问题。我迭代了 selenium 中的 cookie,然后将它们传递到带有 name:value
对的简单字典中。
all_cookies = self.driver.get_cookies()
cookies =
for s_cookie in all_cookies:
cookies[s_cookie["name"]]=s_cookie["value"]
r = requests.get(my_url,cookies=cookies)
【讨论】:
【参考方案2】:你可以尝试如下。
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj))
urllib2.install_opener(opener)
f_opener = opener.open(url_that_requires_a_logged_in_user)
content = f_opener.read()
【讨论】:
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj)) 中的“cj”是什么?cj = cp.cookiejar
。它在原始问题的代码中。以上是关于在 urllib2 中使用 selenium 的会话 cookie的主要内容,如果未能解决你的问题,请参考以下文章
百度贴吧无限自动水贴的两种方式,使用requests(urllib2)和selenium两种方式回帖
[Python爬虫] 在Windows下安装PIP+Phantomjs+Selenium