selenium操作chrome浏览器需要有ChromeDriver驱动来协助。webdriver中关浏览器关闭有两个方法,一个叫quit,一个叫close。

1   /**
2    * Close the current window, quitting the browser if it's the last window currently open.
3    */
4   void close();
5
6   /**
7    * Quits this driver, closing every associated window.
8    */
9   void quit();

通过查看以上官方声明文档,可以看出close方法是关闭当前窗口,这个当前如何理解?就是driver实例操作的页面,叫当前。如果当前窗口只有一个tab,那么这个close方法就相当于关闭了浏览器。quit方法就是直接退出并关闭所有关联的tab窗口。所以,close方法一般关闭一个tab,quit方法才是我们认为的完全关闭浏览器方法。为了证明这个,我们用一个例子去演示:

 1 package lessons;
 2
 3 import org.openqa.selenium.By;
 4 import org.openqa.selenium.WebDriver;
 5 import org.openqa.selenium.chrome.ChromeDriver;
 6
 7 public class FindElement_LinkText {
 8
 9     public static void main(String[] args) throws Exception {
10
11         System.setProperty("webdriver.chrome.driver", ".\\Tools\\chromedriver.exe");
12
13         WebDriver driver = new ChromeDriver();
14         driver.manage().window().maximize();
15
16         driver.get("https://www.baidu.com");
17
18         driver.close();
19         //driver.quit();
20     }
21
22 }

通过切换注销最后两行代码,分别运行,观察这两种方法的实际效果。当使用close方法的时候,因为只有百度首页这个tab,所以会关闭浏览器,但是通过查看任务管理器发现,ChromeDriver进程仍存在内存中。如果使用quit方法,整个浏览器都直接关闭,ChromeDriver进程也会被结束。

ChromeDriver是轻量级的服务,在单任务或不需要频繁启动浏览器的情况下,使用driver.quit()关闭浏览器,可以正常结束ChromeDriver进程。若在一个比较大的 测试套件中频繁的启动关闭,会增加一个比较明显的延时导致浏览器进程不被关闭的情况发生,为了避免这一状况我们可以通过ChromeDriverService来控制ChromeDriver进程的生死,达到用完就关闭的效果避免进程占用情况出现(Running the  server in a child process)。具体实现如下:

1 ChromeDriverService service = new ChromeDriverService.Builder() .usingChromeDriverExecutable(new File("E:\\Selenium WebDriver\\chromedriver_win_23.0.1240.0\\chromedriver.exe")).usingAnyFreePort().build();
2 service.start();
3 driver = new ChromeDriver();
4 driver.get("http://www.baidu.com");
5 driver.quit();
6 // 关闭 ChromeDriver 接口
7 service.stop();

以上讨论的均是java版的实现,对于python来说是使用service库来实现控制chromedriver的开启和关闭。

1 from selenium.webdriver.chrome.service import Service

创建的时候需要把chromedriver.exe的位置写在Service的XXX部分,需要调用他的命令行方法,不然报错,然后启动就可以了。

1 c_service = Service('xxx')
2 c_service.command_line_args()
3 c_service.start()
4 driver = webdriver.Chrome()
5 driver.get("http://www.baidu.com")

关闭的时候用quit而不是采用close,close只会关闭当前页面,quit会退出驱动并且关闭所关联的所有窗口,最后执行完以后就关闭。

driver.quit()
c_service.stop()

嫌麻烦也可以直接使用python的os模块执行下面两句话结束进程

1 os.system('taskkill /im chromedriver.exe /F')
2 os.system('taskkill /im chrome.exe /F')

转载于:https://www.cnblogs.com/muchengnanfeng/p/9553186.html

