一、强制等待
from selenium import webdriver
from time import sleep
driver = webdriver.Chrome()
driver.get('https://www.baidu.com/')
sleep(3)#强制等待3s之后再执行下一步
print driver.current_url
driver.quit()
强制等待,无论浏览器是否加载完成都要等待3s,3s之后再执行下一步。
不过不建议使用此等待方式,太死板,严重影响程序执行效率
二、隐式等待
from selenium import webdriver
driver = webdriver.Chrome()
driver.get('https://www.baidu.com/')
driver.implicitly_wait(30) # 隐性等待,最长等30秒
print driver.current_url
driver.quit()
隐形等待是设置了一个最长等待时间,如果在规定时间内网页加载完成,则执行下一步;
否则一直等到时间截止,然后执行下一步。
不过有个弊端那就是程序会一直等待整个页面加载完成,才会执行下一步。
注意:隐性等待对整个driver的周期都起作用,所以只要设置一次即可。
三、显式等待
程序每隔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.Chrome()
driver.implicitly_wait(10) # 隐性等待和显性等待可以同时用,但要注意:等待的最长时间取两者之中的大者
driver.get('https://www.baidu.com/')
locator = (By.LINK_TEXT, 'hao123')
try:
WebDriverWait(driver, 20, 0.5).until(EC.presence_of_element_located(locator))
print driver.find_element_by_link_text('hao123').get_attribute('href')
finally:
driver.close()
网友评论