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实现多线程下载文件的代码实例
Jun 01 Python
Centos5.x下升级python到python2.7版本教程
Feb 14 Python
Python 12306抢火车票脚本 Python京东抢手机脚本
Feb 06 Python
Python使用matplotlib绘图无法显示中文问题的解决方法
Mar 14 Python
实例讲解Python中浮点型的基本内容
Feb 11 Python
Python模拟百度自动输入搜索功能的实例
Feb 14 Python
基于python 微信小程序之获取已存在模板消息列表
Aug 05 Python
python网络爬虫 CrawlSpider使用详解
Sep 27 Python
Python实现银行账户资金交易管理系统
Jan 03 Python
pytorch 彩色图像转灰度图像实例
Jan 13 Python
简单了解Django项目应用创建过程
Jul 06 Python
详解Selenium 元素定位和WebDriver常用方法
Dec 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
简单易用的计数器(数据库)
2006/10/09 PHP
推荐Discuz!5的PHP代码高亮显示与实现可运行代码
2007/03/15 PHP
PHP在字符串中查找指定字符串并删除的代码
2008/10/02 PHP
PHP 7.1新特性的汇总介绍
2016/12/16 PHP
php实现文件与16进制相互转换的方法示例
2017/02/16 PHP
JavaScript 学习笔记(十五)
2010/01/28 Javascript
文本框根据输入内容自适应高度的代码
2011/10/24 Javascript
js正则表达式中test,exec,match方法的区别说明
2014/01/29 Javascript
详解JavaScript中的Unescape()和String() 函数
2015/11/09 Javascript
jQuery限制图片大小的方法
2016/05/25 Javascript
jQuery 翻页组件yunm.pager.js实现div局部刷新的思路
2016/08/11 Javascript
jquery+Jscex打造游戏力度条
2020/09/12 Javascript
JavaScript获取短信验证码(周期性)
2016/12/29 Javascript
详解nodejs爬虫程序解决gbk等中文编码问题
2017/04/06 NodeJs
详解用vue.js和laravel实现微信支付
2017/06/23 Javascript
swiper自定义分页器使用方法详解
2020/09/14 Javascript
JS判断用户用的哪个浏览器实例详解
2018/10/09 Javascript
Vue中keep-alive组件的深入理解
2020/08/23 Javascript
[06:23]2014DOTA2西雅图国际邀请赛 小组赛7月12日TOPPLAY
2014/07/12 DOTA
介绍Python的Django框架中的静态资源管理器django-pipeline
2015/04/25 Python
python引入不同文件夹下的自定义模块方法
2018/10/27 Python
python爬取网易云音乐评论
2018/11/16 Python
Python django框架输入汉字,数字,字符生成二维码实现详解
2019/09/24 Python
PyCharm更改字体和界面样式的方法步骤
2019/09/27 Python
在Pytorch中计算卷积方法的区别详解(conv2d的区别)
2020/01/03 Python
python数据库编程 ODBC方式实现通讯录
2020/03/27 Python
Pytest测试框架基本使用方法详解
2020/11/25 Python
详解如何使用Pytest进行自动化测试
2021/01/14 Python
H5 meta小结(前端必看篇)
2016/08/24 HTML / CSS
.net面试题
2015/12/22 面试题
幼儿园开学寄语
2014/04/03 职场文书
餐饮周年庆活动方案
2014/08/14 职场文书
春游踏青活动方案
2014/08/14 职场文书
Python移位密码、仿射变换解密实例代码
2021/06/27 Python
Python集合set()使用的方法详解
2022/03/18 Python
CentOS7和8下安装Maven3.8.4
2022/04/07 Servers