显式等待Code
显性等待是对指定元素进行等待的一种等待方式。通过设置最大等待时间,检查频率对页面的元素来进行等待,一旦找到元素,则停止等待,进入后续步骤。
它主要的意思就是:程序每隔X秒看一眼,如果条件成立了,则执行下一步,否则继续等待,直到超过设置的最长时间,然后抛出TimeoutException异常。
关键句:WebDriverWait(driver,5,1).until(lambda x:x.find_element_by_id(“kw”))
from telnetlib import EC
from selenium.webdriver.common.by import By
from selenium.webdriver.support.wait import WebDriverWait
from time import ctime
from selenium import webdriver
from selenium.common.exceptions import NoSuchElementException
driver = webdriver.Chrome()
# driver.implicitly_wait(5)
driver.get("https://www.baidu.com/")
try:
WebDriverWait(driver,5,1).until(lambda x:x.find_element_by_id("kw"))
except NoSuchElementException as e:
print(e)
finally:
print(ctime())
driver.quit()
运行结果
隐式等待Code
隐式等待是设置了一个最长等待时间,如果在规定时间内网页加载完成,则执行下一步,否则一直等到时间结束,然后再执行下一步操作。
使用方法:driver.implicitly_wait(X)。在X时间内,页面加载完成,进行下一步操作。只要设置一次即可。
from time import ctime
from selenium import webdriver
from selenium.common.exceptions import NoSuchElementException
driver = webdriver.Chrome()
driver.implicitly_wait(10)
driver.get("https://www.baidu.com/")
try:
print( ctime() )
driver.find_element_by_xpath("//*[@id='kw']").send_keys("csdn")
driver.find_element_by_xpath("//*[@id='su']").click()
except NoSuchElementException as e:
print(e)
finally:
print(ctime())
driver.quit()
运行结果
强制等待
强制等待是最简单的一种等待方式,强制让浏览器等待X秒,不管当前操作是否完成,是否可以进行下一步操作,都必须等X秒的时间。
使用方法:time.sleep(X)或者sleep(X)。在python中是基于time模块的sleep方法来实现。
import time
from selenium import webdriver
driver = webdriver.Chrome()
driver.get("https://www.baidu.com/")
driver.find_element_by_link_text("亚运上百度 为拼搏喝彩").click()
time.sleep(5)
driver.quit()
运行结果
总结
效率:显式等待 > 隐式等待 > 强制等待
关键代码:
try:
WebDriverWait(driver,5,1).until(lambda x:x.find_element_by_id("kw"))
except NoSuchElementException as e:
print(e)
finally:
print(ctime())