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的运行时异常的更多相关文章

  1. Java--RuntimeException(运行时异常)

    [转载自]:http://blog.csdn.net/qq7342272/article/details/7940741 java运行时异常是可能在java虚拟机正常工作时抛出的异常. java提供了 ...

  2. java异常分类(运行时异常,可检查异常)

    NullPointerException:是运行时异常(RuntimeException),也叫非检查异常 所以我们抛出该类异常实例时,方法声明处无需添加throws来列举该类异常的抛出,编译器在编译 ...

  3. java 检查抛出的异常是否是要捕获的检查性异常或运行时异常或错误

    /** * Return whether the given throwable is a checked exception: * that is, neither a RuntimeExcepti ...

  4. android 运行时异常捕获

    1,将运行时异常捕获并存到手机SD卡上 可以直接使用logcat 命令Runtime.getRuntime().exec("logcat -f "+ file.getAbsolut ...

  5. Java异常处理-----非运行时异常(受检异常)

    非运行时异常(受检异常) 如果出现了非运行时异常必须进行处理throw或者try{}catch(){}处理,否则编译器报错. 1:IOException 使用要导入包import java.io.IO ...

  6. Java异常处理-----运行时异常(RuntimeException)

    RuntimeException RunntimeException的子类: ClassCastException 多态中,可以使用Instanceof 判断,进行规避 ArithmeticExcep ...

  7. 自定义 ThreadPoolExecutor 处理线程运行时异常

    自定义 ThreadPoolExecutor 处理线程运行时异常 最近看完了ElasticSearch线程池模块的源码,感触颇深,然后也自不量力地借鉴ES的 EsThreadPoolExecutor ...

  8. Java软件工程师面试题:Java运行时异常与一般异常有什么不一样?

    异常表示程序运行过程中可能出现的非正常状态,运行时异常表示虚拟机的通常操作中可能遇到的异常,是一种常见运行错误.java编译器要求方法必须声明抛出可能发生的非运行时异常,但是并不要求必须声明抛出未被捕 ...

  9. Effective Java 第三版——70. 对可恢复条件使用检查异常,对编程错误使用运行时异常

    Tips 书中的源代码地址:https://github.com/jbloch/effective-java-3e-source-code 注意,书中的有些代码里方法是基于Java 9 API中的,所 ...

随机推荐

  1. 在centos服务器上启用ipv6地址

    随着互联网世界日新月异的发展,ipv6好像已经成为一种必不可少的趋势,但是当前国内机房大部分还不能支持ipv6,腾讯云亦如此.同时,现在有部分程序在服务器上运行的时候,需要服务器能监听一个ipv6地址 ...

  2. 解决excel日期变成数字的问题

    在Excel中如果单元格的公式是日期格式,那么引用后的数值是错误的[不是日期格式而被转换成数字类型了],这种情况显然不是我们想要的结果 解决办法: 在公式中强制转成文本类型即可(="Date ...

  3. 基于IE的多标签的浏览器-世界之窗2.4

    经常在Win32服务器上打开网页,但可能只是打开一个网页或是下载一点东西而已,虽然默认的IE浏览器基本上能满足需求 但还是存在不少的不便,比如如果要打开多个网页的话则需要再打开一个IE,还有就是习惯了 ...

  4. SqlDateTime 溢出。必须介于 1/1/1753 12:00:00 AM 和 12/31/9999 11:59:59 PM 之间。

    出现的错误:SqlDateTime 溢出.必须介于 1/1/1753 12:00:00 AM 和 12/31/9999 11:59:59 PM 之间. 错误的原因:.NET Framework dat ...

  5. 星文快投v2全新升级

    2017-07-31 关于“星文快投”,我的初衷是:简单.稳定.可定制的投标软件.前期版本其实也基本达到这个目标了,系统跑起来后,几天下来也累积过手三十多万个标的了,自动投标也工作正常,作为一个纯粹的 ...

  6. curl_setopt — 设置 cURL 传输选项

    curl_setopt (PHP 4 >= 4.0.2, PHP 5, PHP 7) curl_setopt — 设置 cURL 传输选项 bool curl_setopt ( resource ...

  7. 【Python】使用torrentParser1.03对单文件torrent的分析结果

    C:\Users\horn1\Desktop\python\42-torrentParser>python torrentParser.py 文件名=./5.torrent 文件结构: anno ...

  8. 也谈OpenStack中的虚拟机HA

    OpenStack是一个旨在为公共及私有云的建设与管理提供软件的开源项目. 它的社区拥有超过130家企业及1350位开发人员,这些机构与个人都将OpenStack作为基础设施即服务(IaaS)资源的通 ...

  9. javascript的冒泡排序, 快速排序, 选择排序, 插入排序

    冒泡排序, 最经典的排序, 把比较大的数字往后放, 和选择排序恰恰相反: <!DOCTYPE html> <html lang="en"> <head ...

  10. asp.net给文件分配自己主动编号,如【20140710-1】

    在开发办公软件的时候,须要给非常多文件什么的东西分配一个编号.是依照日期来的,比方2014.07.10的第一个文件编号就为20140710-1,这一天的第二个文件编号就为20140710-2,以此类推 ...