如何清理所有 Selenium Firefox 进程

afo*_*bes 5 python selenium selenium-firefoxdriver

我用 python (3.6) 和 selenium、firefox web 驱动程序创建了一个 web scraper。我已经设置了一个 cronjob 每隔几分钟运行这个抓取工具,它似乎一切正常,除了随着时间的推移(比如几天),我的 Ubuntu VPS(8GB RAM,Ubuntu 18.04.4)上的内存被填满起来然后崩溃了。

当我检查 HTOP 时,我可以看到很多(例如数百个)firefox 进程,例如“/usr/lib/firefox -marionette”和“/usr/lib/firefox -contentproc”,全部占用大约 3 或 4m​​b 内存每个。

我已经放了一个

browser.stop_client() browser.close() browser.quit()

在使用网络驱动程序的每个函数中,但我怀疑脚本有时会在遇到错误时使网络驱动程序保持打开状态,并且没有正确关闭它们,并且这些 Firefox 进程只会累积,直到我的系统崩溃。

我正在努力寻找其根本原因,但与此同时,是否有一种快速方法可以终止/清理所有这些进程?

例如,一个杀死所有匹配进程(超过 10 分钟)的 cronjob?

谢谢。

小智 3

我怀疑该脚本有时会在遇到错误时使网络驱动程序保持打开状态,并且不会正确关闭它们

这很可能是问题所在。我们通过使用try except finally块来解决此问题。

browser = webdriver.Firefox()
try:
    # Your code
except Exception as e:
    # Log or print error
finally:
    browser.close()
    browser.quit()
Run Code Online (Sandbox Code Playgroud)

如果您仍然遇到同样的问题,您可以按照此答案或Ubuntu 的此答案强制终止驱动程序。

import os
os.system("taskkill /im geckodriver.exe /f")
Run Code Online (Sandbox Code Playgroud)

  • 很好的答案,但没有必要调用“browser.close()”。`browser.quit()` 已经关闭所有浏览器窗口。 (2认同)