如何通过ChromeOptions.AddUserProfilePreference设置ChromeDriver允许所有Cookie?
我来帮你搞定这个Cookie配置的问题!首先得指出你代码里两个容易踩坑的点,再给你正确的配置方案:
1. 先排查代码里的小错误
你写的–no-sandbox用了中文破折号,ChromeDriver会识别无效,要改成英文双破折号--no-sandbox;另外-disable-gpu这类参数规范写法是双破折号--disable-gpu,单破折号虽能生效但不规范,建议统一修正。
2. 核心问题:隐身模式下用户偏好不生效
你启用了-incognito隐身模式,这时候Chrome会创建临时的隔离配置,你通过AddUserProfilePreference设置的Cookie偏好会被直接忽略!这就是你之前设置没效果的关键原因。
方案一:关闭隐身模式(推荐,除非业务必须)
如果不需要隐身窗口,删掉-incognito参数,然后添加以下两个关键偏好设置,确保所有Cookie都被允许:
new DriverManager().SetUpDriver(new ChromeConfig()); var options = new OpenQA.Selenium.Chrome.ChromeOptions { }; // 修正参数的破折号为英文 options.AddArgument("--no-sandbox"); options.AddArgument("--disable-gpu"); options.AddArgument("--disable-dev-shm-usage"); options.AddArgument("--start-maximized"); // 关键Cookie配置:允许所有Cookie options.AddUserProfilePreference("security.cookie_behavior", 0); // 适配新版Chrome的Cookie控制开关(防止界面级限制) options.AddUserProfilePreference("profile.cookie_controls_mode", 0); CurrentWebDriver = new ChromeDriver(options);
方案二:必须使用隐身模式的配置
如果业务要求必须用隐身窗口,需要通过命令行参数强制禁用Cookie限制,而不是用户偏好:
new DriverManager().SetUpDriver(new ChromeConfig()); var options = new OpenQA.Selenium.Chrome.ChromeOptions { }; options.AddArgument("--no-sandbox"); options.AddArgument("--disable-gpu"); options.AddArgument("--disable-dev-shm-usage"); options.AddArgument("--incognito"); options.AddArgument("--start-maximized"); // 隐身模式下强制允许所有Cookie的关键参数 options.AddArgument("--disable-features=CookieControls"); options.AddArgument("--profile.default_content_setting_values.cookies=1"); CurrentWebDriver = new ChromeDriver(options);
配置参数说明
security.cookie_behavior=0:对应Chrome内部的Cookie行为枚举,0代表允许所有Cookie(包括第三方)profile.cookie_controls_mode=0:关闭新版Chrome的Cookie控制界面(地址栏的小饼干图标),确保不会覆盖你的配置--disable-features=CookieControls:隐身模式下禁用Chrome的Cookie控制功能,强制允许所有Cookie
测试时可以打开Chrome的chrome://settings/content/cookies页面,确认“允许所有Cookie”选项是否被选中,就能验证配置是否生效了。
内容的提问来源于stack exchange,提问作者RaSedg
相关产品推荐
相关产品推荐

