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 相关文章推荐
用pywin32实现windows模拟鼠标及键盘动作
Apr 22 Python
Python实现微信公众平台自定义菜单实例
Mar 20 Python
Python将文本去空格并保存到txt文件中的实例
Jul 24 Python
python opencv 批量改变图片的尺寸大小的方法
Jun 28 Python
python自动化测试之DDT数据驱动的实现代码
Jul 23 Python
python基于pdfminer库提取pdf文字代码实例
Aug 15 Python
python自动生成model文件过程详解
Nov 02 Python
python使用 cx_Oracle 模块进行查询操作示例
Nov 28 Python
python scrapy重复执行实现代码详解
Dec 28 Python
PIL.Image.open和cv2.imread的比较与相互转换的方法
Jun 03 Python
python获取天气接口给指定微信好友发天气预报
Dec 28 Python
python小程序之飘落的银杏
Apr 17 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
一个取得文件扩展名的函数
2006/10/09 PHP
解析Ubuntu下crontab命令的用法
2013/06/24 PHP
PHP使用两个栈实现队列功能的方法
2018/01/15 PHP
TP5框架安全机制实例分析
2020/04/05 PHP
jquery select下拉框操作的一些说明
2010/04/02 Javascript
window.onload和$(function(){})的区别介绍
2013/10/30 Javascript
Javascript实现简单二级下拉菜单实例
2014/06/15 Javascript
JavaScript获取伪元素(Pseudo-Element)属性的方法技巧
2015/03/13 Javascript
基于jquery fly插件实现加入购物车抛物线动画效果
2016/04/05 Javascript
如何实现星星评价(jquery.raty.js插件)
2016/12/21 Javascript
基于Marquee.js插件实现的跑马灯效果示例
2017/01/25 Javascript
vue+element的表格实现批量删除功能示例代码
2018/08/17 Javascript
bootstrap table.js动态填充单元格数据的多种方法
2019/07/18 Javascript
Zookeeper接口kazoo实例解析
2018/01/22 Python
Python断言assert的用法代码解析
2018/02/03 Python
pycharm运行出现ImportError:No module named的解决方法
2018/10/13 Python
python使用ddt过程中遇到的问题及解决方案【推荐】
2018/10/29 Python
Python3+Appium实现多台移动设备操作的方法
2019/07/05 Python
python实现连连看辅助(图像识别)
2020/03/25 Python
Django Aggregation聚合使用方法解析
2019/08/01 Python
python requests模拟登陆github的实现方法
2019/12/26 Python
python 一维二维插值实例
2020/04/22 Python
Antler英国官网:购买安特丽行李箱、拉杆箱
2019/08/25 全球购物
材料化学应届生求职信
2013/10/09 职场文书
计算机求职信
2013/12/01 职场文书
毕业生求职自荐信怎么写
2014/01/08 职场文书
考试不及格的检讨书
2014/01/22 职场文书
大学生全国两会报告感想
2014/03/17 职场文书
优秀公益广告词大全
2014/03/19 职场文书
小学家长评语大全
2014/04/16 职场文书
会计师事务所实习证明
2014/11/16 职场文书
2014年医院党建工作总结
2014/12/20 职场文书
2016党员党章学习心得体会
2016/01/14 职场文书
推荐六本经典文学奖书籍:此生必读
2019/08/22 职场文书
Python基础之元编程知识总结
2021/05/23 Python
python中 Flask Web 表单的使用方法
2022/05/20 Python