Python Selenium:如何获取 cookie 并格式化它们以在 http 请求中使用

rob*_*ert 11 python cookies selenium

我想知道从 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)
Run Code Online (Sandbox Code Playgroud)

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

真诚地感谢您的任何帮助。

Lib*_*mas 18

all_cookies=self.driver.get_cookies();
cookies_dict = {}
for cookie in all_cookies:
    cookies_dict[cookie['name']] = cookie['value']
print(cookies_dict)
Run Code Online (Sandbox Code Playgroud)

您可以将它们传递给请求函数。

  • 对于需要快速回顾如何在请求中添加 cookie 的任何人 `response = requests.get('http://localhost:8000/posts', cookies=cookies_dict)` (2认同)

Uma*_*air 7

您可以使用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"))
Run Code Online (Sandbox Code Playgroud)

然后将它们添加回来:

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)
Run Code Online (Sandbox Code Playgroud)


小智 1

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

import json
cookies_list = list(json.dumps(get_cookies))
Run Code Online (Sandbox Code Playgroud)