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基于mysql实现的简单队列以及跨进程锁实例详解
Jul 07 Python
跟老齐学Python之坑爹的字符编码
Sep 28 Python
Python检测生僻字的实现方法
Oct 23 Python
django基础之数据库操作方法(详解)
May 24 Python
python 递归遍历文件夹,并打印满足条件的文件路径实例
Aug 30 Python
python 处理dataframe中的时间字段方法
Apr 10 Python
python中for用来遍历range函数的方法
Jun 08 Python
django认证系统 Authentication使用详解
Jul 22 Python
PyCharm更改字体和界面样式的方法步骤
Sep 27 Python
python with语句的原理与用法详解
Mar 30 Python
基于Python pyecharts实现多种图例代码解析
Aug 10 Python
python+excel接口自动化获取token并作为请求参数进行传参操作
Nov 10 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
日本十大惊悚动漫
2020/03/04 日漫
PHP中for循环语句的几种变型
2006/11/26 PHP
PHPMYADMIN 简明安装教程 推荐
2010/03/07 PHP
php与flash as3 socket通信传送文件实现代码
2014/08/16 PHP
PHP实现执行外部程序的方法详解
2017/08/17 PHP
JS获取浏览器版本及名称实现函数
2013/04/02 Javascript
$.get获取一个文件的内容示例代码
2013/09/11 Javascript
AngularJS ng-bind-html 指令详解及实例代码
2016/07/30 Javascript
Javascript实现图片懒加载插件的方法
2016/10/20 Javascript
JavaScript通过filereader接口读取文件
2017/05/10 Javascript
vue中component组件的props使用详解
2017/09/04 Javascript
Bootstrap框架建立树形菜单(Tree)的实例代码
2017/10/30 Javascript
js中bool值的转换及“&&”、“||”、 “!!”详解
2017/12/21 Javascript
详解vue-router数据加载与缓存使用总结
2018/10/29 Javascript
引入外部js脚本加载慢与页面白屏问题的解决
2018/12/10 Javascript
vue中多路由表头吸顶实现的几种布局方式
2019/04/12 Javascript
使用异步controller与jQuery实现卷帘式分页
2019/06/18 jQuery
Vue分页器实现原理详解
2019/06/28 Javascript
在SSM框架下用laypage和ajax实现分页和数据交互的方法
2019/09/27 Javascript
vue动态路由:路由参数改变,视图不更新问题的解决
2019/11/05 Javascript
javascript实现超好看的3D烟花特效
2020/01/01 Javascript
[05:16]《大圣!大圣》——DOTA2新英雄齐天大圣配音李世宏老师专访
2016/12/13 DOTA
[01:33]PWL开团时刻DAY2-开雾与反开雾
2020/10/31 DOTA
Linux 发邮件磁盘空间监控(python)
2016/04/23 Python
Python内存管理方式和垃圾回收算法解析
2017/11/11 Python
用TensorFlow实现戴明回归算法的示例
2018/05/02 Python
PyCharm取消波浪线、下划线和中划线的实现
2020/03/03 Python
关于keras.layers.Conv1D的kernel_size参数使用介绍
2020/05/22 Python
pandas.DataFrame.drop_duplicates 用法介绍
2020/07/06 Python
Python pip 常用命令汇总
2020/10/19 Python
Lookfantastic德国官网:英国知名美妆购物网站
2017/06/11 全球购物
员工保密协议书
2014/09/27 职场文书
初中生毕业评语
2014/12/29 职场文书
2015年反腐倡廉工作总结
2015/05/14 职场文书
2015年秋季运动会加油稿
2015/07/22 职场文书
用python实现监控视频人数统计
2021/05/21 Python