我有一个多进程程序,可以创建 chrome web 驱动程序的新实例,但过了一会儿,我发现 chrome 进程的数量变得非常高(2300!!):
opt/google/chrome/chrome --disable-background-networking --disable-client-side-phishing-detection --disable-default-apps --disable-hang-monitor --disable-infobars --disable-popup-blocking --disable-prompt-on-repost
我尝试使用以下代码杀死在退出驱动程序后仍然存在的任何 chrome 进程:
mydisplay = Display(visible=0, size=(1024, 768))
mydisplay.start()
mydriver = webdriver.Chrome('driver path')
PIDs = psutil.Process(mydriver.service.process.pid).children(recursive=True)
self.driver.quit()
self.display.stop()
for p in PIDs:
try:
p.kill()
except:
print 'no process to kill'
但是当它运行时,仍然留下一些“chrome”进程。知道问题的根本原因以及如何解决它吗?
假设您使用的是 Linux,您可能会遇到以下情况:Chromedriver 在尝试启动新会话时经常挂起
解决方案是将
DBUS_SESSION_BUS_ADDRESS=/dev/null
添加到环境变量中:
export DBUS_SESSION_BUS_ADDRESS=/dev/null
$ DBUS_SESSION_BUS_ADDRESS=/dev/null python myscript.py
我遇到了同样的问题,解决方案是在 TestCleanup 上按名称杀死所有 chromedriver.exe 进程。 由于我不习惯 python,我发现 this 问题可能会帮助你做到这一点。
编辑:我最近遇到了这个问题,解决方案是开始使用 driver.Quit() 而不是 driver.Close()。
driver.Close() 将简单地关闭驱动程序(也可用于关闭选项卡),而 driver.Quit() 将关闭浏览器并杀死与该实例相关的任何进程。
我决定这样做:每次启动新浏览器时都会获取 PID 并将其附加到全局列表中,并且有一个循环函数可以杀死所有 chrome 进程(如果它们的 id 不在列表中)。对我有用