在urllib2中使用selenium的会话cookie
我正在尝试使用Selenium登录一个网站,然后用urllib2发送REST请求。不过,为了让它正常工作,我需要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()返回的是登录页面。
我是不是漏掉了什么?
有没有什么想法可以帮助我找到问题所在?
谢谢。
2 个回答
0
你可以试试下面的方法。
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()
15
我通过使用 requests
这个库解决了这个问题。首先,我遍历了从 selenium 获取的 cookies,然后把它们放进一个简单的字典里,字典的格式是 名称:值
的配对。
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)