首页 > 解决方案 > 如何清理所有 Selenium Firefox 进程

问题描述

我用 python (3.6) 和一个 selenium、firefox 网络驱动程序创建了一个网络爬虫。我已经设置了一个 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()

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

我正在努力寻找造成这种情况的根本原因,但与此同时,有没有一种快速的方法可以杀死/清理所有这些进程?

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

谢谢。

标签: pythonseleniumselenium-firefoxdriver

解决方案


我怀疑脚本有时会在遇到错误时打开网络驱动程序,并且没有正确关闭它们

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

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

如果你仍然面临同样的问题,你可以按照这个答案强制杀死驱动程序,或者这个Ubuntu 的答案

import os
os.system("taskkill /im geckodriver.exe /f")

推荐阅读