Selenium执行完毕未关闭chromedriver/geckodriver进程的解决办法(java版+python版)相关推荐

  1. tomcat关闭后线程依然运行解决办法

    tomcat关闭后线程依然运行解决办法,设置线程为守护线程 守护线程与非守护线程 最近在看多线程的Timer章节,发现运用到了守护线程,感觉Java的基础知识还是需要补充. Java分为两种线程:用户 ...

  2. mysql update语句卡死_oracle执行update语句时卡住问题分析及解决办法

    问题 开发的时候debug到一条update的sql语句时程序就不动了,然后我就在plsql上试了一下,发现plsql一直在显示正在执行,等了好久也不出结果.但是奇怪的是执行其他的select语句却是 ...

  3. Linux---僵尸进程的解决办法

    僵尸进程 子进程退出后,资源没有释放,处于僵死状态. 产生原因: 子进程优先于父进程退出,父进程正在执行其他操作,没有关注子进程退出,这时候操作系统为了保护子进程退出的原因,不会释放子进程中的资源,子 ...

  4. win7计算机未连接网络,Win7无线网络显示未连接但可以上网的解决办法

    最近有网友"默默"遇到一个很奇怪的问题,使用的是Win7笔记本无线上网,但有时候会出现很奇怪的现象,命名桌面右下角的无线网络图片显示为未连接,但依然可以正常的无线上网,不知道怎么回 ...

  5. 安装Mysql时出现服务未启动(start service)解决办法

    安装Mysql时出现服务未启动(start service)解决办法 1.去控制面板卸载 2.删除Mysql卸载残留文件 3.管理员删除mysql服务 4.重新安装(注意事项!!!) 1.去控制面板卸 ...

  6. 记录腾讯云服务器xmrig占满进程的解决办法

    记录腾讯云服务器xmrig占满进程的解决办法 前言 解决办法 结束 前言 前两天刚购买了一台腾讯云服务器,安装了一个宝塔面板后就搁置了几天,然而昨天登录面板的时候,发现监控状态全都爆红,CPU更是一直 ...

  7. 异常“只能在执行Render()的过程中调用RegisterForEventValidation”的解决办法(转)...

    当出现下面的异常的时候: 只能在执行Render()的过程中调用RegisterForEventValidation 当出现的异常的提示: 异常详细信息: System.InvalidOperatio ...

  8. surface pen未接触屏幕就有反应 解决办法

    surface pen未接触屏幕就有反应 解决办法 前几天我的surface pen出现了如题的问题,尝试了网上已有的几个方法(如:卸载驱动:拔掉pen的电池,重新连接:拔掉笔尖重新安装:拔掉电池,轻 ...

  9. 在Linux下执行一个文件时候提示“权限不够”的解决办法

    在Linux下执行一个文件时候提示"权限不够"的解决办法如下 转到那个文件的目录下面执行下面命令: chmod 777 filename

最新文章

  1. mysql count 条件_我以为我对MySql很了解,直到我面试了字节跳动
  2. cocos2d-x初探学习笔记(17)--瓦片地图集
  3. IDEA怎么从数据库表自动生成映射Model
  4. es5如何实现promise_彻底理解Promise对象——用es5语法实现一个自己的Promise(上篇)...
  5. 路由器架设虚拟服务器让外网访问到本地网站
  6. 如何ping端口_干货 | 如何正确处理常见的8大网络故障
  7. Java NIO框架Netty教程(四) – ServerBootStrap启动流程源码分析
  8. ubuntu18.04 安装惠普打印机驱动和GUI界面
  9. windows server 2012 安装 VC14(VC2015) 安装失败解决方案
  10. 盈利能力分析之-毛利率、销售净利率、投资回报率、权益回报率、资产回报率...
  11. ping结果中TTL是什么意思
  12. Bmob后端云实现无后端开发APP
  13. 行人重识别 论文学习
  14. 个人计算机操作系统支持多用户多任务,windows10是一个多用户多任务操作系统吗...
  15. decimal比较大小
  16. 软件测试 | 测试开发 | Sikuli 基于图形识别的自动化测试技术
  17. python批量裁剪图像
  18. PicPick 5.1.3 中文版,一个全功能的屏幕截图工具,图像编辑器,颜色选择器
  19. 进入安全模式后重新启动计算机,进入Win7安全模式方法一:开机按F8键进入 我们在重启或者电脑开机的时候...
  20. 看未来的企业是如何解决潜规则的

热门文章

  1. 英语流利说l4u1p2_L4-U1-P2-1Listening:ATriptoYosemitePark1 英语流利说 懂你英语
  2. 我心中的程序设计新时代
  3. G - 阿牛的EOF牛肉串
  4. 【玩转yolov5】请看代码之augment_hsv
  5. 品管七大手法-5控制图(转载)
  6. 2022-2028全球核反应堆安全壳市场现状及未来发展趋势
  7. Error:Execution failed for task ':app:validateSigningDevDebug'. Keystore file E:\workspace\trunk\H
  8. python画趋势图_python 绘制走势图
  9. 东方博宜OJ——1.整数运算题解
  10. 华为方法:如何发展教练|内线?