selenium框架中driver.close()和driver.quit()关闭浏览器


Posted in Python onDecember 08, 2020

Windows系统上,每次运行完selenium程序后,chromedriver.exe进程总是不能彻底关闭。

selenium框架中driver.close()和driver.quit()关闭浏览器

网上参考了如下文章:https://3water.com/article/201622.htm

selenium操作chrome浏览器需要有ChromeDriver驱动来协助。webdriver中关浏览器关闭有两个方法,一个叫quit,一个叫close。

/**
* 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实例操作的页面,叫当前。如果当前窗口只有一个tab,那么这个close方法就相当于关闭了浏览器。quit方法就是直接退出并关闭所有关联的tab窗口。所以,close方法一般关闭一个tab,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方法的时候,因为只有百度首页这个tab,所以会关闭浏览器,但是通过查看任务管理器发现,ChromeDriver进程仍存在内存中。如果使用quit方法,整个浏览器都直接关闭,ChromeDriver进程也会被结束。

ChromeDriver是轻量级的服务,在单任务或不需要频繁启动浏览器的情况下,使用driver.quit()关闭浏览器,可以正常结束ChromeDriver进程。若在一个比较大的 测试套件中频繁的启动关闭,会增加一个比较明显的延时导致浏览器进程不被关闭的情况发生,为了避免这一状况我们可以通过ChromeDriverService来控制ChromeDriver进程的生死,达到用完就关闭的效果避免进程占用情况出现(Running the  server in a child process)。具体实现如下:

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();

以上讨论的均是java版的实现,对于python来说是使用service库来实现控制chromedriver的开启和关闭。

from selenium.webdriver.chrome.service import Service

创建的时候需要把chromedriver.exe的位置写在Service的XXX部分,需要调用他的命令行方法,不然报错,然后启动就可以了。

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()

嫌麻烦也可以直接使用python的os模块执行下面两句话结束进程

os.system('taskkill /im chromedriver.exe /F')
os.system('taskkill /im chrome.exe /F')

到此这篇关于selenium框架中driver.close()和driver.quit()关闭浏览器的文章就介绍到这了,更多相关selenium 关闭浏览器内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
Python导出数据到Excel可读取的CSV文件的方法
May 12 Python
使用Python的Django框架结合jQuery实现AJAX购物车页面
Apr 11 Python
Python 专题六 局部变量、全局变量global、导入模块变量
Mar 20 Python
python下10个简单实例代码
Nov 15 Python
Python中矩阵库Numpy基本操作详解
Nov 21 Python
python Opencv将图片转为字符画
Feb 19 Python
Python处理命令行参数模块optpars用法实例分析
May 31 Python
python读取xlsx的方法
Dec 25 Python
Python应用领域和就业形势分析总结
May 14 Python
python多线程高级锁condition简单用法示例
Nov 07 Python
python opencv实现简易画图板
Aug 27 Python
使用anaconda安装pytorch的实现步骤
Sep 03 Python
Python hashlib和hmac模块使用方法解析
Dec 08 #Python
Python虚拟环境virtualenv创建及使用过程图解
Dec 08 #Python
Selenium执行完毕未关闭chromedriver/geckodriver进程的解决办法(java版+python版)
Dec 07 #Python
python 实现数据库中数据添加、查询与更新的示例代码
Dec 07 #Python
python 爬取小说并下载的示例
Dec 07 #Python
Python常用GUI框架原理解析汇总
Dec 07 #Python
pycharm中leetcode插件使用图文详解
Dec 07 #Python
You might like
PHP 多维数组排序实现代码
2009/08/05 PHP
PHP 翻页 实例代码
2009/08/07 PHP
php自动获取字符串编码函数mb_detect_encoding
2011/05/31 PHP
php的一个简单加密解密代码
2014/01/14 PHP
Thinkphp调用Image类生成缩略图的方法
2015/03/07 PHP
浏览器打开层自动缓慢展开收缩实例代码
2013/07/04 Javascript
tangram框架响应式加载图片方法
2013/11/21 Javascript
jQuery学习笔记之2个小技巧
2015/01/19 Javascript
浅谈javascript事件取消和阻止冒泡
2015/05/26 Javascript
JS实现的图片选择顺序切换和循环切换功能示例【测试可用】
2018/12/28 Javascript
说说如何利用 Node.js 代理解决跨域问题
2019/04/22 Javascript
WebGL学习教程之Three.js学习笔记(第一篇)
2019/04/25 Javascript
nodejs实现获取本地文件夹下图片信息功能示例
2019/06/22 NodeJs
vue打开新窗口并实现传参的图文实例
2021/03/04 Vue.js
python实现360皮肤按钮控件示例
2014/02/21 Python
python计算对角线有理函数插值的方法
2015/05/07 Python
Python中字符串对齐方法介绍
2015/05/21 Python
利用Python获取赶集网招聘信息前篇
2016/04/18 Python
python笔记:mysql、redis操作方法
2017/06/28 Python
Python3实现发送QQ邮件功能(附件)
2020/12/23 Python
Python中的并发处理之asyncio包使用的详解
2018/04/03 Python
influx+grafana自定义python采集数据和一些坑的总结
2018/09/17 Python
Python使用pandas对数据进行差分运算的方法
2018/12/22 Python
pycharm 将python文件打包为exe格式的方法
2019/01/16 Python
在pycharm 中添加运行参数的操作方法
2019/01/19 Python
python3 自动识别usb连接状态,即对usb重连的判断方法
2019/07/03 Python
python3实现微型的web服务器
2019/09/03 Python
python如何导出微信公众号文章方法详解
2020/08/31 Python
python 中关于pycharm选择运行环境的问题
2020/10/31 Python
一站式跨境收款解决方案:Payoneer(派安盈)
2018/09/06 全球购物
文明演讲稿范文
2014/05/12 职场文书
五一口号
2014/06/19 职场文书
matplotlib之pyplot模块实现添加子图subplot的使用
2021/04/25 Python
Python自然语言处理之切分算法详解
2021/04/25 Python
常用的Python代码调试工具总结
2021/06/23 Python
Kubernetes关键组件与结构组成介绍
2022/03/31 Servers