python - 如何清理所有 Selenium Firefox 进程

标签 python selenium selenium-firefoxdriver

我用 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 或每个 4mb 的内存。

我放了一个

browser.stop_client() 浏览器.close() 浏览器.quit()

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

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

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

谢谢。

最佳答案

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

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

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

如果您仍然遇到同样的问题,您可以按照此 answer 强制终止驱动程序,或者这个 answer对于 Ubuntu。

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

关于python - 如何清理所有 Selenium Firefox 进程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61626571/

相关文章:

python - 关于python中的Buffer接口(interface)

javascript - 如何找到 document.DocumentElement.Client 的坐标

javascript - Selenium IDE - 如何处理 java 脚本警报和确认

java - Firefox 驱动程序失败并出现无法访问的错误

javascript - 火狐驱动程序 : enable plugins

python - 在类里面授予对服务帐户的访问权限到 Google 帐户

python - 执行非 block 写入时出现问题

python - Numpy savez/load 数千个数组,但不是一步完成

html - 单击带有 <href> 和 <a> 标签的按钮

c# - 为什么 Selenium Firefox 驱动程序认为当父级溢出 :hidden? 时我的模态不显示