Selenium调用Chrome默认配置文件的Cookie获取及无头模式异常问题
问题解决思路
1. Chrome运行时无法获取默认配置Cookie的问题
- 原因:Chrome的用户数据目录(
User Data)是独占锁定状态,同一时间仅能被一个Chrome进程占用。当本地Chrome处于运行状态时,Selenium启动的Chrome实例无法加载该目录,因此无法读取其中的Cookie。 - 解决方案:
- 方案一:使用Selenium前关闭所有本地Chrome进程(最直接)
- 方案二:复制默认用户数据目录到新路径,让Selenium使用副本避免冲突:
- 关闭本地Chrome
- 复制
C:\Users\Server\AppData\Local\Google\Chrome\User Data到新位置,比如C:\Users\Server\AppData\Local\Google\Chrome\Selenium User Data - 修改代码中的
user-data-dir参数指向新路径
2. 非headless模式下的DevToolsActivePort错误
- 原因:指定
user-data-dir后,Chrome需要明确的调试端口才能启动DevTools;非headless模式下默认端口分配失败,导致进程崩溃。另外Windows环境下--no-sandbox参数是多余的,反而可能引发权限问题。 - 解决方案:
- 添加
--remote-debugging-port参数,指定未被占用的端口(如9222) - 移除Windows环境下无需的
--no-sandbox参数 - 确保
user-data-dir路径对当前用户有读写权限
- 添加
修改后的示例代码
from selenium import webdriver from selenium.webdriver.chrome.options import Options chrome_options = Options() chrome_options.add_argument("--remote-debugging-port=9222") # 指定调试端口,解决DevToolsActivePort问题 chrome_options.add_argument(r"user-data-dir=C:\Users\Server\AppData\Local\Google\Chrome\Selenium User Data") # 使用副本目录 chrome_options.add_argument("--window-size=1920,1080") chrome_options.add_argument("--disable-blink-features=AutomationControlled") chrome_options.add_argument( "--user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36" ) # 注释掉以下行即可运行非无头模式 # chrome_options.add_argument("--headless") driver = webdriver.Chrome(options=chrome_options)
额外注意事项
- 确保ChromeDriver版本与本地Chrome版本完全匹配(如Chrome 114对应ChromeDriver 114)
- 若需同步默认配置的Cookie,可定期从原
User Data目录复制Cookies文件到副本目录
内容的提问来源于stack exchange,提问作者Сервер Чауш
相关产品推荐
相关产品推荐

