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编写基于DHT协议的BT资源爬虫
Mar 19 Python
关于Python数据结构中字典的心得
Dec 04 Python
利用Python将每日一句定时推送至微信的实现方法
Aug 13 Python
python 3.7.0 安装配置方法图文教程
Aug 27 Python
python 列表递归求和、计数、求最大元素的实例
Nov 28 Python
Python常用的json标准库
Feb 19 Python
使用Python控制摄像头拍照并发邮件
Apr 23 Python
python实现文本进度条 程序进度条 加载进度条 单行刷新功能
Jul 03 Python
Python+selenium点击网页上指定坐标的实例
Jul 05 Python
Python 日期的转换及计算的具体使用详解
Jan 16 Python
tensorflow 实现打印pb模型的所有节点
Jan 23 Python
Python同时处理多个异常的方法
Jul 28 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函数
2008/10/03 PHP
无JS,完全php面向过程数据分页实现代码
2012/08/27 PHP
php获取当前时间的毫秒数的方法
2014/01/26 PHP
PHPAnalysis中文分词类详解
2014/06/13 PHP
PHP正则表达式 /i, /is, /s, /isU等介绍
2014/10/23 PHP
Laravel中基于Artisan View扩展包创建及删除应用视图文件的方法
2016/10/08 PHP
PHP HTTP 认证实例详解
2016/11/03 PHP
php下载远程大文件(获取远程文件大小)的实例
2017/06/17 PHP
Firefox 无法获取cssRules 的解决办法
2006/10/11 Javascript
jQuery实现随意改变div任意属性的名称和值(部分原生js实现)
2013/05/28 Javascript
使用js判断当前时区TimeZone是否是夏令时
2014/02/23 Javascript
JavaScript的原型继承详解
2015/02/15 Javascript
推荐10 个很棒的 jQuery 特效代码
2015/10/04 Javascript
jQuery添加删除DOM元素方法详解
2016/01/18 Javascript
jQuery获取访问者IP地址的方法(基于新浪API与QQ查询接口)
2016/05/25 Javascript
轻松掌握JavaScript代理模式
2016/08/26 Javascript
vue.js单页面应用实例的简单实现
2017/04/10 Javascript
详解vue中router-link标签所必备了解的属性
2019/04/15 Javascript
Python生成随机密码
2015/03/10 Python
Python本地与全局命名空间用法实例
2015/06/16 Python
python的pytest框架之命令行参数详解(上)
2019/06/27 Python
python 有效的括号的实现代码示例
2019/11/11 Python
Python 解析xml文件的示例
2020/09/29 Python
简单html5代码获取地理位置
2014/03/31 HTML / CSS
逼真的HTML5树叶飘落动画
2016/03/01 HTML / CSS
您的健身减肥和健康饮食专家:vitafy
2017/06/06 全球购物
Smallable英国家庭概念店:设计师童装及家居装饰
2017/07/05 全球购物
土耳其风格手工珠宝:Ottoman Hands
2019/07/26 全球购物
法院信息化建设方案
2014/05/21 职场文书
计算机专业自荐信
2014/05/24 职场文书
刑事辩护授权委托书范本
2014/10/17 职场文书
2015年先进个人自荐书
2015/03/24 职场文书
会议通知范文
2015/04/15 职场文书
2016年“我们的节日·清明节”活动总结
2016/04/01 职场文书
tensorboard 可视化之localhost:6006不显示的解决方案
2021/05/22 Python
学习nginx基础知识
2021/09/04 Servers