Selenium中driver.close()与driver.quit()的区别及进程清理方案
本文详解Selenium中driver.close()与driver.quit()的区别,指出close仅关闭当前标签页而quit关闭所有窗口并退出驱动。针对Windows下ChromeDriver进程残留问题,介绍了Java中通过ChromeDriverService管理进程以及Python中使用Service库或os模块强制结束进程的方法,确保测试环境整洁。
Selenium关闭浏览器的两种方法及进程残留问题
在Windows操作系统中运行Selenium脚本时,常遇到一个现象:程序执行完毕后,chromedriver.exe进程并未完全退出,仍驻留在内存中。

针对这一问题,参考了相关技术文章进行探讨:https://www.jb51.net/article/201622.htm
Selenium操控Chrome浏览器依赖于ChromeDriver驱动。在WebDriver接口中,提供两种关闭浏览器的方法:close()和quit()。
/**
* Close the current window, quitting the browser if it's the last window currently open.
*/
void close();
/**
* Quits this driver, closing every associated window.
*/
void quit();
查阅官方文档可知,close()方法用于关闭当前由driver实例操作的窗口。若当前仅有一个标签页,调用close()等同于关闭整个浏览器;而quit()方法则直接退出驱动实例,并关闭所有关联的标签页。因此,close()通常用于关闭单个标签页,而quit()才是彻底关闭浏览器的标准做法。以下通过示例验证这一结论:
package lessons;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
public class FindElement_LinkText {
public static void main(String[] args) throws Exception {
System.setProperty("webdriver.chrome.driver", ".\\Tools\\chromedriver.exe");
WebDriver driver = new ChromeDriver();
driver.manage().window().maximize();
driver.get("https://www.baidu.com");
driver.close();
//driver.quit();
}
}
通过切换注释最后两行代码,分别运行测试并观察效果。当使用close()时,由于仅有一个百度首页标签页,浏览器窗口会关闭,但通过任务管理器可见ChromeDriver进程依然存在于内存中。若使用quit(),整个浏览器及关联的ChromeDriver进程均会被正常终止。
Java中通过ChromeDriverService管理进程
ChromeDriver是一个轻量级服务。在单任务测试或无需频繁启动浏览器的场景下,使用driver.quit()即可正常结束ChromeDriver进程。然而,在大型测试套件中频繁启动和关闭浏览器,可能会引入明显的延迟,甚至导致浏览器进程无法及时关闭。为避免此类资源占用问题,可通过ChromeDriverService来控制ChromeDriver进程的生命周期,实现“用完即关”的效果(即在子进程中运行服务器)。具体实现如下:
ChromeDriverService service = new ChromeDriverService.Builder() .usingChromeDriverExecutable(new File("E:\\Selenium WebDriver\\chromedriver_win_23.0.1240.0\\chromedriver.exe")).usingAnyFreePort().build();
service.start();
driver = new ChromeDriver();
driver.get("http://www.baidu.com");
driver.quit();
// 关闭 ChromeDriver 接口
service.stop();
Python中控制ChromeDriver进程的方案
上述讨论基于Java语言实现。对于Python用户,可以通过使用service库来控制ChromeDriver的启动与关闭。
from selenium.webdriver.chrome.service import Service
在创建Service对象时,需指定chromedriver.exe的路径,并调用其命令行参数方法,否则可能报错。配置完成后即可启动服务。
c_service = Service('xxx')
c_service.command_line_args()
c_service.start()
driver = webdriver.Chrome()
driver.get(http://www.baidu.com)
关闭浏览器时,建议使用quit()而非close()。close()仅关闭当前页面,而quit()会退出驱动并关闭所有关联窗口,执行完毕后自动清理资源。
driver.quit()
c_service.stop()
若觉得配置Service过于繁琐,也可直接使用Python的os模块执行以下两条命令来强制结束相关进程:
os.system('taskkill /im chromedriver.exe /F')
os.system('taskkill /im chrome.exe /F')
至此,关于Selenium框架中driver.close()和driver.quit()关闭浏览器的内容介绍完毕。如需了解更多Selenium关闭浏览器相关内容,请搜索本站历史文章或继续浏览后续文章,感谢大家的支持!
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













