1. 程式人生 > >Selenium-幾種等待方式

Selenium-幾種等待方式

什麽 頻率 一次 進行 utf 可執行 /usr baidu 超過

強制等待

  一直使用的time.sleep(5),可以放在任意地方,不好的地方,不太準確確定時間

隱形等待

  driver.implicitly_wait(5)

    設置了一個最長等待時間,如果在規定時間內網頁加載完成,則執行下一步,否則一直等到時間截至,然後執行下一步.註意這裏有一個弊端,那就是程序會一直等待整個頁面加載完成,也就是一般情況下你看到瀏覽器標簽欄那個小圈不再轉,才會執行下一步

    但他還有一個問題,如果你頁面加載挺好的,他會一閃而過,你也看不到具體的東西

    對整個driver的周期都起作用,所以只要設置一次即可,和sleep不同

顯性等待

  WebDriverWait,配合該類的unitl()和until_not()方法,就能夠根據判斷條件而進行靈活的等待.

如何理解?

  每隔N秒檢查下,如果條件成立了,則執行下一步,否則繼續等待,直到超過設置的最長時間,然後拋出TimeoutException異常

  語法如下:

    from selenium.webdriver.support.wait import WebDriverWait

    WebDriverWait(driver,超時時長,調用頻率).until(可執行方法,超時的時候返回的信息)

    對上述部分的解釋:

      drvier:  生成的driver是什麽名字,就是什麽

      超時時長:  超時時長

      調用頻率:  調用unitl或until_not中的方法的間隔時間,默認是0.5秒

      until是當元素出現或什麽條件成立則繼續執行

      unitl_not是當元素消失或什麽條件不成立則繼續執行

      可執行的方法:  達到條件,執行的下一步

      超時的時候返回的信息:  超時返回的異常

#! /usr/bin/env python
#coding=utf-8

from selenium import webdriver
from selenium.webdriver.support.wait import WebDriverWait
import time

driver = webdriver.Firefox()
#隱性等待
driver.implicitly_wait(5)
driver.get(
"https://www.baidu.com/") #顯性等待 #WebDriverWait(driver,10).until(lambda driver:driver.find_element_by_id("kw"),message = "元素加載超時").send_keys("博客園") kw = WebDriverWait(driver,10).until(lambda driver:driver.find_element_by_id("kw"),message = "元素加載超時") kw.send_keys("博客園") time.sleep(3) driver.quit()

調試的時候用 強制等待

等調通了,再改成隱形等待或者顯性等待

Selenium-幾種等待方式