Selenium运行报WebSocket$Listener onError连接重置错误如何解决
Selenium启动Chrome触发WebSocket连接重置异常排查方案
日志非阻断类提示说明
首先过滤掉不影响核心流程的提示信息,不需要优先处理:
- SLF4J日志提示:仅为项目缺少SLF4J实现包导致,不影响Selenium核心运行逻辑
- CDP版本匹配警告:Selenium未找到和当前ChromeDriver完全匹配的CDP版本,自动适配了邻近低版本,属于兼容范围提示,不会直接触发连接重置
- ChromeDriver启动成功、W3C协议检测成功日志,说明驱动本身的启动流程无异常
核心Connection reset异常排查步骤
异常触发点为ChromeDriver和浏览器建立DevTools WebSocket连接阶段,按以下优先级逐一排查:
- 版本一致性校验
确认本地安装的Chrome浏览器大版本和ChromeDriver版本完全对应,你当前使用的ChromeDriver为102版本,若本地Chrome版本高于或低于该大版本,直接替换对应版本的ChromeDriver,或者重装Chrome到和驱动完全匹配的版本。不要依赖CDP邻近版本兼容逻辑,版本差会直接导致WebSocket握手失败断连 - 修正代码逻辑冲突
你当前的代码在实例化ChromeDriver后立刻调用driver.close(),此时后台还在完成DevTools连接握手流程,主动关闭会直接打断WebSocket连接触发重置。
调整代码逻辑:实例化驱动后预留初始化等待时间,执行完测试操作后优先用quit()方法完整清理驱动和浏览器进程,不要刚实例化就立刻关闭资源。修正后的基础示例代码:
import org.openqa.selenium.chrome.*;
public class Testt {
static { System.setProperty("webdriver.chrome.driver","./driver/chromedriver.exe"); } public static void main(String[] args) throws InterruptedException { ChromeDriver driver= new ChromeDriver(); // 等待驱动和浏览器连接初始化完成 Thread.sleep(2000); // 此处编写页面操作逻辑 // 用quit替代close,完整回收进程资源 driver.quit(); }
}
- 本地网络拦截排查 检查本地是否开启系统代理、第三方防火墙、安全管控软件,这类工具会拦截localhost回环地址的WebSocket连接,测试阶段可暂时关闭相关工具,或者将localhost、127.0.0.1加入代理绕过列表。 Windows环境下还要排查是否有其他进程占用Chrome调试端口,可通过ChromeOptions手动指定空闲调试端口启动,避免端口冲突: ```java ChromeOptions options = new ChromeOptions(); options.setExperimentalOption("debuggerAddress", "127.0.0.1:9222"); ChromeDriver driver = new ChromeDriver(options);
- 依赖版本适配
如果你使用的Selenium版本高于4.2.0,尝试降级到4.1.x稳定版本,高版本Selenium内置的Netty客户端在JDK 13及以上版本(从你的报错栈看当前使用JDK 13)存在WebSocket连接偶发断连的已知问题。
内容的提问来源于stack exchange,提问作者Maya
相关产品推荐
相关产品推荐

