三種等待方式:強制等待、顯式等待、隱式等待


 
        

  我們在使用selenium的時候,會遇到一種定位不到的情況,因為web頁面有一個加載的過程 當頁面元素未出現時,

  去定位肯定是定位不到的,所以我們需要用到了‘等待’,該如何使用等待呢,讓我們一起來探討一下吧!

time.sleep()強制等待

  time模塊,是python專門用來處理時間的內建庫。

  我們可以使用它時需要導入  import   time

  time.sleep(2) 意思是強制休眠2秒種的時間

  這樣等待的弊端是,我們已經定位到元素的時候,還會繼續等待,導致我們工作效率很低 所以WebDriver提供了兩種類型的等待:隱式等待和顯式等待

implicitly_wait()隱式等待

  該方法來實現隱式等待,默認參數的單位為秒,如里面的參數設置等待時長為10秒。  

  當腳本執行到某個元素定位時,如果元素可以定位,則繼續執行;

  如果元素定位不到,則它將以輪詢的方式不斷地判斷元素是否被定位到。假設在第6秒定位到了元素則繼續執行,

  若直到超出設置時長(10秒)還沒有定位到元素,則拋出異常  

  該等待設置完是對整個全局起作用,所以只需設置一次即可,不需要導入任何模塊,直接使用

WebDriverWait():顯式等待

  是針對於某個特定的元素設置的等待時間,在設置時間內,默認每隔0.5時間檢測一次特定的元素是否存在,

  如果在設置的時間內找到了元素,則直接執行。如果超過設置最長等待時間檢測不到則拋出異常。

  默認檢測頻率為0.5s,默認拋出異常為:NoSuchElementException。

  該方法需要導入By 、WebDriverWait 、expected_conditions

 下面的代碼是對三種等待的具體例子:

  from selenium import webdriver

  from selenium.webdriver.common.by import By

  from selenium.webdriver.support.ui import WebDriverWait

  from selenium.webdriver.support import expected_conditions as EC

  import time

  driver=webdriver.Chrome() driver.implicitly_wait(5) #隱式等待

  driver.get('http://www.baidu.com')

  time.sleep(3) #強制等待

  driver.find_element_by_id('kw').send_keys('特朗普')

  #每隔0.5秒檢查一次(默認就是0.5秒。也可以修改),最多等待10秒,直到找到ID="su"元素就執行,否則拋出異常

  element=WebDriverWait(driver,10,0.5).until(EC.visibility_of_element_located((By.ID,'su'))) #顯式等待

  element.click()

  time.sleep(2)

  driver.quit()

 

補充一點

presence_of_element_located           檢查元素是否存在,但是並不一定可見。

visibility_of_element_located              檢查元素存在,並且可見於頁面,也就是能定位到它

 
       


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM