显示等待 隐式等待
显示等待
使webDriver 等待某个条件成立时继续执行,否则在大刀最大时长时抛出超时异常(TimeoutException)
WebDriver(driver,timeout,poll_frequency=0.5,ignored_exceptions=None)
driver : 浏览器驱动
timeout : 最长超时时间,默认以秒为单位
poll_frequency : 检测的间隔(步长)时间,默认为0.5
ignored_exceptions : 超时后的异常信息,默认情况下抛NoSuchElementExceotion异常。
结合方法:
until():
until(method,message="")
until_not():
until_not(method,message="")
# 引入 Keys 模块
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
from time import sleep
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")
input_element = driver.find_element_by_id("kw")
#locator = (By.LINK_TEXT, 'CSDN'):until 中传入的是一个 locator 对象
i_element = WebDriverWait(driver, 5, 0.5)\
.until(EC.presence_of_element_located((By.ID,"kw")),"这个元素出来了")
i_element.send_keys('selenium')
# driver.quit()
隐式等待
implicitlt_wait()
默认为0
默认参数的但是为秒,举例设置10s ,首先 这10秒并非一个固定的等待时间,它并不影响脚本的运行速度。其次,它并不针对页面上的某一元素进行等待。当脚本执行到某个元素定位时,如果元素可以定位,则继续执行;如果元素定位不到,则它将以轮训的方式不断地判断元素是否被定位到。假设在第6秒定位到了元素则继续进行,若直到超出设置时长10s 还没有定位到元素,则抛出异常。
from selenium import webdriver
from selenium.common.exceptions import NoSuchElementException
from time import ctime
driver = webdriver.Chrome()
#设置隐式等待10秒
driver.implicitly_wait(10)
driver.get("http://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()