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内置的模块与函数进行不同进制的数的转换
Mar 12 Python
python学习之面向对象【入门初级篇】
Jan 21 Python
python编程通过蒙特卡洛法计算定积分详解
Dec 13 Python
linux安装Python3.4.2的操作方法
Sep 28 Python
python Django 创建应用过程图示详解
Jul 29 Python
PyCharm搭建Spark开发环境的实现步骤
Sep 05 Python
浅谈Django+Gunicorn+Nginx部署之路
Sep 11 Python
tensorflow实现对张量数据的切片操作方式
Jan 19 Python
Python基于DB-API操作MySQL数据库过程解析
Apr 23 Python
Python 爬取淘宝商品信息栏目的实现
Feb 06 Python
Python使用tkinter制作在线翻译软件
Feb 22 Python
Python 如何解决稀疏矩阵运算
May 26 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简介
2006/10/09 PHP
PHP使用Session遇到的一个Permission denied Notice解决办法
2014/07/30 PHP
PHP高级编程实例:编写守护进程
2014/09/02 PHP
Symfony2学习笔记之控制器用法详解
2016/03/17 PHP
PHP使用curl_multi_select解决curl_multi网页假死问题的方法
2018/08/15 PHP
PHP+Apache实现二级域名之间共享cookie的方法
2019/07/24 PHP
javascript IFrame 强制刷新代码
2009/07/23 Javascript
JS trim去空格的最佳实践
2011/10/30 Javascript
nodejs的require模块(文件模块/核心模块)及路径介绍
2013/01/14 NodeJs
深入解析Backbone.js框架的依赖库Underscore.js的作用
2016/05/07 Javascript
js中最容易被忽视的事件问题大总结
2016/05/15 Javascript
基于JQuery实现图片上传预览与删除操作
2016/05/24 Javascript
微信小程序 loading(加载中提示框)实例
2016/10/28 Javascript
jquery 判断是否支持Placeholder属性的方法
2017/02/07 Javascript
JavaScript选取(picking)和反选(rejecting)对象的属性方法
2017/08/16 Javascript
vue 不使用select实现下拉框功能(推荐)
2018/05/17 Javascript
JS实现调用本地摄像头功能示例
2018/05/18 Javascript
vue通过点击事件读取音频文件的方法
2018/05/30 Javascript
JS前后端实现身份证号验证代码解析
2020/07/23 Javascript
前端性能优化建议
2020/09/17 Javascript
简单介绍Python中用于求最小值的min()方法
2015/05/15 Python
用python实现k近邻算法的示例代码
2018/09/06 Python
详解Python二维数组与三维数组切片的方法
2019/07/18 Python
Django 响应数据response的返回源码详解
2019/08/06 Python
Python&&GDAL实现NDVI的计算方式
2020/01/09 Python
Vans奥地利官方网站:美国原创极限运动潮牌
2018/09/30 全球购物
Vision Direct比利时:在线订购隐形眼镜
2019/08/27 全球购物
Michael Kors澳大利亚官网:世界知名的奢侈饰品和成衣设计师
2020/02/13 全球购物
"引用"与指针的区别是什么
2016/09/07 面试题
公司领导推荐信
2013/11/12 职场文书
计算机专业学生求职信分享
2013/12/15 职场文书
《真想变成大大的荷叶》教学反思
2014/04/14 职场文书
师德师风个人整改措施
2014/10/27 职场文书
考研导师推荐信范文
2015/03/27 职场文书
英语投诉信范文
2015/07/03 职场文书
Python自动化工具之实现Excel转Markdown表格
2022/04/08 Python