selenium异常:org.openqa.selenium.remote.UnreachableBrowserException

    这几天在使用webdriver打开chrome浏览器的时候,程序在运行到driver.manage().window().maximize();  //将窗口最大化,就报错了:

 

    org.openqa.selenium.remote.UnreachableBrowserException:Error communicatingwith the  remotebrowser. It may have died.

 

       这个错误在最初几天开始运行的时候并没有出现过,但是之后几乎总是会出现,查了很多资料才发现原因是socket连接达到了上限。重新看了遍程序,发现自己仅在程序正常运行到结束的时候,才调用了driver.quit()serveice.stop(),但实际运行中程序大多以各种异常结束,这样的话,socket连接并没有关闭,会有大量的tcp连接处理establishtime_wait状态,导致无法继续请求新的连接,所以重新运行程序的时候,会报上述异常。

     下面,首先记录下如何让程序跑起来,然后解释上述问题发生的原因,最后介绍下如何避免再次发生这种异常:

1  如何让程序继续运行起来:

        既然现在的问题是由于socket连接未被正常的释放,导致大量的tcp连接处于establishtime_waitlast_ack等状态造成的,那么直观的

    解决方案就是:断开这些连接。最有效的解决方案就是,先查出这些tcp连接的进程号,然后直接杀死相应的进程。(windows系统)

      首先以管理员身份运行cmd

    

         然后通过命:netstat –ano 查看tcp连接的进程号,由于是本机和chromw浏览器建立的连接,所以这些连接的本地地址就是本机的IP,所以只需

    查找协议为TCP,本地地址为主机IP,状态为establishedclose_waitlast_ack的进程PID

      

    最后通过命令:taskkill /F /PID429(以进程号429为例)强制杀死这些进程(之前以管理员身份运行也是为了避免出现执行taskkill后,出现

   无法访问问题),但是在执行这条语句的时候请注意,你有可能会杀死圆口键盘的驱动,我就误杀了好几次,后来按键没反应,又通过U口键盘

   开机后,执行

   reg add HKLM\SYSTEM\CurrentControlSet\Control\Class\{4D36E96B-E325-11CE-BFC1-08002BE10318}/vUpperFilters /t reg_multi_sz /d 

   kbdclass /f 后重启,才恢复正常的= =

  

2  如何避免问题再次发生

       捕捉程序一切可能的异常结束,并在捕捉异常后,在finally{}语句中添加

      {    driver.close(); service.stop();  }

   避免连接未被释放

3  问题是如何产生的

       这个的解释挺详细的:http://www.cnblogs.com/olartan/p/4268269.html

 

 

 

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值