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 相关文章推荐
使用IPython来操作Docker容器的入门指引
Apr 08 Python
python验证码识别教程之灰度处理、二值化、降噪与tesserocr识别
Jun 04 Python
在Python中增加和插入元素的示例
Nov 01 Python
解决Python安装时报缺少DLL问题【两种解决方法】
Jul 15 Python
python 处理微信对账单数据的实例代码
Jul 19 Python
浅析PEP572: 海象运算符
Oct 15 Python
python中urllib.request和requests的使用及区别详解
May 05 Python
Python selenium爬虫实现定时任务过程解析
Jun 08 Python
如何基于Python Matplotlib实现网格动画
Jul 20 Python
Python sqlalchemy时间戳及密码管理实现代码详解
Aug 01 Python
python 两种方法删除空文件夹
Sep 29 Python
Python Django项目和应用的创建详解
Nov 27 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文件操作的详解
2013/06/05 PHP
PHP函数addslashes和mysql_real_escape_string的区别
2014/04/22 PHP
Yii使用smsto短信接口的函数demo示例
2016/07/13 PHP
接收键盘指令的脚本
2006/06/26 Javascript
用JavaScript对JSON进行模式匹配 (Part 2 - 实现)
2010/07/17 Javascript
基于Jquery与WebMethod投票功能实现代码
2011/01/19 Javascript
input 输入框获得/失去焦点时隐藏/显示文字(jquery版)
2013/04/02 Javascript
jquery操作 iframe的方法
2014/12/03 Javascript
5种处理js跨域问题方法汇总
2014/12/04 Javascript
JS实现自动定时切换的简洁网页选项卡效果
2015/10/13 Javascript
浅谈js的url解析函数封装
2016/06/28 Javascript
javascript中Date对象的使用总结
2016/11/21 Javascript
解决Angular.Js与Django标签冲突的方案
2016/12/20 Javascript
AngularJS 文件上传控件 ng-file-upload详解
2017/01/13 Javascript
URL中“#” “?” &“”号的作用浅析
2017/02/04 Javascript
JS创建Tag标签的方法详解
2017/06/09 Javascript
使用Angular CLI进行Build(构建)和Serve详解
2018/03/24 Javascript
浅谈Angular HttpClient简单入门
2018/05/04 Javascript
解决angularjs service中依赖注入$scope报错的问题
2018/10/02 Javascript
vue自定义键盘信息、监听数据变化的方法示例【基于vm.$watch】
2019/03/16 Javascript
Python文件操作之合并文本文件内容示例代码
2017/09/19 Python
numpy返回array中元素的index方法
2018/06/27 Python
selenium + python 获取table数据的示例讲解
2018/10/13 Python
详解python实现交叉验证法与留出法
2019/07/11 Python
python3实现的zip格式压缩文件夹操作示例
2019/08/17 Python
numpy求平均值的维度设定的例子
2019/08/24 Python
关于numpy中eye和identity的区别详解
2019/11/29 Python
python错误调试及单元文档测试过程解析
2019/12/19 Python
python 实现在shell窗口中编写print不向屏幕输出
2020/02/19 Python
大学优秀班主任事迹材料
2014/05/02 职场文书
2014年社区党建工作总结
2014/11/11 职场文书
先进事迹材料怎么写
2014/12/30 职场文书
构建和谐校园倡议书
2015/01/19 职场文书
我们的节日中秋节活动总结
2015/03/23 职场文书
我的长征观后感
2015/06/09 职场文书
会计实训总结范文
2015/08/03 职场文书