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 pickle 和 shelve模块的用法
Sep 16 Python
Python实现将绝对URL替换成相对URL的方法
Jun 28 Python
windows下python安装paramiko模块和pycrypto模块(简单三步)
Jul 06 Python
浅谈Python中的bs4基础
Oct 21 Python
详解用python写网络爬虫-爬取新浪微博评论
May 10 Python
深入学习python多线程与GIL
Aug 26 Python
python多线程同步之文件读写控制
Feb 25 Python
利用python Selenium实现自动登陆京东签到领金币功能
Oct 31 Python
Python之关于类变量的两种赋值区别详解
Mar 12 Python
Python爬虫HTPP请求方法有哪些
Jun 03 Python
pytorch 实现多个Dataloader同时训练
May 29 Python
Python 第三方库 openpyxl 的安装过程
Dec 24 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 抽象类的简单应用
2011/09/06 PHP
JavaScript 面向对象编程(2) 定义类
2010/05/18 Javascript
JS关键字变色实现思路及代码
2013/02/21 Javascript
JQuery实现的购物车功能(可以减少或者添加商品并自动计算价格)
2015/01/13 Javascript
jquery实现简单的无缝滚动
2015/04/15 Javascript
JavaScript实现把数字转换成中文
2015/06/29 Javascript
JavaScript事件类型中焦点、鼠标和滚轮事件详解
2016/01/25 Javascript
jQuery实现图片局部放大镜效果
2016/03/17 Javascript
JS中frameset框架弹出层实例代码
2016/04/01 Javascript
全面介绍javascript实用技巧及单竖杠
2016/07/18 Javascript
JQuery遍历元素的父辈和祖先的方法
2016/09/18 Javascript
CSS3 动画卡顿性能优化的完美解决方案
2018/09/20 Javascript
Vue + Element-ui的下拉框el-select获取额外参数详解
2020/08/14 Javascript
解决await在forEach中不起作用的问题
2021/02/25 Javascript
[02:12]2015国际邀请赛 SHOWOPEN
2015/08/05 DOTA
[05:04]DOTA2上海特级锦标赛主赛事第二日TOP10
2016/03/04 DOTA
[50:21]Liquid vs Winstrike 2018国际邀请赛小组赛BO2 第二场
2018/08/19 DOTA
用python代码做configure文件
2014/07/20 Python
Python实现 多进程导入CSV数据到 MySQL
2017/02/26 Python
python获取当前文件路径以及父文件路径的方法
2019/07/10 Python
python批量图片处理简单示例
2019/08/06 Python
python求加权平均值的实例(附纯python写法)
2019/08/22 Python
Python 实现加密过的PDF文件转WORD格式
2020/02/04 Python
pyqt5 QlistView列表显示的实现示例
2020/03/24 Python
微信小程序“圣诞帽”的实现思路详解
2017/12/28 HTML / CSS
FC-Moto美国:欧洲最大的摩托车服装和头盔商店之一
2019/08/24 全球购物
Why we need EJB
2016/10/20 面试题
采购员岗位职责
2013/11/15 职场文书
开学季活动策划方案
2014/02/28 职场文书
留守儿童工作方案
2014/06/02 职场文书
相亲活动方案
2014/08/26 职场文书
药店收银员岗位职责
2015/04/07 职场文书
获奖感言一句话
2015/07/31 职场文书
Python使用sql语句对mysql数据库多条件模糊查询的思路详解
2021/04/12 Python
Redis性能监控的实现
2021/07/09 Redis
WINDOWS 64位 下安装配置mysql8.0.25最详细的教程
2022/03/22 MySQL