如何清理所有Selenium Firefox进程

2024-10-03 09:11:35 发布

您现在位置:Python中文网/ 问答频道 /正文

我用python(3.6)和selenium、firefox web驱动程序创建了一个web scraper。我已经设置了一个cronjob,每隔几分钟运行一次这个scraper,它似乎都在工作,只是随着时间的推移(比如几天),我的ubuntuvps(8gbram,ubuntu18.04.4)上的内存填满了,然后崩溃了

当我查看HTOP时,我可以看到很多(如数百个)firefox进程,如“/usr/lib/firefox-marionete”和“/usr/lib/firefox-contentproc”,它们都占用了大约3或4mb的内存

我放了一个

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

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

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

例如,终止所有匹配进程(超过10分钟)的cronjob

谢谢


Tags: 内存browserweb进程libusrselenium驱动程序
1条回答
网友
1楼 · 发布于 2024-10-03 09:11:35

I suspect the script is sometimes leaving web drivers open when it hits an error, and not closing them properly

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

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

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

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

相关问题 更多 >