【问题标题】:Exporting Requests cookies into webdriver将请求 cookie 导出到 webdriver
【发布时间】:2016-03-28 03:00:08
【问题描述】:

基本上我有一个使用请求库及其发布请求的程序。我想在调用发布请求后获取会话的 cookie 并将它们加载到 webdriver 中。我正在考虑使用 selenium 和 chrome 二进制文件,但我对如何去做感到困惑。

基本上我到目前为止所拥有的。

import requests
url=www.storeUrl.com
session=requests.Session()
data={'utf8': '%E2%9C%93',
  'auth': 'oBLLJkW+A2plgT1lUJeKXq7DdqJSniGnZhnSmpuAQOE%3D',
  'stat': 'null',
  'user': 'zdw7287'}
session.cookies.clear()
response=session.post(url,data=data)
storeResponse=session.request('get','http://www.storeUrl.com')

print storeResponse.cookies

类的requests.cookies.RequestsCookieJar'>曲奇_store_session = BAh7CUkiD3Nlc3Npb25faWQGOgZFRkkiJTBiYmY4MmEzNmRmMjZkMjNhZDdiODg4NWVmYWQ5Y2IzBjsAVEkiB3RqBjsARnsLSSIHcDAGOwBGSXU6CVRpbWUNte4cgFPoSgUKOgtAX3pvbmVJIghFU1QGOwBUOg1uYW5vX251bWkCGgE6DW5hbm9fZGVuaQY6DXN1Ym1pY3JvIgcoIDoLb2Zmc2V0af6wuUkiB3AxBjsARjBJIgdwMgY7AEYwSSIHY3MGOwBGMEkiB2NjBjsARjBJIghpcHMGOwBGWwYiETI0LjkxLjIyNi4zNkkiCWNhcnQGOwBGewdpAph7aQY6C2Nvb2tpZUkiHTEgaXRlbS0tJDM2LS0zMTY0MCwxMjY0MwY7AFRJIhBfY3NyZl90b2tlbgY7AEZJIjFxNHI4QWFUQWNWaXZmY2xIVlNPcHRQeUk2ODF2NTVhbm9pREE1YWFSOHpNPQY7AEY%3D - eea073c1f0a4fd19163e39536e75eed04ab788f9为www.storeUrl.com />]> em>的 P>

我将如何将此 cookie 加载到 selenium 中?任何帮助将不胜感激。

【问题讨论】:

    标签: python selenium cookies request session-cookies


    【解决方案1】:

    Selenium 内置了 add_cookie 方法,用于将 cookie 添加到当前会话:

    In [4]: browser.add_cookie??
    Type:        instancemethod
    String form: <bound method WebDriver.add_cookie of <selenium.webdriver.chrome.webdriver.WebDriver (session="8b6e7ab963b91b5050fa1b8ef2bd7bfa")>>
    File:        /usr/local/lib/python2.7/site-packages/selenium/webdriver/remote/webdriver.py
    Definition:  browser.add_cookie(self, cookie_dict)
    Source:
        def add_cookie(self, cookie_dict):
            """
            Adds a cookie to your current session.
    
            :Args:
             - cookie_dict: A dictionary object, with required keys - "name" and "value";
                optional keys - "path", "domain", "secure", "expiry"
    
            Usage:
                driver.add_cookie({'name' : 'foo', 'value' : 'bar'})
                driver.add_cookie({'name' : 'foo', 'value' : 'bar', 'path' : '/'})
                driver.add_cookie({'name' : 'foo', 'value' : 'bar', 'path' : '/', 'secure':True})
    
            """
            self.execute(Command.ADD_COOKIE, {'cookie': cookie_dict})
    

    基本上,您需要将带有 cookie 的 dict 传递给 add_cookie 方法,然后 session.cookies.get_dict() 返回带有 cookie 的 dict

    driver.add_cookie(session.cookies.get_dict())


    示例:

    【讨论】:

    • self.driver.add_cookie(self.cookies.get_dict()) *** selenium.common.exceptions.InvalidArgumentException: Message: invalid argument: missing 'name' (Session info: chrome=73.0.3683.75) (Driver info: chromedriver=73.0.3683.68 (47787ec04b6e38e22703e856e101e840b65afe72),platform=Mac OS X 10.15.0 x86_64) (
    【解决方案2】:
    from selenium import webdriver
    driver = webdriver.Firefox()
    
    cookeis = storeResponse.cookies # cookiejar like in question 
    
    driver.get('<your url>') # catch InvalidCookieDomainException without in
    
    for key in cookies.keys():
        # print({name: key, value: cookies[key]}) # just print
        driver.add_cookie({'name': key, 'value': cookies[key]})
    

    【讨论】:

      猜你喜欢
      • 2012-09-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-09-05
      • 1970-01-01
      • 1970-01-01
      • 2019-02-09
      相关资源
      最近更新 更多