在urllib2中使用selenium中的会话cookie

2024-05-13 18:44:02 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图使用Selenium登录到一个网站,然后使用urllib2发出RESTy请求。为了让它工作,我需要urllib2能够使用Selenium使用的会话。

使用selenium登录非常成功,我可以打电话给

self.driver.get_cookies()

我有一张selenium知道的所有饼干的列表,最后看起来有点像这样:

[{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中的cooky,我认为这一个看起来最好:

# 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()的最后一次调用返回登录页。

我遗漏了什么吗?

你有什么办法来解决这个问题吗?

谢谢。


Tags: pathnameselfnonefalsevaluecookiedomain
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()

我可以通过使用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)

相关问题 更多 >