selenium的运行时异常
selenium这个库是一个伟大的库,它赋予了程序员控制浏览器的能力。但是如果不理解这个库的设计上的一些哲学,就会遇到很多问题。
selenium支持多种浏览器,但是这些浏览器里面,只有firefox是完美支持的,所以,如果使用selenium优先使用firefox,这样才能少踩坑。
selenium设计上最大的特点是:大量使用运行时异常而不是普通的异常。
运行时异常(RuntimeException)的特点可以用八个字来形容:无需捕捉,可以捕捉。
如下例,不捕捉RuntimeException也不会报错(但是程序会终止),捕捉了也可以。
static void haha() {
throw new RuntimeException("怎么这样子");
}
public static void main(String[] args) {
for (int i = 0; i < 10; i++) {
try {
haha();
} catch (Exception e) {
e.printStackTrace();
}
}
}
使用运行时异常有好处有坏处,好处是可以避免大量的try-catch,坏处是你不知道你所调用的函数什么时候出问题、会出什么问题,从而导致你的代码有许多运行时才能暴露出来的问题。如果只有运行时才能发现问题,那跟Python、JavaScript之流又有什么分别!
举个例子:selenium在获取元素时,findElement()函数如果找不到元素就会抛出运行时异常而不是返回null。
selenium在爬取https网站时,有时会卡死在 performing a tls hand shake,而selenium默认的timeout时间很长,最后也会抛出TimeoutException。这是selenium设计上的一大败笔,运行时异常命名最好以RuntimeException结尾。
要想设置timeout,主要通过driver的manage().timeout()来设置,timeout有三种:
- 页面加载时间
- 显式等待时间:等待某种条件
- 隐式等待时间:固定等待一段时间
driver.manage().timeouts().pageLoadTimeout(5, TimeUnit.SECONDS);
需要注意,页面加载时间和隐式等待时间都是影响全局的。
在使用完selenium之后,一定要关闭WebDriver,否则进程还在运行。运行多次之后,会发现有好多webdriver进程。
最后,使用selenium一定要知道常用的参数有哪些,参数来源有两处:
- firefox浏览器自身的参数
- 驱动的参数
驱动的参数可以参考
geckodriver
firefox参数可以参考
CSDN博客
selenium的运行时异常的更多相关文章
- Java--RuntimeException(运行时异常)
[转载自]:http://blog.csdn.net/qq7342272/article/details/7940741 java运行时异常是可能在java虚拟机正常工作时抛出的异常. java提供了 ...
- java异常分类(运行时异常,可检查异常)
NullPointerException:是运行时异常(RuntimeException),也叫非检查异常 所以我们抛出该类异常实例时,方法声明处无需添加throws来列举该类异常的抛出,编译器在编译 ...
- java 检查抛出的异常是否是要捕获的检查性异常或运行时异常或错误
/** * Return whether the given throwable is a checked exception: * that is, neither a RuntimeExcepti ...
- android 运行时异常捕获
1,将运行时异常捕获并存到手机SD卡上 可以直接使用logcat 命令Runtime.getRuntime().exec("logcat -f "+ file.getAbsolut ...
- Java异常处理-----非运行时异常(受检异常)
非运行时异常(受检异常) 如果出现了非运行时异常必须进行处理throw或者try{}catch(){}处理,否则编译器报错. 1:IOException 使用要导入包import java.io.IO ...
- Java异常处理-----运行时异常(RuntimeException)
RuntimeException RunntimeException的子类: ClassCastException 多态中,可以使用Instanceof 判断,进行规避 ArithmeticExcep ...
- 自定义 ThreadPoolExecutor 处理线程运行时异常
自定义 ThreadPoolExecutor 处理线程运行时异常 最近看完了ElasticSearch线程池模块的源码,感触颇深,然后也自不量力地借鉴ES的 EsThreadPoolExecutor ...
- Java软件工程师面试题:Java运行时异常与一般异常有什么不一样?
异常表示程序运行过程中可能出现的非正常状态,运行时异常表示虚拟机的通常操作中可能遇到的异常,是一种常见运行错误.java编译器要求方法必须声明抛出可能发生的非运行时异常,但是并不要求必须声明抛出未被捕 ...
- Effective Java 第三版——70. 对可恢复条件使用检查异常,对编程错误使用运行时异常
Tips 书中的源代码地址:https://github.com/jbloch/effective-java-3e-source-code 注意,书中的有些代码里方法是基于Java 9 API中的,所 ...
随机推荐
- 热修复 DexPosed AOP Xposed MD
Markdown版本笔记 我的GitHub首页 我的博客 我的微信 我的邮箱 MyAndroidBlogs baiqiantao baiqiantao bqt20094 baiqiantao@sina ...
- Everything 使用技巧 MD
Markdown版本笔记 我的GitHub首页 我的博客 我的微信 我的邮箱 MyAndroidBlogs baiqiantao baiqiantao bqt20094 baiqiantao@sina ...
- 利用proguard对java web工程代码混淆
目标: 将代码混淆,也就是给第三方源代码,让他们只能运行,却看不懂代码. 用到的工具: 混淆jar的工具:proguard5.1 下载地址:http://download.csdn.net/detai ...
- tensorflow项目构建流程
https://blog.csdn.net/hjimce/article/details/51899683 一.构建路线 个人感觉对于任何一个深度学习库,如mxnet.tensorflow.thean ...
- javascript——select 标签的使用
<% String state = (String) request.getAttribute("state"); String day = (String) request ...
- VIM的buffers
原文:http://ju.outofmemory.cn/entry/13522 重新在不同的 tab 中打开多个关闭的buffer 文件, https://stackoverflow.com/ques ...
- Hadoop:安装ftp over hdfs
https://blog.csdn.net/sptoor/article/details/11484855 https://blog.csdn.net/tengxing007/article/deta ...
- 阿里云centos配置nginx和nodejs
今天新买了阿里云,想把网站跑起来,于是记录跑起来的过程 1.购买域名 2.购买解析 3.购买ecs主机 4.ssh登录主机 5.安装vsftpd 6.配置ftp用户.文件夹.权限 7.安装nginx/ ...
- 【nodejs】理想论坛帖子下载爬虫1.08
//====================================================== // 理想论坛帖子下载爬虫1.09 // 使用断点续传模式,因为网络传输会因各种原因中 ...
- javascript奇技淫巧之位运算符
奇技淫巧:指过于奇巧而无益还让人着迷的技艺与制品. And(与) & Or(或) | Exclusive Or(异或) 或者称 Xor ^ Not(非) ~ 位运算符,我们在日常js开发中其实 ...