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 相关文章推荐
解决Django模板无法使用perms变量问题的方法
Sep 10 Python
python requests 库请求带有文件参数的接口实例
Jan 03 Python
Python 利用pydub库操作音频文件的方法
Jan 09 Python
python实现定时压缩指定文件夹发送邮件
Dec 22 Python
python版DDOS攻击脚本
Jun 12 Python
Python定时任务APScheduler的实例实例详解
Jul 22 Python
Django框架基础模板标签与filter使用方法详解
Jul 23 Python
Python编写带选项的命令行程序方法
Aug 13 Python
Mysql数据库反向生成Django里面的models指令方式
May 18 Python
django创建css文件夹的具体方法
Jul 31 Python
完美解决Pycharm中matplotlib画图中文乱码问题
Jan 11 Python
matplotlib部件之套索Lasso的使用
Feb 24 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
第十二节 类的自动加载 [12]
2006/10/09 PHP
vs中通过剪切板循环来循环粘贴不同内容
2011/04/30 PHP
浅谈apache和nginx的rewrite的区别
2013/02/22 PHP
PHP实现图片裁剪、添加水印效果代码
2014/10/01 PHP
完美解决JS中汉字显示乱码问题(已解决)
2006/12/27 Javascript
网站被黑的假象--ARP欺骗之页面中加入一段js
2007/05/16 Javascript
juqery 学习之五 文档处理 插入
2011/02/11 Javascript
jquery 之 $().hover(func1, funct2)使用方法
2012/06/14 Javascript
解析页面加载与js函数的执行 onload or ready
2013/12/12 Javascript
jQuery中$.each使用详解
2015/01/29 Javascript
详解Bootstrap插件
2016/04/25 Javascript
Bootstrap与KnockoutJs相结合实现分页效果实例详解
2016/05/03 Javascript
Extjs让combobox写起来简洁又漂亮
2017/01/05 Javascript
vue实现todolist单页面应用
2017/04/11 Javascript
xmlplus组件设计系列之网格(DataGrid)(10)
2017/05/05 Javascript
JS获取指定月份的天数两种实现方法
2018/06/22 Javascript
微信小程序绑定手机号获取验证码功能
2019/10/22 Javascript
JS array数组检测方式解析
2020/05/19 Javascript
[01:01:25]DOTA2上海特级锦标赛B组资格赛#2 Fnatic VS Spirit第三局
2016/02/27 DOTA
[49:21]完美世界DOTA2联赛循环赛 Ink Ice vs LBZS BO2第二场 11.05
2020/11/06 DOTA
python实现在目录中查找指定文件的方法
2014/11/11 Python
python爬虫爬取淘宝商品信息(selenum+phontomjs)
2018/02/24 Python
python使用代理ip访问网站的实例
2018/05/07 Python
Python socket实现的简单通信功能示例
2018/08/21 Python
钉钉群自定义机器人消息Python封装的实例
2019/02/20 Python
python实现Virginia无密钥解密
2019/03/20 Python
TensorBoard 计算图的查看方式
2020/02/15 Python
pytorch 多分类问题,计算百分比操作
2020/07/09 Python
PyCharm 2020.2下配置Anaconda环境的方法步骤
2020/09/23 Python
python 如何用urllib与服务端交互(发送和接收数据)
2021/03/04 Python
英国汽车座椅和婴儿车购物网站:Uber Kids
2017/04/19 全球购物
有趣的睡衣和礼物:LazyOne
2019/11/27 全球购物
MySQL约束超详解
2021/09/04 MySQL
JAVA API 实用类 String详解
2021/10/05 Java/Android
js 数组 fill() 填充方法
2021/11/02 Javascript
MySQL RC事务隔离的实现
2022/03/31 MySQL