Selenium Java无法连接已有的Chrome会话问题求助
以下是针对你遇到的ConnectionFailedException(无法建立WebSocket连接)的具体解决步骤:
严格匹配Chrome与ChromeDriver版本
WebDriverManager默认下载最新版ChromeDriver,但如果本地手动启动的Chrome是旧版本,版本不兼容会直接导致连接失败。你可以手动指定对应版本的ChromeDriver,比如你的Chrome版本是114.0.5735.90,修改代码如下:driver = WebDriverManager.chromedriver().browserVersion("114.0.5735.90").capabilities(options).create();或者直接把Chrome升级到最新版本,再运行代码让WebDriverManager自动匹配下载对应驱动。
检查9222端口是否被占用
打开命令提示符,执行以下命令查看端口占用情况:netstat -ano | findstr :9222如果有其他进程占用该端口,要么打开任务管理器杀掉对应PID的进程,要么换一个未被占用的端口(比如9223),同时更新Chrome启动命令和代码里的
debuggerAddress。确认用户数据目录的有效性
确保D:\SQA\Browser_data\ChromeData目录有读写权限,且启动Chrome前没有其他Chrome进程在使用这个目录(否则会导致远程调试服务无法正常监听)。如果目录有问题,换一个新的空目录试试,比如:chrome --remote-debugging-port=9222 --user-data-dir="D:\SQA\Browser_data\NewChromeData"不要用
driver.quit()关闭手动启动的Chrome
你代码里的driver.quit()会直接关闭你手动启动的Chrome窗口,甚至可能导致连接异常。如果只是想关闭当前标签页,改用driver.close();如果不需要关闭浏览器,直接注释掉driver.quit()语句。验证Chrome远程调试服务是否正常运行
启动Chrome后,在浏览器里打开http://127.0.0.1:9222,如果能看到包含已打开标签页的调试页面,说明服务正常;如果打不开,检查Chrome启动命令是否正确——要确保是从Chrome安装目录(比如C:\Program Files\Google\Chrome\Application)启动的chrome.exe,先cd到该目录再执行启动命令。绕开WebDriverManager直接指定驱动路径
有时候WebDriverManager的自动匹配会出问题,你可以手动下载与Chrome版本一致的ChromeDriver,然后直接指定路径:System.setProperty("webdriver.chrome.driver", "C:\\path\\to\\chromedriver.exe"); ChromeOptions options = new ChromeOptions(); options.setExperimentalOption("debuggerAddress", "127.0.0.1:9222"); driver = new ChromeDriver(options);
内容的提问来源于stack exchange,提问作者Aliul Islam Abir

