Mozilla FireFox(无响应)- Selenium WebDriver 拒绝通过 driver.quit() 命令关闭

3
我的程序同时启动了几十个WebDriver实例,并在满足一定条件或手动终止程序时杀死它们。在任何时候,我可能会有四打的活跃WebDriver实例,为了杀死不需要的实例,我调用:
driver.quit();
如果driver.quit()抛出异常,我通过Runtime.getRuntime().exec() taskkill命令按PID杀死WebDriver。
大多数活动驱动程序都会在此调用中被销毁(当我退出程序时)。然而,通常会有少量的1-3个“挂起”,显示"Mozila FireFox (Not Responding)"的消息。并且它们永远不会死去。
我无法确定问题的根本原因,因为我使用的命令通常是有效的。我查看了SO上关于类似问题的几个线程,但我感觉没有一个解决了我的问题,因为正如所述,我使用的命令通常是有效的 - 它只是不能在所有实例上工作。就我所见,没有任何驱动程序操作方式之间的区别。并且当我调用 driver.quit() 时没有任何错误/异常被抛出。所以当命令工作和不工作时似乎是纯随机的。
什么原因导致Firefox像这样挂起,并且不响应quit()命令?
谢谢!
1个回答

0

你走上了正确的轨道,但当满足某些条件时,不要手动终止程序,而是使用:

driver.quit();

您可以在PhantomJS Web Driver保留在内存中的详细讨论中找到更多信息。
如果您需要强制终止Firefox进程,您也可以通过getRuntime().exec()命令使用taskkill()(Windows)命令,如下所示:
Runtime.getRuntime().exec("taskkill /F /IM firefox.exe /T");

您可以在Selenium:如何停止geckodriver进程影响PC内存,而不调用driver.quit()的详细讨论中找到更多信息。

如果Mozilla FireFox出现Mozilla FireFox(未响应)的消息并且无法运行,那么这通常意味着某些东西阻止了Mozilla FireFox的进程。


解决方案

根据Firefox未响应文章,以下是解决此问题的多种方法(适用于Windows 10):

  • 关闭Mozilla FireFox(如果传统方法不起作用,请通过任务管理器关闭程序)。
  • 重新启动系统。
  • 更新系统显卡驱动程序: Firefox可能由于过时的显卡驱动程序而遇到问题。您需要确保您的系统运行在最新的驱动程序更新上。
  • 禁用Firefox的硬件加速:硬件加速功能也与显卡有关。在某些情况下,取决于特定的图形卡设置,当使用硬件加速时Firefox可能会陷入冻结循环中。因此,关闭此功能。

1
感谢您的回复,但是我已经调用了driver.quit()(当我提到手动终止程序时,这只是一个调用driver.quit()的信号,所以您可以忽略那部分)。我的问题是,虽然大多数实例在调用driver.quit后被销毁,但总会有1或2个“挂起”。通过任务管理器手动关闭实例会破坏自动化的整个目的。对我来说,24/7“看护”服务器也不切实际,因为每小时都会启动和销毁数十个实例。期待您的见解。谢谢! - Alan Cook

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接