简体   繁体   English

在urllib2中使用selenium的会话cookie

[英]Using a session cookie from selenium in urllib2

I'm trying to use Selenium to log into a website and then use urllib2 to make RESTy requests. 我正在尝试使用Selenium登录网站,然后使用urllib2发出RESTy请求。 In order for it to work though, I need urllib2 to be able to use the same session Selenium used. 为了使它工作,我需要urllib2能够使用Selenium使用的相同会话。

The logging in with selenium worked great and I can call 用硒登录工作很好,我可以打电话

self.driver.get_cookies()

and I have a list of all the cookies selenium knows about, and it ends up looking a little something like this: 我有一个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...'
}]

I've tried a few different ways to to use the cooky in urllib2, I think this one looks the best: 我尝试了几种不同的方法在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()

It does not work though. 它不起作用。

That last call to response.geturl() returns the login page. 最后一次调用response.geturl()会返回登录页面。

Am I missing something? 我错过了什么吗?

Any ideas for how should go about looking for the problem? 关于如何寻找问题的任何想法?

Thanks. 谢谢。

I was able to overcome this problem by using the requests library instead. 我能够通过使用requests库来克服这个问题。 I iterated over the cookies from selenium, and then passed them in a simple dictionary with name:value pairs. 我从selenium迭代了cookie,然后在一个name:value pairs的简单字典中传递它们。

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)

You may try as below. 您可以尝试如下。

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()

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM