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计算最大优先级队列实例
Dec 18 Python
将字典转换为DataFrame并进行频次统计的方法
Apr 08 Python
python版本的仿windows计划任务工具
Apr 30 Python
python实现整数的二进制循环移位
Mar 08 Python
基于python实现自动化办公学习笔记(CSV、word、Excel、PPT)
Aug 06 Python
python对Excel按条件进行内容补充(推荐)
Nov 24 Python
python3实现elasticsearch批量更新数据
Dec 03 Python
python字符串替换re.sub()实例解析
Feb 09 Python
python+opencv实现移动侦测(帧差法)
Mar 20 Python
浅谈keras中的Merge层(实现层的相加、相减、相乘实例)
May 23 Python
什么是Python中的匿名函数
Jun 02 Python
使用Python开发贪吃蛇游戏 SnakeGame
Apr 30 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中数据的批量导入(csv文件)
2006/10/09 PHP
PHP 异步执行方法,模拟多线程的应用分析
2013/06/03 PHP
thinkPHP3.2简单实现文件上传的方法
2016/05/16 PHP
在laravel中实现ORM模型使用第二个数据库设置
2019/10/24 PHP
js文件Cookie存取值示例代码
2014/02/20 Javascript
使用JS取得焦点(focus)元素代码
2014/03/22 Javascript
jquery+CSS3模拟Path2.0动画菜单效果代码
2015/08/31 Javascript
Bootstrap零基础学习第一课之模板
2016/07/18 Javascript
JS基于面向对象实现的拖拽功能示例
2016/12/20 Javascript
Vue自定义指令拖拽功能示例
2017/02/17 Javascript
JavaScript for循环 if判断语句(学习笔记)
2017/10/11 Javascript
基于jquery实现九宫格拼图小游戏
2018/11/30 jQuery
微信小程序云开发之使用云数据库
2019/05/17 Javascript
vue-socket.io接收不到数据问题的解决方法
2020/05/13 Javascript
[00:56]跨越时空加入战场 全新祈求者身心“失落奇艺侍祭”展示
2019/07/20 DOTA
[00:08]DOTA2勇士令状等级奖励“天外飞星”
2019/05/24 DOTA
Python XML RPC服务器端和客户端实例
2014/11/22 Python
Python类的定义、继承及类对象使用方法简明教程
2015/05/08 Python
python 删除指定时间间隔之前的文件实例
2018/04/24 Python
利用Python如何批量更新服务器文件
2018/07/29 Python
Python中的Socket 与 ScoketServer 通信及遇到问题解决方法
2019/04/01 Python
Python3内置模块pprint让打印比print更美观详解
2019/06/02 Python
Python爬虫使用代理IP的实现
2019/10/27 Python
python中什么是面向对象
2020/06/11 Python
Tensorflow与Keras自适应使用显存方式
2020/06/22 Python
Python操作dict时避免出现KeyError的几种解决方法
2020/09/20 Python
英国人最爱的饰品网站:Accessorize
2016/08/22 全球购物
加热夹克:RAVEAN
2018/10/19 全球购物
实习单位推荐信范文
2013/11/27 职场文书
群众路线党员个人剖析材料
2014/10/08 职场文书
党员个人查摆剖析材料
2014/10/16 职场文书
个人年终总结范文
2015/03/09 职场文书
2016年三八节红领巾广播稿
2015/12/17 职场文书
《自己的花是让别人看的》教学反思
2016/02/19 职场文书
Python 数据科学 Matplotlib图库详解
2021/07/07 Python
MySQL非空约束(not null)案例讲解
2021/08/23 MySQL