1. 程式人生 > >selenium的運行時異常

selenium的運行時異常

瀏覽器 設置 最大的 logs 獲取 git 參數 timeunit 運行時異常

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一定要知道常用的參數有哪些,參數來源有兩處:

  • firefox瀏覽器自身的參數
  • 驅動的參數

驅動的參數可以參考
geckodriver

firefox參數可以參考
CSDN博客

selenium的運行時異常