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

如何使用Java + Selenium WebDriver保存并加载所有Cookie

Java Selenium WebDriver全域名Cookie保存与加载实现方案

核心说明

原生driver.manage().getCookies()仅支持获取当前活跃页面对应域名的Cookie,要获取浏览器实例内所有域名的全量Cookie,需调用Chrome DevTools Protocol(CDP)接口实现,addCookie单条添加的限制可以通过循环遍历批量处理解决。


完整实现

前置依赖

本方案基于Selenium 4.0+版本实现,无需额外引入第三方依赖,旧版本Selenium可通过driver.executeCdpCommand()直接执行CDP命令达到相同效果。

1. 保存全域名Cookie到txt文件

import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.devtools.DevTools;
import org.openqa.selenium.devtools.v125.network.Network;
import org.openqa.selenium.devtools.v125.network.model.Cookie;

import java.io.File;
import java.io.IOException;
import java.util.List;

public class CookieSaver {
    public static void saveAllCookies(ChromeDriver driver, String filePath) throws IOException {
        // 开启DevTools连接
        DevTools devTools = driver.getDevTools();
        devTools.createSessionIfThereIsNotOne();
        // 启用Network域
        devTools.send(Network.enable(java.util.Optional.empty(), java.util.Optional.empty(), java.util.Optional.empty()));
        // 获取所有域名的全部Cookie
        List<Cookie> allCookies = devTools.send(Network.getAllCookies());
        // 序列化Cookie列表写入txt文件
        ObjectMapper objectMapper = new ObjectMapper();
        objectMapper.writeValue(new File(filePath), allCookies);
    }
}

注:代码中v125对应你的Chrome浏览器大版本,需和本地Chrome版本匹配,也可以用不带版本的通用DevTools接口

2. 从txt文件加载全量Cookie恢复会话

添加Cookie前需要先导航到对应Cookie的域名下(Selenium限制添加Cookie时当前页面必须属于目标域名),可通过访问对应域名的静态资源(如favicon.ico)避免跳转影响业务逻辑:

import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.devtools.v125.network.model.Cookie;

import java.io.File;
import java.io.IOException;
import java.util.List;

public class CookieLoader {
    public static void loadAllCookies(ChromeDriver driver, String filePath) throws IOException {
        // 读取文件中的Cookie列表
        ObjectMapper objectMapper = new ObjectMapper();
        List<Cookie> savedCookies = objectMapper.readValue(new File(filePath), new TypeReference<List<Cookie>>() {});
        
        for (Cookie cookie : savedCookies) {
            // 处理域名前缀的点号,避免访问失败
            String domain = cookie.getDomain().startsWith(".") ? cookie.getDomain().substring(1) : cookie.getDomain();
            // 先导航到对应域名的静态资源页,满足Cookie添加的域名限制
            driver.get(String.format("https://%s/favicon.ico", domain));
            // 构建并添加Cookie
            org.openqa.selenium.Cookie seleniumCookie = new org.openqa.selenium.Cookie.Builder(cookie.getName(), cookie.getValue())
                    .domain(cookie.getDomain())
                    .path(cookie.getPath())
                    .isSecure(cookie.getSecure())
                    .isHttpOnly(cookie.getHttpOnly())
                    .expiresOn(cookie.getExpires() != null ? java.util.Date.from(cookie.getExpires()) : null)
                    .build();
            driver.manage().addCookie(seleniumCookie);
        }
    }
}

注意事项

  • 本方案默认适配Chromium内核浏览器(Chrome、Edge等),Firefox等其他内核浏览器可替换为对应内核的DevTools接口,逻辑一致
  • 存储Cookie的txt文件包含身份敏感信息,生产环境使用建议做加密存储
  • 如果Cookie对应域名只支持HTTP协议,导航时将https替换为http即可

内容的提问来源于stack exchange,提问作者S.O.S

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.20 05:45:02