答案 0 :(得分:0)
根据您提供的屏幕截图,您的系统中似乎有Zombie ChromeDriver process的一对。
直接回答,您不能仅启动一个 ChromeDriver 进程,而重复自动化,因为您无法重新连接到上一个浏览会话。您可以在How can I reconnect to the browser opened by webdriver with selenium?
中找到详细的讨论您的代码试验将为我们提供更多的见解,从而说明为什么 ChromeDriver 流程没有得到清理。按照最佳做法,请始终在driver.quit()
方法内调用tearDown(){}
来关闭并销毁 WebDriver 和 Web Client 实例,如下所示:
driver.quit() // Python
//or
driver.quit(); // Java
//
driver.Quit(); // DotNet
您可以在PhantomJS web driver stays in memory
中找到详细的讨论如果 ChromeDriver 进程仍未销毁或删除,则可能需要从任务列表中终止这些进程。您可以在Selenium : How to stop geckodriver process impacting PC memory, without calling driver.quit()?
中找到详细的讨论Python解决方案(跨平台):
import os
import psutil
PROCNAME = "geckodriver" # or chromedriver or IEDriverServer
for proc in psutil.process_iter():
# check whether the process name matches
if proc.name() == PROCNAME:
proc.kill()
答案 1 :(得分:0)
留下* driver.exe进程的原因很可能是因为您没有在测试运行结束时显式关闭它们-以所选语言在驱动程序对象上调用quit()
方法
该步骤通常在对象的析构函数中完成-如果您使用的是面向对象的方法; finally
块(如果是异常处理);或程序/脚本的退出行。大多数高级框架(Cucumber,TestNG,Robotframework,使用不同语言的大量单元测试)都有某种“可拆卸”块,通常用于此目的。
为什么会这样?
启动自动化时,操作系统会为此启动进程;当您实例化一个webdriver对象时,它将为浏览器的驱动程序生成一个进程-在您的情况下为“ chromedriver.exe”。下一步是打开浏览器实例-“ chrome.exe”。
运行结束后,将关闭该过程。但是,如果您尚未显式调用quit()
方法-浏览器的驱动程序仍然存在,则“保持活动”;现在是一个孤立的进程(不要误以为是僵尸,这是完全不同的事情)-功能齐全,但是-没有程序可以命令它。
实际上,在此阶段-具有有效的驱动程序进程和浏览器,您可以重新连接到该进程,并在以后的运行中使用。在这里查看如何以及为什么-https://stackoverflow.com/a/52003231/3446126