【问题标题】:Python Selenium: How to get cookies and format them to use in an http requestPython Selenium:如何获取 cookie 并格式化它们以在 http 请求中使用
【发布时间】:2021-05-25 23:03:13
【问题描述】:

我想知道从 selenium webdriver 实例 (chromedriver) 获取 cookie 并将它们转换为可以作为 http 标头传递的 cookie 字符串的最佳方法。这是我尝试这样做的方式:获取 selenium 提供的每个 cookie 的字典列表,然后手动添加等号和分号以对其进行格式化,就像在 Cookie 标头中一样。问题是:这不起作用,在我正在测试的站点上它返回 500 内部服务器错误,我认为这是由 a.对请求的处理不当,以及 b。一个错误的请求,特别是 cookie 部分。

cookies_list = driver.get_cookies()
cookieString = ""
for cookie in cookies_list[:-1]:
    cookieString = cookieString + cookie["name"] + "="+cookie["value"]+"; "

cookieString = cookieString  + cookies_list[-1]["name"] + "="+ cookies_list[-1]["value"]

print(cookieString)

有没有更简单的方法可以做到这一点和/或我格式化不起作用的 cookie 字符串有什么问题。

衷心感谢您的帮助。

【问题讨论】:

    标签: python selenium cookies


    【解决方案1】:

    您可以使用 pickle 将当前 cookie 保存为 python 对象。例如:

    import pickle
    import selenium.webdriver 
    
    driver = selenium.webdriver.Firefox()
    driver.get("http://www.google.com")
    pickle.dump( driver.get_cookies() , open("cookies.pkl","wb"))
    

    稍后再添加它们:

    import pickle
    import selenium.webdriver 
    
    driver = selenium.webdriver.Firefox()
    driver.get("http://www.google.com")
    cookies = pickle.load(open("cookies.pkl", "rb"))
    for cookie in cookies:
        driver.add_cookie(cookie)
    

    【讨论】:

      【解决方案2】:

      我找到了更好的方法。
      例如:如果要获取名为 '__ivc' 的 cookie 的过期时间

      all_cookies=self.driver.get_cookies();
      cookies_dict = {}
             for cookie in all_cookies:
                 cookies_dict[cookie['name']] = cookie['expiry'] // You can insert expiry/value/domain/priority in the value of dctionary
      print(cookies_dict)
      print(cookies_dict.get('__ivc'))
      

      输出将如下所示:

      {'_ga': 1685026815, '__ivc': 1685026816, '_ga_MNGCCS5STP': 1685026815}
      1685026816
      

      【讨论】:

        【解决方案3】:

        使用 json 将 cookie 转储到可以格式化的可迭代对象中:

        import json
        cookies_list = list(json.dumps(get_cookies))
        

        【讨论】:

        • -1 ... json.dumps() 返回一个字符串,如果你将一个字符串传递给list(),你最终会得到一个字符列表,而不是键值对。跨度>
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-02-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-01-31
        • 1970-01-01
        相关资源
        最近更新 更多