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的字典和列表的使用中一些需要注意的地方
Apr 24 Python
python处理图片之PIL模块简单使用方法
May 11 Python
将Django框架和遗留的Web应用集成的方法
Jul 24 Python
python使用logging模块发送邮件代码示例
Jan 18 Python
详解Python函数式编程—高阶函数
Mar 29 Python
Python实现通过解析域名获取ip地址的方法分析
May 17 Python
python检测服务器端口代码实例
Aug 31 Python
python Qt5实现窗体跟踪鼠标移动
Dec 13 Python
Python 中的pygame安装与配置教程详解
Feb 10 Python
python 字典item与iteritems的区别详解
Apr 25 Python
python删除指定列或多列单个或多个内容实例
Jun 28 Python
用python实现前向分词最大匹配算法的示例代码
Aug 06 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之第八天
2006/10/09 PHP
php实现通过cookie换肤的方法
2015/07/13 PHP
ThinkPHP简单使用memcache缓存的方法
2016/11/15 PHP
php记录搜索引擎爬行记录的实现代码
2018/03/02 PHP
php多进程中的阻塞与非阻塞操作实例分析
2020/03/04 PHP
一个选择最快的服务器转向代码
2009/04/27 Javascript
JQuery与Ajax常用代码实现对比
2009/10/03 Javascript
JavaScript对内存分配及管理机制详细解析
2013/11/11 Javascript
通过JQuery将DIV的滚动条滚动到指定的位置方便自动定位
2014/05/05 Javascript
javascript批量修改文件编码格式的方法
2015/01/27 Javascript
JavaScript 动态加载脚本和样式的方法
2015/04/13 Javascript
JavaScript中循环遍历Array与Map的方法小结
2016/03/12 Javascript
jquery实现表格中点击相应行变色功能效果【实例代码】
2016/05/09 Javascript
Bootstrap CSS组件之按钮下拉菜单
2016/12/17 Javascript
详解Puppeteer前端自动化测试实践
2019/02/21 Javascript
vue elementUI table表格数据 滚动懒加载的实现方法
2019/04/04 Javascript
微信小程序移动拖拽视图-movable-view实例详解
2019/08/17 Javascript
Angular8路由守卫原理和使用方法
2019/08/29 Javascript
[02:48]DOTA2英雄基础教程 拉席克
2013/12/12 DOTA
python对象及面向对象技术详解
2016/07/19 Python
python中 * 的用法详解
2019/07/10 Python
python实现大文本文件分割
2019/07/22 Python
Python IDE Pycharm中的快捷键列表用法
2019/08/08 Python
OpenCV模板匹配matchTemplate的实现
2019/10/18 Python
Python可变参数会自动填充前面的默认同名参数实例
2019/11/18 Python
解决Python3下map函数的显示问题
2019/12/04 Python
Python多线程获取返回值代码实例
2020/02/17 Python
世界领先的豪华床上用品供应商之一:Bedeck Home
2019/03/18 全球购物
德国足球商店:OUTFITTER
2019/05/06 全球购物
优质飞蝇钓和渔具:RiverBum
2020/05/10 全球购物
什么是GWT的Entry Point
2013/08/16 面试题
优秀的自荐信要注意哪些
2014/01/03 职场文书
质检员岗位职责范本
2015/04/07 职场文书
深入浅析Redis 集群伸缩原理
2021/05/15 Redis
JavaScript offset实现鼠标坐标获取和窗口内模块拖动
2021/05/30 Javascript
Django REST framework 限流功能的使用
2021/06/24 Python