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

Selenium 3.12/Java 10.0.1随机抛SocketException:Permission denied: connect求助

解决Selenium每隔2小时触发SocketException的问题

一、先明确:你没执行driver.quit()就是核心原因!

每次测试后不调用driver.quit(),会导致Geckodriver、Firefox进程残留,大量TCP连接处于未释放状态。Win7的系统端口资源是有限的,大概2小时左右就会被耗尽,自然就会弹出Permission denied: connect的错误——这完全符合你遇到的现象。

二、不用重启电脑的应急修复方法

如果现在已经触发错误,按下面步骤操作就能快速恢复:

  • 打开任务管理器,找到所有firefox.exe和geckodriver.exe进程,全部强制结束(别漏了,有时候会有多个后台残留进程)
  • 以管理员身份打开命令提示符,执行两条命令重置TCP/IP栈:
    netsh int ip reset resetlog.txt
    netsh winsock reset
    
  • 等待1-2分钟让系统完成重置,再重新运行你的代码,问题就能暂时解决

三、从代码层面根治问题(避免再复发)

要彻底杜绝这个问题,必须保证WebDriver实例被正确关闭,哪怕代码执行出错也要执行关闭操作:

  • 用try-finally块包裹你的测试逻辑,确保driver.quit()一定会被调用:
    WebDriver driver = new FirefoxDriver();
    try {
        // 这里写你的测试操作代码
    } finally {
        if (driver != null) {
            driver.quit(); // 划重点:必须用quit,不是close!close只会关窗口,不会杀进程
        }
    }
    

    补充:如果只是想查看浏览器内容,可以在测试逻辑末尾加个等待(比如Thread.sleep(10000)),等你看完再让代码执行driver.quit(),这样既不影响调试,也不会残留资源

四、额外优化建议(让系统更“扛造”)

  • 考虑把Geckodriver升级到适配Firefox60的最新小版本(虽然0.20.1是兼容的,但后续小版本可能修复了资源泄漏的细节问题)
  • 调整Win7的TCP参数,提升系统的连接上限(这一步只需要做一次):
    1. 按下Win+R输入regedit打开注册表编辑器
    2. 定位到HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters
    3. 右键新建DWORD(32位)值,分别设置:
      • MaxUserPort:数值数据填65534(这是系统能用到的最大端口数)
      • TcpTimedWaitDelay:数值数据填30(把TIME_WAIT状态的连接等待时间从默认240秒缩短到30秒,加快资源释放)
    4. 设置完成后重启一次电脑,之后系统的连接资源管理会更高效

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 07:13:59