Python selenium 三種等待元素方式

O(∩_∩)OKing發表於2020-12-18

1. 強制等待

sleep

這種叫強制等待,不管你瀏覽器是否載入完了,程式都得等待,時間讀完繼續執行下面的程式碼,,太死板,嚴重影響程式執行速度。


from selenium import webdriver
from time import sleep

driver = webdriver.Firefox()
driver.get('https://huilansame.github.io')

sleep(3)  

print driver.current_url
driver.quit()

2. 隱性等待

implicitly_wait()

隱形等待是設定了一個最長等待時間,如果在規定時間內網頁載入完成,則執行下一步,否則一直等到時間截止,然後執行下一步。那就等於程式會一直等待整個頁面載入完成,也就是一般情況下你看到瀏覽器標籤欄那個小圈不再轉,才會執行下一步,但有時候頁面想要的元素早就在載入完成了

from selenium import webdriver

driver = webdriver.Firefox()
driver.implicitly_wait(30)  # 隱性等待,最長等30秒
driver.get('https://huilansame.github.io')

print driver.current_url
driver.quit()

 

3.顯性等待

WebDriverWait()

配合該類的until()和until_not()方法,就能夠根據判斷條件而進行靈活地等待了。它主要的意思就是:程式每隔xx秒看一眼,如果條件成立了,則執行下一步,否則繼續等待,直到超過設定的最長時間,然後丟擲TimeoutException。

from selenium import webdriver
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By

driver = webdriver.Firefox()
driver.implicitly_wait(10)  # 隱性等待和顯性等待可以同時用,但要注意:等待的最長時間取兩者之中的大者
driver.get('https://huilansame.github.io')
locator = (By.LINK_TEXT, 'CSDN')

try:
    WebDriverWait(driver, 20, 0.5).until(EC.presence_of_element_located(locator))
    print driver.find_element_by_link_text('CSDN').get_attribute('href')
finally:
    driver.close()
  1. until()和until_not()方法

                    until()   判斷,直到返回值為true,執行下一步

                    nutil_not    判斷,直到返回值為false    執行下一步

相關文章