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编程中对Monkey Patch猴子补丁开发方式的运用
May 27 Python
Python实现读取文件最后n行的方法
Feb 23 Python
详解python读取和输出到txt
Mar 29 Python
详解Python 解压缩文件
Apr 09 Python
python启动应用程序和终止应用程序的方法
Jun 28 Python
python内存管理机制原理详解
Aug 12 Python
Python numpy数组转置与轴变换
Nov 15 Python
Pytorch中实现只导入部分模型参数的方式
Jan 02 Python
Python模块/包/库安装的六种方法及区别
Feb 24 Python
Python 3.8 新功能来一波(大部分人都不知道)
Mar 11 Python
matplotlib 对坐标的控制,加图例注释的操作
Apr 17 Python
Python中猜拳游戏与猜筛子游戏的实现方法
Sep 04 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 将bmp图片转为jpg等其他任意格式的图片
2009/06/21 PHP
在PHP中检查PHP文件是否有语法错误的方法
2009/12/23 PHP
PHP编程中的常见漏洞和代码实例
2014/08/06 PHP
CI框架学习笔记(二) -入口文件index.php
2014/10/27 PHP
PHP也能干大事之PHP中的编码解码详解
2015/04/20 PHP
PHP解压tar.gz格式文件的方法
2016/02/14 PHP
用Laravel Sms实现laravel短信验证码的发送的实现
2018/11/29 PHP
offsetParent 算法分析
2010/04/05 Javascript
下载网站打开页面后间隔多少时间才显示下载链接地址的代码
2010/04/25 Javascript
JS获取浏览器版本及名称实现函数
2013/04/02 Javascript
jquery使用jquery.zclip插件复制对象的实例教程
2013/12/04 Javascript
html文本框提示效果的示例代码
2014/06/28 Javascript
jQuery旋转木马式幻灯片轮播特效
2015/12/04 Javascript
js实现的简单图片浮动效果完整实例
2016/05/10 Javascript
bootstrap datetimepicker日期插件使用方法
2017/01/13 Javascript
Js中使用正则表达式验证输入是否有特殊字符
2018/09/07 Javascript
layui 实现表格某一列显示图标
2019/09/19 Javascript
Nuxt pages下不同的页面对应layout下的页面布局操作
2020/11/05 Javascript
[46:27]DOTA2上海特级锦标赛主赛事日 - 1 胜者组第一轮#2LGD VS MVP.Phx第一局
2016/03/02 DOTA
Django中使用Whoosh进行全文检索的方法
2019/03/31 Python
PyQt5基本控件使用详解:单选按钮、复选框、下拉框
2019/08/05 Python
基于python进行抽样分布描述及实践详解
2019/09/02 Python
Python 余弦相似度与皮尔逊相关系数 计算实例
2019/12/23 Python
tensorflow 模型权重导出实例
2020/01/24 Python
基于梯度爆炸的解决方法:clip gradient
2020/02/04 Python
Python基于正则表达式实现计算器功能
2020/07/13 Python
利用Python pandas对Excel进行合并的方法示例
2020/11/04 Python
canvas绘制图片drawImage使用方法
2020/09/15 HTML / CSS
马来西亚在线时尚女装商店:KEI MAG
2017/09/28 全球购物
英国现代市场:ARKET
2019/04/10 全球购物
毕业生求职推荐信
2013/11/04 职场文书
2014年清明节寄语
2014/04/03 职场文书
节能环保演讲稿
2014/08/28 职场文书
党员教师四风问题对照检查材料
2014/09/26 职场文书
Feign调用全局异常处理解决方案
2021/06/24 Java/Android
Python Pandas模块实现数据的统计分析的方法
2021/06/24 Python