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

如何使用Selenium WebDriver打开新浏览器窗口并保留原窗口、清除Cookie

如何打开无Cookie的新浏览器窗口且保留原窗口?

我来帮你解决这个问题!你之前尝试的两种方法都有几个关键疏漏,导致没达到预期效果,咱们一步步拆解并给出可行方案:

先说说你原有代码的问题:

  • Actions方法:只执行了keyDown(Keys.CONTROL)但没调用keyUp,会导致Ctrl键一直处于按住状态,后续操作会出问题;而且就算打开了新窗口,driver.get()还是会在原窗口执行,因为你没切换到新窗口的句柄。
  • Robot方法:单独按VK_N根本不会打开新窗口,打开新窗口需要配合Ctrl键(Windows/Linux)或Cmd键(Mac),同样也没处理窗口切换和Cookie清除的问题。

下面给你两种可靠的解决方案,按需选择:


方案一:在同一浏览器中打开新窗口并清除Cookie

这种方式会在当前浏览器进程中打开新窗口,切换到新窗口后清除所有Cookie,原窗口保持正常运行:

// 1. 正确发送Ctrl+N打开新窗口,务必释放按键
Actions act = new Actions(driver);
act.keyDown(Keys.CONTROL)
   .sendKeys("n")
   .keyUp(Keys.CONTROL)
   .build()
   .perform();

// 2. 获取所有窗口句柄,切换到刚打开的新窗口
Set<String> windowHandles = driver.getWindowHandles();
List<String> handleList = new ArrayList<>(windowHandles);
// 切换到最后一个窗口(新打开的那个)
driver.switchTo().window(handleList.get(handleList.size() - 1));

// 3. 清除新窗口的所有Cookie
driver.manage().deleteAllCookies();

// 4. 访问目标网站
driver.get("https://www.facebook.com");

关键说明:

  • 必须调用keyUp(Keys.CONTROL)释放按键,避免后续操作异常;
  • 切换窗口句柄是核心,否则所有driver操作都会在原窗口执行;
  • 清除Cookie要在切换到新窗口后执行,这样才会清除新窗口的会话数据。

方案二:创建全新的WebDriver实例(推荐)

如果需要完全独立的无Cookie会话,直接创建一个新的WebDriver实例是最可靠的方式,新窗口和原窗口完全独立,互不影响:

// 原窗口的driver实例保持运行,不会被关闭
// 以Chrome为例,创建新的浏览器实例
ChromeOptions options = new ChromeOptions();
// 可根据需求添加配置,比如禁用通知:options.addArguments("--disable-notifications");
WebDriver newDriver = new ChromeDriver(options);

// 新实例默认没有任何Cookie,直接访问目标网站
newDriver.get("https://www.facebook.com");

// 原窗口的driver仍可正常使用,比如继续操作原页面
driver.get("https://www.google.com");

关键说明:

  • 新的WebDriver实例是完全独立的会话,自带干净的Cookie环境;
  • 两个窗口分别由不同的driver实例控制,不需要切换句柄;
  • 原窗口的操作不会影响新窗口,反之亦然。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 03:51:41