如何通过Firefox WebDriver配置添加网站Cookie例外?解决Selenoid Firefox容器测试中的跨站跟踪Cookie拦截问题
我之前在Selenoid上跑Firefox自动化测试时,正好碰到过这个Firefox 103版本之后的隐私政策调整问题——默认拦截跨站跟踪Cookie,导致像teams.microsoft.com这类站点弹出Cookie授权提示,手动设置UI例外根本没用,毕竟容器每次启动都是全新环境。下面是我亲测有效的解决思路和配置方法:
核心问题原因
Firefox 103+把跨站跟踪Cookie的拦截设为默认行为,而且在容器化的无头/自动化环境中,通过UI操作添加的例外不会被持久化,必须直接通过Firefox的about:config偏好参数来预先配置,才能在测试启动时生效。
两种配置方案
方案1:全局允许所有Cookie(测试环境快速解决)
如果你的测试环境不需要严格的隐私限制,可以直接关闭Cookie拦截,一步到位:
from selenium.webdriver.firefox.options import Options options = Options() # 将Cookie行为设置为0:允许所有Cookie(默认是4:拦截跨站跟踪Cookie) options.set_preference("network.cookie.cookieBehavior", 0) # 关闭跟踪保护,避免额外拦截 options.set_preference("privacy.trackingprotection.enabled", False)
方案2:精准添加站点例外(保持默认拦截策略)
如果需要保留其他站点的拦截规则,只放行指定站点(比如teams.microsoft.com),可以配置例外参数:
from selenium.webdriver.firefox.options import Options options = Options() # 保持默认的跨站跟踪Cookie拦截行为(值为4) options.set_preference("network.cookie.cookieBehavior", 4) # 添加目标站点到跨站跟踪Cookie例外列表 options.set_preference("network.cookie.thirdparty.blocked_for_trackers.exceptions", "teams.microsoft.com") # 设置内容拦截为自定义模式,确保例外规则生效 options.set_preference("browser.contentblocking.category", "custom")
Selenoid容器配置(通过browsers.json)
如果是通过Selenoid的配置文件管理浏览器版本,可以把这些偏好直接写到容器的capabilities里,这样所有使用该版本Firefox的测试都会自动生效:
{ "firefox": { "default": "115.0", "versions": { "115.0": { "image": "selenoid/firefox:115.0", "port": "4444", "path": "/wd/hub", "capabilities": { "moz:firefoxOptions": { "prefs": { "network.cookie.cookieBehavior": 4, "network.cookie.thirdparty.blocked_for_trackers.exceptions": "teams.microsoft.com", "browser.contentblocking.category": "custom" } } } } } } }
验证效果
配置完成后启动测试,访问teams.microsoft.com时,应该不会再弹出「是否确定要接受来自该网站的Cookie?」的提示了——因为Firefox已经预先将该站点加入了跨站跟踪Cookie的例外列表,自动允许相关Cookie的存储。
内容的提问来源于stack exchange,提问作者Rémy P.A.
相关产品推荐
相关产品推荐

