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

最新文章

  1. [转] eclipse SVN中文件修改后图标不变黑星解决
  2. js动画实现侧边栏分享
  3. PhoneGap与Jquery Mobile结合开发android应用配置
  4. Debug过程中的mock (及display窗口的使用)
  5. windows 查看某个端口号被占用情况
  6. BP神经网络基本原理
  7. js中的屏蔽
  8. NewTonJson.Net的使用
  9. Echarts笔记——使用AJAX填充数据
  10. Arch Linux安装记录
  11. Luogu P3740 [HAOI2014]贴海报_线段树
  12. idapython import 'site' failed
  13. Servlet--创建和配置Servlet
  14. transform的兼容性写法浏览器 和 transition
  15. ASP.NET MVC下使用AngularJs语言(七):Cookie的使用
  16. J-Link GDB Server Command
  17. Linux 环境部署记录(二) - NFS文件共享
  18. 宝塔中mysql数据库命名小坑
  19. C#Project不生成.vhost.exe和.pdb文件的方法
  20. MySQL 用户权限详细汇总(转)

热门文章

  1. python工业互联网应用实战17—前后端分离模式之django template vs jquery3
  2. bat脚本总结
  3. Docker基本原理概述
  4. TensorFlow常用Python扩展包
  5. TensorRT 7.2.1 开发概要(上)
  6. 【NX二次开发】不健全的双击按钮。
  7. StackOverflow经典问题:代码中如何去掉烦人的“!=null"判空语句
  8. asp.net core配合vue实现后端验证码逻辑
  9. noip2007 总结
  10. Python-对比两个目录中Excel文件