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')

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

  1. 探讨:crond 引发大量sendmail进程的解决办法

    某服务器账号comm无法登录,说是资源消耗完毕.于是用另一个账号登陆到服务器,检查common账号到底启动了哪些dd引起资源耗尽:ps -u common发现有个 sendmail的启动特别多例如:c ...

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

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

  3. oracle执行update语句时卡住问题分析及解决办法

    转载:http://www.jb51.net/article/125754.htm 这篇文章主要介绍了oracle执行update语句时卡住问题分析及解决办法,涉及记录锁等相关知识,具有一定参考价值, ...

  4. MySQL 执行SQL脚本 报ERROR 1231 (42000)的解决办法【转】

    今天在source mysqldump 备份文件时,发现导入的过程中报如下的错误: ERROR 1231 (42000): Variable 'time_zone' can't be set to t ...

  5. jenkins 执行可执行jar包测试中,请求乱码解决办法

    自动化脚本在eclipse中执行,没有问题.jenkins构建打包自动化脚本,在执行脚本时,遇到了脚本中发送的请求的参数为乱码,实现了如下一些解决办法: 1.设置操作系统环境JAVA_TOOL_OPT ...

  6. oracle中执行execute的时候报异常ORA-01031的解决办法

    在做实验的时候,编写关于"在存储过程中使用动态sql,建立一个统计表,并把统计结果,插入这个表中"的PL/sql语句在执行时出现权限不足的问题. 上网查询很多,看到了下面这篇博文( ...

  7. H5在ios弹窗状态下调起输入法后关闭输入法页面元素错位解决办法

    最近开发移动端,有个需求:点击退款弹出文本框和发送短信按钮,输入手机号码和验证码确定退款. 发现安卓手机没毛病,但是在ios手机上点击文本框调起输入法,此时点击完成或者关闭输入法就无法正常操作了,肉眼 ...

  8. python selenium 执行完毕关闭chromedriver进程

    #OS是我们操作dos系统时需要引入的库 import os #杀死这个chromedriver进程,因为每次启动都会打开,所以需要kill,这里用的chrome浏览器,打开方式时chromedriv ...

  9. 执行sudo命令时command not found的解决办法

    问题的原因: 在编译sudo包的时候默认开启了- -with-secure-path选项. 方法1: sudo vim /etc/sudoers,并在文件内增加这么一行:Defaults secure ...

随机推荐

  1. 在ssm框架测试中解决javax.net.ssl.SSLHandshakeException: java.security.cert.CertificateException

    在单元测试发现causeBy:javax.net.ssl.SSLHandshakeException: java.security.cert.CertificateException 经发现是db.p ...

  2. DDD划分领域、子域,核心域,支撑域的目的

    名词解释 在DDD兴起的原因以及与微服务的关系中曾举了一个研究桃树的例子,如果要研究桃树,将桃树根据器官分成根.茎.叶.花.果实.种子,这每一种器官都可以认为是一个研究领域,而领域又有更加具体的细分, ...

  3. Ascend Pytorch算子功能验证

    Ascend Pytorch算子功能验证 编写测试用例 以add算子为例,测试脚本文件命名为:add_testcase.py.以下示例仅为一个简单的用例实现,具体算子的实现,需要根据算子定义进行完整的 ...

  4. MindSpore应用目标

    MindSpore应用目标 以下将展示MindSpore近一年的高阶计划,会根据用户的反馈诉求,持续调整计划的优先级. 总体而言,会努力在以下几个方面不断改进. 1. 提供更多的预置模型支持. 2. ...

  5. 如何在小型pcb的移动设备上获得更好的无线性能

    如何在小型pcb的移动设备上获得更好的无线性能 How to get better wireless performance for mobile devices with small PCBs 小型 ...

  6. 密码学系列之:feistel cipher

    密码学系列之:feistel cipher 简介 feistel cipher也叫做Luby–Rackoff分组密码,是用来构建分组加密算法的对称结构.它是由德籍密码学家Horst Feistel在I ...

  7. WordPress安装篇(1):使用PHPStudy安装WordPress

    我是"小白",既不会编程也不懂CSS能自己搭建网站吗?可以的!只要你会用鼠标,懂打字就能搭建出属于你自己的网站.要怎么样才能做到昵?让我们一起来看看如何实现的吧.在Windows环 ...

  8. 【NX二次开发】常用的标准对话框

    1.uc1601 单按钮模态对话框 1 //来自"王牌飞行员_里海"的测试源码(qq群753801561) 2 extern DllExport void ufusr(char * ...

  9. apache jmeter下载与安装

    JMeter是Apache软件基金会的产品,用于对静态的和动态的资源性能进行测试.jmeter可以运行在多个平台上,如Windows和Linux,本文讲的是在Windows安装jmeter. 工具/原 ...

  10. SpringBoot2配置文件application.yaml

    源码基于SpringBoot 2.4.4 1.认识配置文件 1.1 配置文件的加载 创建SpringBoot项目的时候,会自动创建一个application.properties文件,该文件是Spri ...