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博客

转载于:https://www.cnblogs.com/weiyinfu/p/8134919.html

selenium的运行时异常相关推荐

  1. 运行时异常 检查时异常

    Throwable是Java程序中所有异常对象的根基类,而Throwable是从Object类直接继承来的, Throwable可分为error(错误)和 Exception(异常).error表示的 ...

  2. 运行时异常与一般异常有何异同?(转)

    运行时异常与一般异常有何异同?(转) 文章分类:IT生活 Throwable是所有Java程序中错误处理的父类,有两种资类:Error和Exception. Error:表示由JVM所侦测到的无法预期 ...

  3. IntelliJ IDEA 2020.2 发布:支持Java 15、GitHub审查、运行时异常的排查辅助...

    点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 作者 | 局长 来源 | https://www.osc ...

  4. 抛出运行时异常的目的_「JAVA」运行时异常、编译时异常、自定义异常,通过案例实践转译和异常链...

    Java基础之异常处理机制 什么是异常 从事Java开发的小伙伴对于"异常"应该不陌生,因为每天都会遇到不少异常,或捕获,或抛出.那究竟什么是异常?异常即非正常的,不同于平常.一般 ...

  5. 运行时异常与一般异常区别

    Java提供了两类主要的异常:runtime exception和checked exception. checked exception: checked 异常也就是我们经常遇到的IO异常,以及SQ ...

  6. 运行时异常与一般异常的区别

    运行时异常:由java虚拟机抛出的异常.用户不必处理. 而一般异常是用户可以抛出的异常,如果抛出调用必须进行处理. 1,从机制角度来讲: 运行时异常: 在定义方法时不需要声明会抛出runtime ex ...

  7. 章节六、2-异常---运行时异常

    一.案例演示(除数为0运行时异常) 1.创建一个名为RuntimeExceptionDemo的类 编写代码时未报错,点击运行,运行结果如下,报异常: 2.使用try/catch捕捉异常 package ...

  8. JAVA运行时异常及检查式异常

    欢迎支持笔者新作:<深入理解Kafka:核心设计与实践原理>和<RabbitMQ实战指南>,同时欢迎关注笔者的微信公众号:朱小厮的博客. 欢迎跳转到本文的原文链接:https: ...

  9. Effective Java之对可恢复的情况使用受检异常,对编程错误使用运行时异常(五十八)

    java将所有的错误封装为一个对象,其根本父类为Throwable, Throwable有两个子类:Error和Exception. 异常分成三种结构 1.错误:Error是Throwable 的子类 ...

最新文章

  1. 解析HTTP协议六种请求方法,get,head,put,delete,post有什么区别
  2. pytorch resnet50_PyTorch终于能用上谷歌云TPU,推理性能提升4倍,我们该如何薅羊毛?...
  3. 荔枝图床阿里掘金搜狗奇虎图床源码
  4. python字典类型写入文件_python 字典写入文件
  5. HTTP 如何传输大文件
  6. WinMerge只显示差异部分的设置方法
  7. 【Servlet】web.xml中url-pattern的用法
  8. Allegrocadence PCB测量时显示两种单位(mil mm)
  9. 马云回应豪宅谣言;淘宝上线了三架波音747进行拍卖;迪拜投1.4亿美元建模拟火星丨价值早报
  10. 如果我们能正确预测基本面因子
  11. 任正非:为什么华为选择与西工大合作,而没选清华北大
  12. java实现 zip rar 7z 压缩包解压
  13. MAC下Defect4J安装与配置
  14. 计算机类sci四大水刊,材料灌水的sci期刊_十大水榜sci杂志_四大垃圾sci杂志
  15. 笔记本电脑下wifi网卡的启动
  16. DNS被污染后怎么才能解决?
  17. Java 航空系统设计
  18. idea java反编译_idea的java反编译插件
  19. html JS打印添加水印图片
  20. 002-01朴素贝叶斯到语言模型

热门文章

  1. 在eclipse4.5.1官方英文版利用官方语言包汉化的方法
  2. AC日记——约瑟夫问题 codevs 1282
  3. RubyCritic:一款不错的检测代码质量工具
  4. volatile简记
  5. ASP.NET 通用 权限 管理系统
  6. 查看Windows系统的开机、关机时间、开机时长等信息
  7. CentOS7 按nodejs和npm的方法
  8. 电力企业信息化建设方案之调度信息报送系统
  9. 绝对干货:保险公司决策分析系统建设方案
  10. amd u盘安装linux mint,安装Linux Mint 20后需要做的13件事