【问题标题】:Using a session cookie from selenium in urllib2在 urllib2 中使用 selenium 的会话 cookie
【发布时间】: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() 返回登录页面。

我错过了什么吗?

关于如何寻找问题的任何想法?

谢谢。

【问题讨论】:

    标签: python cookies selenium urllib2 session-cookies


    【解决方案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。它在原始问题的代码中。
      猜你喜欢
      • 2013-05-12
      • 2011-11-02
      • 2015-02-14
      • 2019-12-30
      • 2021-12-23
      • 2017-09-05
      • 2013-03-30
      • 2019-10-31
      • 2021-02-13
      相关资源
      最近更新 更多