Selenium/Java报java.net.SocketException: Connection reset求解
Selenium触发java.net.SocketException: Connection reset报错排查方案
从给出的运行日志判断,报错发生在Selenium通过WebSocket连接Chrome DevTools Protocol(CDP)创建会话的阶段,可按以下优先级逐一排查修复:
- 优先修复CDP版本不匹配问题
日志明确提示Unable to find an exact match for CDP version 103, so returning the closest version found: 102,这是触发连接重置的最常见原因。仅匹配ChromeDriver和本地Chrome浏览器版本不足以保证兼容性,还需要匹配Selenium核心依赖的版本:Chrome 103对应的Selenium Java版本要求为4.3.0及以上,若使用的Selenium版本低于4.3.0,内置的CDP协议实现最高仅支持到Chrome 102,版本回退时会直接导致WebSocket连接被重置。
如果使用Maven管理依赖,将pom文件中selenium-java的版本调整为4.3.0及以上,重新拉取依赖后再运行测试即可。 - 补充Chrome启动参数绕过同源限制
高版本Chrome默认会拦截非白名单来源的CDP连接,初始化ChromeDriver时没有配置对应参数会直接导致连接被重置,在初始化ChromeOptions时添加如下参数即可:ChromeOptions options = new ChromeOptions(); options.addArguments("--remote-allow-origins=*"); WebDriver driver = new ChromeDriver(options); - 排查本地拦截类软件影响
Connection reset的本质是TCP连接被对端强制断开,检查本机是否开启了全局代理、第三方防火墙、终端安全管控软件,这类软件经常会拦截本地进程间的端口通信(ChromeDriver和Chrome之间通过本地随机端口建立WebSocket连接),临时关闭上述软件后再复现测试,确认是否为拦截导致。 - 排查端口占用问题
从日志看本次ChromeDriver启动在63488端口,若该端口被其他进程占用,或者被系统端口规则限制,也会导致连接失败。可以在初始化ChromeDriver时手动指定空闲的未被占用端口,避开随机端口分配的异常问题。 - 无关日志说明
日志开头的SLF4J相关提示是日志门面缺少实现类导致的警告,和本次连接重置报错没有关联,不影响Selenium核心流程运行,如果需要消除该警告,引入对应slf4j实现依赖即可,无需针对该提示做额外排查。
内容的提问来源于stack exchange,提问作者Misiek Er
相关产品推荐
相关产品推荐

