selenium - webdriver - 設置元素等待


隱式等待:implicitly_wait(value), value默認是0

from selenium import webdriver
from selenium.common.exceptions import NoSuchElementException from time import ctime driver = webdriver.Chrome() # 設置隱式等待為10s driver.implicitly_wait(10) driver.get("https://www.baidu.com") try: print(ctime()) driver.find_element_by_id("kw22").send_keys("selenium") except NoSuchElementException as e: print(e) finally: print(ctime()) driver.quit()


Results:

Sat May 12 15:38:45 2018
Message: no such element: Unable to locate element: {"method":"id","selector":"kw22"}
(Session info: chrome=66.0.3359.170)
(Driver info: chromedriver=2.38.552522 (437e6fbedfa8762dec75e2c5b3ddb86763dc9dcb),platform=Windows NT 10.0.16299 x86_64)

Sat May 12 15:38:55 2018

  implicitly_wait()默認參數的單位為秒,本例中設置等待時長為10秒。

  這10秒並非一個固定的等待時間,它並不影響腳本的執行速度。

  它並不針對頁面上的某一元素進行等待。當腳本執行到某個元素定位時,如果元素可以定位,則繼續執行;如果元素定位不到,則它將以輪詢的方式不斷地判斷元素是否被定位到。假設在第6秒定位到了元素則繼續執行,若直到超出設置時長(10秒)還沒有定位到元素,則拋出異常。

 

顯示等待:WebDriverWait()

顯式等待使WebdDriver等待某個條件成立時繼續執行,否則在達到最大時長時拋出超時異常(TimeoutException)

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

driver = webdriver.Chrome()
driver.get("http://www.baidu.com")

element = WebDriverWait(driver, 5, 0.5).until(
                        EC.presence_of_element_located((By.ID, "kw"))
                        )
element.send_keys('selenium')

driver.quit() 

  

WebDriverWait類是由WebDirver 提供的等待方法。在設置時間內,默認每隔一段時間檢測一次當前頁面元素是否存在,如果超過設置時間檢測不到則拋出異常。具體格式如下:

WebDriverWait(driver, timeout, poll_frequency=0.5, ignored_exceptions=None)
  • driver :瀏覽器驅動。
  • timeout :最長超時時間,默認以秒為單位。
  • poll_frequency :檢測的間隔(步長)時間,默認為0.5S。
  • ignored_exceptions :超時后的異常信息,默認情況下拋NoSuchElementException異常。

參考資料:www.testclass.net/selenium_python/element-wait/


免責聲明!

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



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