• 首页
  • 狐文
  • 狐图
  • About
狐窝
OvO
  1. 首页
  2. 未分类
  3. 正文

selenium webdriver 你所不知道的quit 和close

2017年08月06日 78点热度 0人点赞 0条评论

2014-01-02 from---http://blog.sina.com.cn/s/blog_53f7a75b0101l1jn.html

我用selenium webdriver(以后简称SW)
驱动谷歌浏览器进行网页数据的获取。之所以用谷歌,主要是由于它是轻量级的,速度快。

做数据获取,SW
是不错的选择。有人总是说,SW速度慢,比不上httpclient或者HtmlUnit,它们直接操作底层数据来的更加痛快。可是,不得不考虑的是,网络数据获取是“你情我愿”的事情。你本地的程序运行再快,服务器那边给你CUT!你照样玩不转。所以,只要计算机能力足够强大,SW配合多线程,足以。
最近遇到一个恼火的问题,就是quit 和close,二者都是关闭浏览器。 
ChromeDriver chrome = new ChromeDriver();
chrome.close();
chrome.quit();
二者与什么区别吗?网上评论说,最好用quit而不用close. 因为quit
关闭的更加彻底。可是从各个方面的测看,我都看不出二者的区别。后来在线程池使用中,发现了quit的一个致命问题。
由于我是要获取超大量的数据,所以,需要访问海量网址。我计划的是完成一个任务(用一个线程搞定),关闭浏览器,然后开辟另一个线程完成下一个任务。
结果出现了问题:
org.openqa.selenium.os.UnixProcess$SeleniumWatchDog destroyHarder
INFO: Command failed to close cleanly. Destroying forcefully (v2)

后来一个高手(估计是维护者)如是说:
that's an INFO logging line, not a warning. It's just saying that the process took too long to finish naturally and so is now being killed with the equivalent of "kill -9"。
这是啥意思?经过我仔细审核自己的代码,我发现,问题处在了QUIT这个方法上。可是,当我对单独测试的时候,结果这个问题又不见了。


因此,可以肯定。chrome.quit();实际上去试图关闭所有的windows,虽然我只用了一个window,但是我之前访问了太多的网页,而没有进行quit和重启我的chrome.这让我的chrome中残留了太多的东西需要clean and close. 在最大允许的时间范围内,quit无法结束chrome,所以只能kill. 
出现这个提示后,程序卡住了,不再继续执行。


我不得不说,这是因为SW还不完善。但是,就目前看,多线程调用SW中关闭浏览器的最佳方式是使用close,这样就不会出现上述问题。


我还发现,chrome的方法中没有返回值为boolean的方法(除了equals之外),这一点很不利,因为我需要对chrome进行关闭,开启,切换等。如果不能准别把握chrome的状态,就可能出现很多异常陷阱。比如我想关闭,但是,如果这个chrome根本没开着,就会出现异常。所以,如果能增加一个chrome.isOpen方法,或者chrome.getState方法,就很好了。

标签: 暂无
最后更新:2017年08月06日

OvO

狐狸

点赞
< 上一篇
下一篇 >
最新 热点 随机
最新 热点 随机
钛备份或小米系统备份功能备份出来的APK无法正常还原 BBR安装启用 安装docker mitmproxy 调试方法 Android SDK 版本选择 Perdition Mail代理服务器配置 HAProxy SSL代理 Openssl 中间人SSL代理 Stunnel SSL to SSL代理 NGINX反代IMAP配置 各种设备User Agent Torrent下载工具推荐 用 rar2john+hashcat 破解 RAR 文件密码 2020最好的Linux发行版 关闭新版chrome工具栏上拼图图标 Office 下载、安装、激活,有它就够了! Android 非官方的发行版 openwrt添加autoconf-archive
IntelliJ IDEA创建SpringMVC+Maven项目 bzroot解包、打包 Ubuntu编译运行ss-redir打造透明代理Wifi环境 Linux入门之内核管理番外篇(4)udev入门(1) yum 和 epel 的详解 2020最好的Linux发行版 pycharm运行scrapy项目 Chrome下自签名证书提示无效的问题 Android SDK 版本选择 安装最新内核并开启 BBR 关于ubuntu循环依赖软件的删除 apt与apt-get的区别 如何构建一个中型的 web 应用(全栈技术) Totally new kernel on OpenWRT 谷歌开源项目Chromium的源码获取与项目构建(Win7+vs10/vs13) Python 定义编码 利用iptables防止ssh暴力破解和控制网速 Android 系统上的 Xposed 框架中都有哪些值得推荐的模块?
标签聚合
https e 路由 chrome 密码 网卡 blog yum docker git 下载 chromium 安装 linux ssl 镜像

COPYRIGHT © 2020 狐窝. ALL RIGHTS RESERVED.

THEME KRATOS MADE BY VTROIS