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

求助:无需远程调试,用Selenium连接动态端口的Chrome 138已打开页面

连接已打开Chrome页面的Selenium代码问题及解决

问题需求

  • 目标:编写代码直接连接动态端口上已打开的Chrome 138页面,无需启动新Chrome实例
  • 核心错误:无法创建新会话,响应码500,提示unknown error: unable to discover open window in chrome

错误详情

抛出异常:

org.openqa.selenium.SessionNotCreatedException: Could not start a new session. Response code 500. Message: unknown error: unable to discover open window in chrome
(Session info: chrome=138.0.7204.15)

现有代码

System.setProperty("webdriver.http.factory", "jdk-http-client");
System.setProperty("webdriver.chrome.driver","I:\EToolsAuto\WD_Utils\Drivers"+driverVersion);
ChromeOptions options = new ChromeOptions();
options.addArguments("--remote-debugging-port="+portNum);
options.addArguments("--remote-allow-origins=*");
options.addArguments("--disable-extensions");
options.addArguments("--no-sandbox");
ChromeDriver driver = new ChromeDriver( options);

环境信息

  • Selenium版本:4.23.0(修订版:4df0a231af)
  • 操作系统:Windows Server 2019(amd64,版本10.0)
  • Java版本:11.0.12
  • Chrome版本:138.0.7204.15
  • ChromeDriver版本:对应Chrome 138的适配版本

解决方案

你的代码核心错误是:直接用ChromeDriver(options)会强制启动新Chrome实例,而非连接已打开的实例。正确做法是通过调试地址创建远程连接,步骤如下:

前置条件

已打开的Chrome必须通过--remote-debugging-port=xxx参数启动(这是连接已存实例的必要前提,所谓"无需远程调试"是指不启动新实例,但目标实例必须开启调试端口)

修正后的代码

import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeOptions;
import org.openqa.selenium.remote.RemoteWebDriver;
import java.net.URL;

public class AttachToRunningChrome {
    public static void main(String[] args) throws Exception {
        int portNum = 54475; // 替换为实际的动态端口号
        String driverVersion = "chromedriver.exe"; // 替换为对应Chrome 138的驱动文件名

        // 配置驱动路径(注意转义反斜杠)
        System.setProperty("webdriver.chrome.driver", "I:\\EToolsAuto\\WD_Utils\\Drivers\\" + driverVersion);
        System.setProperty("webdriver.http.factory", "jdk-http-client");

        ChromeOptions options = new ChromeOptions();
        options.addArguments("--remote-allow-origins=*");
        options.addArguments("--disable-extensions");
        options.addArguments("--no-sandbox");

        // 连接到已打开的Chrome实例的调试地址
        WebDriver driver = new RemoteWebDriver(new URL("http://localhost:" + portNum), options);

        // 测试连接:打印当前页面标题
        System.out.println("当前页面标题:" + driver.getTitle());

        // 后续业务操作...
        // 注意:调用driver.quit()会关闭整个已打开的Chrome实例,仅断开连接可忽略此方法
    }
}

关键说明

  • 路径中的反斜杠必须转义为\\,否则会被当作转义字符导致路径识别错误
  • 使用RemoteWebDriver而非ChromeDriver来连接已存在的实例,ChromeDriver默认行为是启动新实例
  • 如果不需要关闭原Chrome实例,不要调用driver.quit(),仅关闭当前标签页可使用driver.close()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 22:22:44