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

求助:Selenium ChromeDriver启动新标签而非新窗口的异常问题

针对ChromeDriver会话复用问题的解决方案

嘿,我之前也碰到过一模一样的ChromeDriver会话复用坑,尤其是在个人笔记本上容易出现这种和其他机器不一致的情况。结合你的描述,这大概率是ChromeDriver默认尝试复用现有Chrome会话或者默认用户数据目录导致的,给你几个亲测有效的解决办法:

1. 强制开启全新窗口,禁用会话复用

ChromeDriver默认会检测系统中是否有正在运行的Chrome进程,如果有的话就会复用这个会话开新标签。我们可以通过添加启动参数强制它打开独立的新窗口:

System.setProperty("webdriver.chrome.driver","C:\\myapp\\chromedriver.exe");

ChromeOptions options = new ChromeOptions();
// 强制在新窗口打开,拒绝复用现有会话
options.addArguments("--new-window");
// 禁用Chrome的默认浏览器检查弹窗,避免干扰脚本
options.addArguments("--no-default-browser-check");

WebDriver driver = new ChromeDriver(options);
driver.get("https://www.irctc.co.in");

2. 创建独立的用户数据目录,彻底隔离缓存和扩展

如果上面的方法还没解决,那问题可能出在默认用户数据目录的缓存/扩展残留。我们可以指定一个全新的临时用户目录,让Chrome每次启动都用干净的环境:

System.setProperty("webdriver.chrome.driver","C:\\myapp\\chromedriver.exe");

ChromeOptions options = new ChromeOptions();
// 指定专属的自动化用户目录,路径可以自定义
options.addArguments("--user-data-dir=C:\\temp\\chrome_automation_profile");
// 可选:如果不需要加载任何扩展,直接禁用
options.addArguments("--disable-extensions");
// 可选:启动无头模式(如果不需要可视化窗口)
// options.addArguments("--headless=new");

WebDriver driver = new ChromeDriver(options);
driver.get("https://www.irctc.co.in");

注意:如果指定的目录不存在,Chrome会自动创建它。脚本运行结束后,你可以手动删除这个目录来清理临时数据,或者在脚本里添加删除目录的逻辑。

3. 启动前清理所有Chrome进程

有时候后台会残留Chrome的僵尸进程,导致Driver复用会话。你可以在启动脚本前手动结束所有chrome.exe进程,或者在代码里加一段命令行调用:

// 启动Driver前杀掉所有Chrome进程(Windows系统)
Runtime.getRuntime().exec("taskkill /F /IM chrome.exe /T");
// 给点时间让进程彻底关闭
Thread.sleep(2000);

// 然后再初始化Driver
System.setProperty("webdriver.chrome.driver","C:\\myapp\\chromedriver.exe");
// 加上前面的ChromeOptions配置...

这些方法应该能解决你遇到的问题,毕竟你已经确认代码在其他机器正常运行,那问题肯定出在本地Chrome和Driver的会话复用逻辑上。

内容的提问来源于stack exchange,提问作者rijin john

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 03:48:32