如何实现Selenium ChromeDriver复用实例并加载本地Chrome Cookie
问题解决方法
问题根源
你当前的代码里,静态变量driver在类加载阶段就完成了初始化,但这时候options还没添加user-data-dir参数,连System.setProperty都还没执行——相当于ChromeDriver是在没有任何自定义配置的情况下启动的,自然不会加载本地Chrome的Cookie,还会新建会话。
修正步骤
- 只把
driver和options声明为类静态变量,不要在声明时初始化 - 把所有配置逻辑(设置驱动路径、添加用户数据目录参数)放到
main方法里,完成配置后再初始化driver - 这样
driver启动时会带上本地用户数据目录的配置,加载本地Cookie,同时作为类静态变量,handlecase方法可以直接复用这个实例
修正后的完整代码
import org.openqa.selenium.WebDriver; import org.openqa.selenium.chrome.ChromeDriver; import org.openqa.selenium.chrome.ChromeOptions; public class Criteria { // 只声明静态变量,不初始化 static ChromeOptions options; static WebDriver driver; public static void main(String args[]) throws Exception { // 1. 设置ChromeDriver路径 System.setProperty("webdriver.chrome.driver", "C:\\Users\\sample\\Downloads\\chromedriver-win64\\chromedriver.exe"); // 2. 初始化options并添加本地用户数据目录参数 options = new ChromeOptions(); // 注意路径要对应你本地Chrome的用户数据目录,Windows和Mac路径格式不同,按需调整 options.addArguments("user-data-dir=C:\\Users\\sample\\AppData\\Local\\Google\\Chrome\\User Data"); // 3. 用配置好的options初始化driver driver = new ChromeDriver(options); driver.manage().window().maximize(); // 示例调用handlecase handlecase("https://example.com"); } public static void handlecase(String type) { // 直接复用静态driver实例 for (int i = 0; i < 5; i++) { // 替换5为实际循环次数 driver.get(type); // 这里添加你的业务逻辑 } } }
额外注意事项
- 确保
user-data-dir的路径正确:Windows默认路径是C:\Users\<你的用户名>\AppData\Local\Google\Chrome\User Data,Mac是/Users/<你的用户名>/Library/Application Support/Google/Chrome/,路径错误会导致加载失败 - 启动ChromeDriver前,关闭所有本地Chrome窗口,否则会因为用户数据目录被占用而启动失败
- 可以复制一份默认用户目录作为自动化测试专用目录,避免影响日常使用的Chrome数据
内容的提问来源于stack exchange,提问作者SAMSON JACK
相关产品推荐
相关产品推荐

