You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为Selenium远程驱动批量添加Cookie以解决单个add_cookie过慢问题

错误原因

你自定义ActionChain实现批量加Cookie的思路不符合W3C Webdriver的Actions协议规范,该协议仅支持键盘、指针、滚轮三类输入设备的指定动作,不存在addCookie类型的动作定义,Chrome Driver收到不符合要求的动作参数就会抛出你遇到的报错,这条路不可行。

可行方案(无需修改Chrome Driver)

方案1:调用Chrome DevTools Protocol(CDP)批量添加(推荐,Selenium4+ 原生支持)

CDP提供了Network.setCookies接口,支持单次传入所有Cookie数组完成批量添加,全程只需要和远程Chrome Driver交互1次,速度不受Cookie数量影响,且支持httpOnly、sameSite等所有Cookie属性。
示例代码:

# 转换为CDP兼容的Cookie格式,缺省字段补默认值
cdp_cookies = []
target_domain = driver.current_url.split("/")[2]
for cookie in cookies:
    cdp_cookie = {
        "name": cookie["name"],
        "value": cookie["value"],
        "domain": cookie.get("domain", target_domain),
        "path": cookie.get("path", "/"),
        "secure": cookie.get("secure", False),
        "httpOnly": cookie.get("httpOnly", False),
        "sameSite": cookie.get("sameSite", "Lax")
        # 其他需要的自定义字段可自行补充
    }
    cdp_cookies.append(cdp_cookie)

# 一次请求完成所有Cookie添加
driver.execute_cdp_cmd("Network.setCookies", {"cookies": cdp_cookies})

方案2:执行JS脚本批量添加(兼容Selenium3)

如果还在使用Selenium3不支持CDP调用,可以构造JS脚本在浏览器端一次性执行所有Cookie的添加操作,全程也只需要和远程Chrome Driver交互1次,缺点是无法添加带有httpOnly属性的Cookie。
示例代码:

add_cookie_js = """
const cookieList = arguments[0];
cookieList.forEach(c => {
    let str = `${c.name}=${c.value};`;
    if(c.domain) str += `domain=${c.domain};`;
    if(c.path) str += `path=${c.path};`;
    if(c.secure) str += `secure;`;
    if(c.expiry) str += `expires=${new Date(c.expiry * 1000).toUTCString()};`;
    document.cookie = str;
});
"""
# 一次执行所有Cookie添加
driver.execute_script(add_cookie_js, cookies)

注意事项

  • 无论使用哪种方案,添加Cookie前必须先导航到目标域名下的任意页面,否则浏览器会因安全策略拒绝设置Cookie
  • 如果需要跨域名设置Cookie,仅CDP方案支持,只需在Cookie参数中指定对应domain即可

内容的提问来源于stack exchange,提问作者Axiom Lemma

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 12:36:04