我正在尝试将已经存在的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版本不兼容
1条答案
按热度按时间4c8rllxm1#
我所做的工作是使用 * browser_cookie3 * 库从正常的浏览器会话中获取cookie,并使用 requests 库中的 dict_from_cookiejar 将生成的cookie jar转换为字典,可以将其处理为我们可以发送到Selenium webdriver示例的东西。
字符串
我认为至少在几个地方应该可以用更好的方式来写这篇文章;但我想不出更好的了例如,我认为我们应该能够在阅读之前确定我们的URL是什么,以避免加载两次(如果您在阅读之前尝试添加cookie,则会出现域不匹配的错误,因此您需要阅读网页,覆盖cookie并再次阅读网页)。另外,Selenium无法直接使用 browser_cookie3 创建的cookie jar,这似乎有点尴尬。
然而,这似乎可以实现OP所描述的功能(例如,如果您在浏览器上登录,则Selenium使用的浏览器示例也应该在您“窃取”主浏览器示例的cookie后登录,如上所述)。
当然,在示例代码中,将
cookies = browser_cookie3.chrome(domain_name=f'.{base_url}')
更改为适合您选择的浏览器的方法。