selenium中的等待時間有3種:sleep(second);WebDricerWait(driver,timeout,poll_frequency,ignored_exceptions);implicicitly(second)
1.sleep(second) :強制等待,封裝在time中的sleep類中
導入方法及使用方法如下:
1 #!/usr/bin/env python 2 # _*_ coding:utf-8 _*_ 3 # 導入webdriver包 4 from selenium import webdriver 5 from time import sleep 6 driver = webdriver.Firefox() #創建火狐對象 7 driver.get("https://www.baidu.com/") #打開baidu 8 sleep(5) #等待5毫秒 9 driver.quit() #關閉瀏覽器
2.WebDricerWait(driver,timeout,poll_frequency,ignored_exceptions) 顯式等待,當找到要校驗的元素后就繼續執行下面的程序,非強制等待
driver:瀏覽器驅動
timeout:最長超時,秒為單位
poll_frequency:檢測間隔(步長)時間,默認為0.5s
ignored_exceptions:超時后的異常信息,默認情況下拋出 NoSuchElementException
webDriverWait 一般與until()與until_not()方法配合使用
1 #!/usr/bin/env python 2 # _*_ coding:utf-8 _*_ 3 from selenium import webdriver 4 from time import sleep 5 from selenium.webdriver.common.by import By 6 from selenium.webdriver.support.ui import WebDriverWait 7 from selenium.webdriver.support import expected_conditions as EC 8 #WebDriverWait 顯式等待 9 driver = webdriver.Firefox() 10 driver.get("https://www.baidu.com/") 11 el = driver.find_element_by_xpath('//*[@id="kw"]') 12 element = WebDriverWait(driver,5,0.5).until(EC.presence_of_element_located((By.ID,"kw"))) 13 element.send_keys("selenium") 14 driver.find_element_by_xpath('//*[@id="su"]').click() 15 sleep(5) 16 driver.quit()
3.implicicitly(second)隱式等待,設置最長等待時長,如果在特定時間內未找到元素則拋出NoSuchElementException異常
1 #!/usr/bin/env python 2 # _*_ coding:utf-8 _*_ 3 #隱式等待 4 from selenium import webdriver 5 from time import sleep,ctime 6 from selenium.common.exceptions import NoSuchElementException 7 driver = webdriver.Firefox() 8 driver.implicitly_wait(10) 9 driver.get("https://www.baidu.com/") 10 try: 11 print(ctime()) 12 driver.find_element_by_xpath('//*[@id="kw"]').send_keys("selenium") 13 driver.find_element_by_xpath('//*[@id="su"]').click() 14 except NoSuchElementException as E: 15 print(E) 16 finally: 17 print(ctime()) 18 driver.quit()
4.總結
隱式等待會等driver完全加載完成(如js、css等);顯示等待僅僅校驗需要加載的元素是否存在;強制等待字面很好理解,就不多說。大家可根據需求自行選擇。
