Selenium中driver.close()与driver.quit()的区别及进程清理方案

Dylan
Dylan
发布时间:2026-10-14| 5人浏览过
原创

本文详解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关闭浏览器相关内容,请搜索本站历史文章或继续浏览后续文章,感谢大家的支持!

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。