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 相关文章推荐
在Docker上部署Python的Flask框架的教程
Apr 08 Python
Python实现查找系统盘中需要找的字符
Jul 14 Python
python flask实现分页效果
Jun 27 Python
浅谈Python采集网页时正则表达式匹配换行符的问题
Dec 20 Python
python生成随机红包的实例写法
Sep 02 Python
python破解bilibili滑动验证码登录功能
Sep 11 Python
Python通过VGG16模型实现图像风格转换操作详解
Jan 16 Python
python GUI库图形界面开发之PyQt5控件数据拖曳Drag与Drop详细使用方法与实例
Feb 27 Python
Django添加bootstrap框架时无法加载静态文件的解决方式
Mar 27 Python
python实现简单的井字棋
May 26 Python
关于Python中进度条的六个实用技巧分享
Apr 05 Python
分享python函数常见关键字
Apr 26 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 pcntl_fork和pcntl_fork 的用法
2009/04/13 PHP
PHP 批量删除数据的方法分析
2009/10/30 PHP
php笔记之:数据类型与常量的使用分析
2013/05/14 PHP
php实现mysql数据库操作类分享
2014/02/14 PHP
Linux系统中设置多版本PHP共存配合Nginx服务器使用
2015/12/21 PHP
PHP+AJAX 投票器功能
2017/11/11 PHP
添加到收藏夹代码(兼容几乎所有的浏览器)
2007/01/09 Javascript
一些常用的JS功能函数代码
2009/06/23 Javascript
异步动态加载js与css文件的js代码
2013/09/15 Javascript
JQuery的Ajax请求实现局部刷新的简单实例
2014/02/11 Javascript
JavaScript动态改变表格单元格内容的方法
2015/03/30 Javascript
js倒计时简单实现方法
2015/12/17 Javascript
基于jQuery实现页面搜索功能
2020/03/26 Javascript
jquery基本选择器匹配多个元素的实现方法
2016/09/05 Javascript
javascript常用经典算法详解
2017/01/11 Javascript
在React中如何优雅的处理事件响应详解
2017/07/24 Javascript
基于input动态模糊查询的实现方法
2017/12/12 Javascript
javascriptvoid(0)含义以及与"#"的区别讲解
2019/01/19 Javascript
Vue中使用better-scroll实现轮播图组件
2020/03/07 Javascript
[01:11:21]DOTA2-DPC中国联赛 正赛 VG vs Elephant BO3 第一场 3月6日
2021/03/11 DOTA
python正则表达式re模块详细介绍
2014/05/29 Python
python实现的用于搜索文件并进行内容替换的类实例
2015/06/28 Python
动态规划之矩阵连乘问题Python实现方法
2017/11/27 Python
python tkinter窗口最大化的实现
2019/07/15 Python
Python各种扩展名区别点整理
2020/02/27 Python
python+pygame实现坦克大战小游戏的示例代码(可以自定义子弹速度)
2020/08/11 Python
攀岩、滑雪、徒步旅行装备:Black Diamond Equipment
2019/08/16 全球购物
奥地利时尚、美容、玩具和家居之家:Kastner & Öhler
2020/04/26 全球购物
追悼会主持词
2014/03/20 职场文书
国旗下演讲稿
2014/05/08 职场文书
保护环境建议书400字
2014/05/13 职场文书
雷锋之歌观后感
2015/06/10 职场文书
初中毕业生感言
2015/07/31 职场文书
Python基础之进程详解
2021/05/21 Python
Django操作cookie的实现
2021/05/26 Python
浅谈如何提高PHP代码的质量
2021/05/28 PHP