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

如何解决Java Selenium调用driver.close()出现java.net.SocketException: Connection reset异常

SocketException: Connection reset 异常解决方案

异常根因

触发异常的核心原因是点击退出登录操作后,浏览器会话已经被服务端/前端逻辑销毁,Selenium驱动和浏览器之间的连接已经中断,此时再调用driver.close()尝试操控已经不存在的会话,就会抛出连接重置异常。

可落地的解决方法

  • 方案1:执行driver.close()前先校验会话有效性
    先通过轻量指令确认驱动会话还存活,再执行关闭操作,异常场景直接跳过即可,代码示例:
    driver.findElement(By.xpath("//*[text()='Log Out']")).click();
    try {
        // 调用空指令验证会话状态
        driver.getTitle();
        driver.close();
    } catch (java.net.SocketException | org.openqa.selenium.NoSuchSessionException e) {
        // 会话已销毁,无需额外处理
    }
    
  • 方案2:直接用driver.quit()替代driver.close()
    driver.quit()的逻辑本身兼容会话已销毁的场景,不会抛出这类连接异常,同时还会彻底清理驱动进程、浏览器临时进程,避免资源残留。
  • 方案3:增加显式等待确认退出流程完成
    部分场景下退出登录的跳转逻辑还未执行完成,会话未完全销毁就调用了关闭操作,也会触发异常,可以等待退出后的目标页面元素加载完成再执行关闭:
    driver.findElement(By.xpath("//*[text()='Log Out']")).click();
    // 等待登录页元素加载完成,确认退出流程结束
    new org.openqa.selenium.support.ui.WebDriverWait(driver, java.time.Duration.ofSeconds(2))
        .until(org.openqa.selenium.support.ui.ExpectedConditions.visibilityOfElementLocated(By.id("login_username")));
    driver.close();
    

其他排查方向

  • 确认Selenium核心包版本、浏览器版本、对应浏览器驱动版本三者完全匹配,版本不兼容也会偶发同类连接异常
  • 检查是否有其他逻辑在退出登录操作后已经调用过driver.quit(),重复调用关闭类接口也会触发该异常

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 18:54:01