Selenium执行完毕未关闭chromedriver/geckodriver进程的解决办法(java版+python版)


Posted in Python onDecember 07, 2020

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执行完毕未关闭chromedriver/geckodriver进程的解决办法(java版+python版)的文章就介绍到这了,更多相关Selenium关闭chromedriver/geckodriver进程内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
Python中使用item()方法遍历字典的例子
Aug 26 Python
Python简单定义与使用字典dict的方法示例
Jul 25 Python
详解Python中 sys.argv[]的用法简明解释
Dec 20 Python
Python标准库笔记struct模块的使用
Feb 22 Python
pandas的object对象转时间对象的方法
Apr 11 Python
Python使用Pandas库常见操作详解
Jan 16 Python
pytorch实现从本地加载 .pth 格式模型
Feb 14 Python
Python实现的北京积分落户数据分析示例
Mar 27 Python
Python greenlet和gevent使用代码示例解析
Apr 01 Python
解决pytorch多GPU训练保存的模型,在单GPU环境下加载出错问题
Jun 23 Python
详解python中的lambda与sorted函数
Sep 04 Python
Python Serial串口基本操作(收发数据)
Nov 06 Python
python 实现数据库中数据添加、查询与更新的示例代码
Dec 07 #Python
python 爬取小说并下载的示例
Dec 07 #Python
Python常用GUI框架原理解析汇总
Dec 07 #Python
pycharm中leetcode插件使用图文详解
Dec 07 #Python
使用Python爬取Json数据的示例代码
Dec 07 #Python
如何利用python生成MD5并去重
Dec 07 #Python
解决python3.6用cx_Oracle库连接Oracle的问题
Dec 07 #Python
You might like
php+javascript的日历控件
2009/11/19 PHP
PHP中的output_buffering详细介绍
2014/09/27 PHP
PHP获取服务器端信息的方法
2014/11/28 PHP
PHP三种方式实现链式操作详解
2017/01/21 PHP
PHP关键特性之命名空间实例详解
2017/05/06 PHP
laravel5.0在linux下解决.htaccess无效和去除index.php的问题
2019/10/16 PHP
php自动加载代码实例详解
2021/02/26 PHP
firefo xml 读写实现js代码
2009/06/11 Javascript
jquery ajax提交表单数据的两种方式
2009/11/24 Javascript
jQuery学习笔记之创建DOM元素
2015/01/19 Javascript
简单了解Backbone.js的Model模型以及View视图的源码
2016/02/14 Javascript
JavaScript判断页面加载完之后再执行预定函数的技巧
2016/05/17 Javascript
js模糊查询实例分享
2016/12/26 Javascript
基于jQuery选择器之表单对象属性筛选选择器的实例
2017/09/19 jQuery
JavaScript实现焦点进入文本框内关闭输入法的核心代码
2017/09/20 Javascript
微信小程序checkbox组件使用详解
2018/01/31 Javascript
小程序开发基础之view视图容器
2018/08/21 Javascript
5分钟快速掌握JS中var、let和const的异同
2018/09/19 Javascript
JS实现的冒泡排序,快速排序,插入排序算法示例
2019/03/02 Javascript
[00:57]辉夜杯战队访谈宣传片—VG
2015/12/25 DOTA
[03:49]辉夜杯现场龙骑士COSER秀情商“我喜欢芬队!”
2015/12/27 DOTA
[43:26]完美世界DOTA2联赛PWL S2 Forest vs Rebirth 第二场 11.20
2020/11/23 DOTA
python使用正则搜索字符串或文件中的浮点数代码实例
2014/07/11 Python
python队列原理及实现方法示例
2019/11/27 Python
python中pathlib模块的基本用法与总结
2020/08/17 Python
QT5 Designer 打不开的问题及解决方法
2020/08/20 Python
高性能钓鱼服装:Huk Gear
2019/02/20 全球购物
Europcar意大利:汽车租赁
2019/07/07 全球购物
如何整合JQuery和Prototype
2014/01/31 面试题
仓管岗位职责范本
2014/02/08 职场文书
班长演讲稿范文
2014/04/24 职场文书
投资入股合作协议书
2014/10/28 职场文书
担保书范本
2015/01/20 职场文书
监考失职检讨书
2015/01/26 职场文书
班主任培训研修日志
2015/11/13 职场文书
mysql在项目中怎么选事务隔离级别
2021/05/25 MySQL