如何用Java+Selenium的for循环先后执行Chrome与无痕Chrome的相同步骤?
问题分析与修复方案
你的代码之所以会同时打开两个浏览器,核心问题是提前实例化了无痕模式的ChromeDriver,导致两个浏览器进程直接同时启动。另外还有几处逻辑错误:循环里错误固定操作无痕驱动的窗口大小、finally块只关闭普通驱动且在循环内执行会导致后续操作报错。
修复思路
- 先单独跑完普通Chrome的完整流程,关闭驱动后再启动无痕模式
- 把两个浏览器的执行逻辑拆成独立步骤,确保顺序执行
修正后的代码
// 第一步:执行普通Chrome的流程 try { driver.manage().window().setSize(new Dimension(412, 915)); driver.get("https://www.google.com"); // 补全协议头,避免浏览器导航失败 // 在这里编写你的业务流程代码,比如元素点击、数据填写等操作 } catch (Exception e) { throw new IllegalStateException("普通Chrome执行出错: " + e.getMessage()); } finally { if (driver != null) { driver.quit(); // 用quit彻底关闭浏览器进程和驱动服务,避免残留 } } // 第二步:执行无痕Chrome的流程 ChromeOptions chromeOptions = new ChromeOptions(); chromeOptions.addArguments("--incognito"); ChromeDriver chromeIncognitoDriver = null; try { chromeIncognitoDriver = new ChromeDriver(chromeOptions); chromeIncognitoDriver.manage().window().setSize(new Dimension(412, 915)); chromeIncognitoDriver.get("https://www.google.com"); // 复制上面普通Chrome的业务流程代码,执行相同操作 } catch (Exception e) { throw new IllegalStateException("无痕Chrome执行出错: " + e.getMessage()); } finally { if (chromeIncognitoDriver != null) { chromeIncognitoDriver.quit(); } }
关键改动说明
- 拆分执行步骤,先完成普通浏览器的所有操作再启动无痕模式,彻底避免同时打开两个窗口
- 将窗口大小设置改为对应当前驱动的操作,不再错误固定操作无痕驱动
- 用
quit()替代close(),确保彻底关闭浏览器进程和驱动服务,防止残留进程 - 补全URL的
https://协议头,避免浏览器无法正确解析地址 - 增加空指针判断,防止驱动未初始化时执行关闭操作报错
内容的提问来源于stack exchange,提问作者Lilyzzz
相关产品推荐
相关产品推荐

