使用Python将现有的Chrome cookie加载到Selenium webdriver中

wb1gzix0  于 2023-08-01  发布在  Go
关注(0)|答案(1)|浏览(115)

我正在尝试将已经存在的cookie(它们在C:\Users\nicoc\AppData\Local\Google\Chrome\User Data\Default\Cookie中)加载到Selenium驱动程序示例中。
现在,我已经了解到我可以使用函数driver.get_cookies()加载cookie并使用pickle保存它们,但我不想启动Selenium驱动程序会话并保存cookie,我需要以某些方式加载已经存在的cookie并将它们附加到新的Selenium驱动程序会话中,如下所示:

cookies = pickle.load(cookiesfile)
         for cookie in cookies:
             driver.add_cookie(cookie)

字符串
我还检查了这个答案https://stackoverflow.com/a/63158404/7848740,他加载了一个包含cookie的.pkl文件。不幸的是,GoogleChromeCookies没有格式,用文本编辑器打开时,似乎是一个SQLite3数据库
我也试过browsercookie https://pypi.org/project/browsercookie/,但它与最新的Chrome版本不兼容

4c8rllxm

4c8rllxm1#

我所做的工作是使用 * browser_cookie3 * 库从正常的浏览器会话中获取cookie,并使用 requests 库中的 dict_from_cookiejar 将生成的cookie jar转换为字典,可以将其处理为我们可以发送到Selenium webdriver示例的东西。

from urllib.parse import urlparse
import browser_cookie3
from requests.utils import dict_from_cookiejar

src_url = "https://a.b.c.com/homepage"
base_url = urlparse(src_url).netloc
cookies = browser_cookie3.chrome(domain_name=f'.{base_url}')
cookies_dict = dict_from_cookiejar(cookies)
driver.get(src_url)
for c_name, c_value in cookies_dict.items():
    driver.add_cookie({'name': c_name, 'value': c_value})
driver.get(src_url)

字符串
我认为至少在几个地方应该可以用更好的方式来写这篇文章;但我想不出更好的了例如,我认为我们应该能够在阅读之前确定我们的URL是什么,以避免加载两次(如果您在阅读之前尝试添加cookie,则会出现域不匹配的错误,因此您需要阅读网页,覆盖cookie并再次阅读网页)。另外,Selenium无法直接使用 browser_cookie3 创建的cookie jar,这似乎有点尴尬。
然而,这似乎可以实现OP所描述的功能(例如,如果您在浏览器上登录,则Selenium使用的浏览器示例也应该在您“窃取”主浏览器示例的cookie后登录,如上所述)。
当然,在示例代码中,将cookies = browser_cookie3.chrome(domain_name=f'.{base_url}')更改为适合您选择的浏览器的方法。

相关问题