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常见文件操作的函数示例代码
Nov 15 Python
Python查询Mysql时返回字典结构的代码
Jun 18 Python
python递归计算N!的方法
May 05 Python
基于python的Tkinter实现一个简易计算器
Dec 31 Python
Python绘制3D图形
May 03 Python
pandas.DataFrame删除/选取含有特定数值的行或列实例
Nov 07 Python
Python 一句话生成字母表的方法
Jan 02 Python
解决Django Static内容不能加载显示的问题
Jul 28 Python
浅谈python图片处理Image和skimage的区别
Aug 04 Python
10行Python代码计算汽车数量的实现方法
Oct 23 Python
pytorch实现对输入超过三通道的数据进行训练
Jan 15 Python
Python趣味入门教程之循环语句while
Aug 26 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
初识通用数据库操作类――前端easyui-datagrid,form(php)
2015/07/31 PHP
PHP模板引擎Smarty中的保留变量用法分析
2016/04/11 PHP
php格式化时间戳
2016/12/17 PHP
IE和Firefox在JavaScript应用中的兼容性探讨
2008/04/01 Javascript
30个让人兴奋的视差滚动(Parallax Scrolling)效果网站
2012/03/04 Javascript
js数组的基本操作(很全自己整理的)
2014/10/16 Javascript
express的中间件basicAuth详解
2014/12/04 Javascript
JavaScript中定义函数的三种方法
2015/03/12 Javascript
js实现仿Discuz文本框弹出层效果
2015/08/13 Javascript
js仿黑客帝国字母掉落效果代码分享
2020/11/08 Javascript
jQuery实现点击任意位置弹出层外关闭弹出层效果
2016/10/19 Javascript
JS实现随机颜色的3种方法与颜色格式的转化
2017/01/05 Javascript
bootstrap fileinput 上传插件的基础使用
2017/02/17 Javascript
Form表单上传文件(type="file")的使用
2017/08/03 Javascript
js注册时输入合法性验证方法
2017/10/21 Javascript
dts文件中删除一个node或属性的操作方法
2018/08/05 Javascript
Layui 数据表格批量删除和多条件搜索的实例
2019/09/04 Javascript
nuxt踩坑之Vuex状态树的模块方式使用详解
2019/09/06 Javascript
vue中重定向redirect:‘/index‘,不显示问题、跳转出错的完美解决
2020/09/28 Javascript
[07:08]2014DOTA2西雅图国际邀请赛 小组赛7月11日TOPPLAY
2014/07/11 DOTA
[01:01:13]2018DOTA2亚洲邀请赛 4.5 淘汰赛 Mineski vs VG 第三场
2018/04/06 DOTA
python实现换位加密算法的示例
2018/10/14 Python
Python for i in range ()用法详解
2020/09/18 Python
python thrift 实现 单端口多服务的过程
2020/06/08 Python
matplotlib.pyplot.matshow 矩阵可视化实例
2020/06/16 Python
Html5页面内使用JSON动画的实现
2019/01/29 HTML / CSS
美国网上鞋城:Shoeline.com
2016/11/17 全球购物
日本订房网站,预订日本星级酒店/温泉旅馆:Relux(支持中文)
2020/01/03 全球购物
SQL Server的固定数据库角色都有哪些?对应的服务器权限有哪些?
2013/05/18 面试题
幼儿园优秀教师事迹
2014/02/13 职场文书
手机被没收检讨书
2014/02/22 职场文书
大三学生做职业规划:给未来找个方向
2014/02/24 职场文书
火锅店营销方案
2014/02/26 职场文书
商务助理求职信范文
2014/04/20 职场文书
小学生国旗下演讲稿
2014/04/25 职场文书
最新的离婚协议书范本!
2019/07/02 职场文书