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中使用items()方法返回字典元素对的教程
May 21 Python
python中pygame针对游戏窗口的显示方法实例分析(附源码)
Nov 11 Python
Python验证文件是否可读写代码分享
Dec 11 Python
基于numpy.random.randn()与rand()的区别详解
Apr 17 Python
Python实现正弦信号的时域波形和频谱图示例【基于matplotlib】
May 04 Python
Django用户认证系统 Web请求中的认证解析
Aug 02 Python
pyqt5、qtdesigner安装和环境设置教程
Sep 25 Python
Python的形参和实参使用方式
Dec 24 Python
Python Handler处理器和自定义Opener原理详解
Mar 05 Python
Python定义一个Actor任务
Jul 29 Python
python-图片流传输的思路及示例(url转换二维码)
Dec 21 Python
python脚本框架webpy的url映射详解
Nov 20 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
session 的生命周期是多长
2006/10/09 PHP
解析Linux下Varnish缓存的配置优化
2013/06/20 PHP
php去除字符串换行符示例分享
2014/02/13 PHP
php给图片添加文字水印方法汇总
2015/08/27 PHP
Yii清理缓存的方法
2016/01/06 PHP
深入讲解PHP的Yii框架中的属性(Property)
2016/03/18 PHP
PHP中addslashes与mysql_escape_string的区别分析
2016/04/25 PHP
BOOM vs RR BO5 第三场 2.14
2021/03/10 DOTA
event.srcElement 用法笔记e.target
2009/12/18 Javascript
jquery中eq和get的区别与使用方法
2011/04/14 Javascript
js面向对象之公有、私有、静态属性和方法详解
2015/04/17 Javascript
JavaScript人脸识别技术及脸部识别JavaScript类库Tracking.js
2015/09/14 Javascript
Node.js 应用跑得更快 10 个技巧
2016/04/03 Javascript
你不需要jQuery(三) 新AJAX方法fetch()
2016/06/14 Javascript
浅谈window.onbeforeunload() 事件调用ajax
2016/06/29 Javascript
AngularJs bootstrap搭载前台框架——基础页面
2016/09/01 Javascript
微信小程序 开发工具快捷键整理
2016/10/31 Javascript
jQuery擦除插件eraser使用方法详解
2020/01/11 jQuery
React实现评论的添加和删除
2020/10/20 Javascript
详解Swift中属性的声明与作用
2016/06/30 Python
老生常谈Python进阶之装饰器
2017/05/11 Python
python 定义给定初值或长度的list方法
2018/06/23 Python
Python 字符串与数字输出方法
2018/07/16 Python
transform python环境快速配置方法
2018/09/27 Python
python自动化测试之异常及日志操作实例分析
2019/11/09 Python
python画蝴蝶曲线图的实例
2019/11/21 Python
Python生成词云的实现代码
2020/01/14 Python
Tensorflow tf.dynamic_partition矩阵拆分示例(Python3)
2020/02/07 Python
阿迪达斯法国官方网站:adidas法国
2018/03/20 全球购物
某同学的自我鉴定范文
2013/12/26 职场文书
个人担保书格式范文
2014/05/12 职场文书
省级青年文明号申报材料
2014/05/23 职场文书
学生会竞选演讲稿怎么写
2014/08/26 职场文书
批评与自我批评发言稿
2014/10/15 职场文书
党的群众路线整改落实情况汇报
2014/10/28 职场文书
先进事迹材料范文
2014/12/29 职场文书