Selenium:当我启动 Web 驱动程序实例时,会引发太多 Chrome 进程

问题描述 投票:0回答:3

我有一个多进程程序,可以创建 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”进程。知道问题的根本原因以及如何解决它吗?

python selenium multiprocessing
3个回答
1
投票

假设您使用的是 Linux,您可能会遇到以下情况:Chromedriver 在尝试启动新会话时经常挂起

解决方案是将

DBUS_SESSION_BUS_ADDRESS=/dev/null
添加到环境变量中:

  • export DBUS_SESSION_BUS_ADDRESS=/dev/null
  • $ DBUS_SESSION_BUS_ADDRESS=/dev/null python myscript.py

1
投票

我遇到了同样的问题,解决方案是在 TestCleanup 上按名称杀死所有 chromedriver.exe 进程。 由于我不习惯 python,我发现 this 问题可能会帮助你做到这一点。

编辑:我最近遇到了这个问题,解决方案是开始使用 driver.Quit() 而不是 driver.Close()。

driver.Close() 将简单地关闭驱动程序(也可用于关闭选项卡),而 driver.Quit() 将关闭浏览器并杀死与该实例相关的任何进程。


0
投票

我决定这样做:每次启动新浏览器时都会获取 PID 并将其附加到全局列表中,并且有一个循环函数可以杀死所有 chrome 进程(如果它们的 id 不在列表中)。对我有用

© www.soinside.com 2019 - 2024. All rights reserved.