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



我试图将已经存在的cookie(它们在C:UsersnicocAppDataLocalGoogleChromeUser DataDefaultCookie中)加载到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文件。不幸的是,谷歌Chrome cookie没有格式,打开一个文本编辑器,似乎是一个SQLite3数据库

我也尝试过browsercookie https://pypi.org/project/browsercookie/,但它与最新的Chrome版本不兼容

我所做的工作是使用browser_cookie3库从正常的浏览器会话中获取cookie,并使用dict_from_cookiejarrequests库将生成的cookiejar转换为可以处理成我们可以发送给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罐,这似乎有点尴尬。

然而,这似乎可以完成OP所描述的内容(例如,如果您在浏览器上登录,Selenium使用的浏览器实例也应该在您"偷窃"之后登录)。主浏览器实例的cookie(如上所述)。

在示例代码中,将cookies = browser_cookie3.chrome(domain_name=f'.{base_url}')更改为您所选择的浏览器的适当方法。

最新更新