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

  • 相关阅读:
    jquery--blur()事件,在页面加载时自动获取焦点
    jquery三级联动
    工具集
    兼容各个浏览器:禁止鼠标选择文字事件
    jquery 事件委托(利用冒泡)
    小功能1:多种方法实现网页加载进度条
    JavaSE| 泛型
    SSM整合
    Redis数据库 02事务| 持久化| 主从复制| 集群
    Hadoop| MapperReduce02 框架原理
  • 原文地址:https://www.cnblogs.com/weiyinfu/p/8134919.html
Copyright © 2020-2023  润新知