隐性等待
driver.implicitly_wait(time)
# time的单位为秒
如果webdriver在DOM中没有找到元素,将会等待设定的时间(time)那么长的时间,如果超出这个时间还是没有找到这个元素,将会抛出错误。并且,具有全局性,一旦设置,将会在整个webdriver周期内执行,修改或者取消时,需要重置,重置方法为
driver.implicitly_wait(0)
显性等待
WebDriverWait(driver, 超时时长, 调用频率, 忽略异常).until(可执行方法, 超时时返回的信息)
其中until方法一定要是可以调用的,即这个对象一定有 __call__() 方法
可以用selenium提供的 expected_conditions 模块中的各种条件,也可以用WebElement的 is_displayed() 、is_enabled()、is_selected() 等方法
显性等待主要的意思就是:程序每隔xx秒看一眼,如果条件成立了,则执行下一步,否则继续等待,直到超过设置的最长时间,然后抛出TimeoutException。
from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
locator = (By.CLASS_NAME, "test")
try:
WebDriverWait(driver, 2).until(EC.presence_of_element_located(locator))
except:
print("未找到元素")
finally:
driver.find_element_by_xpath('(//*[@id="test"]//div[@class="test"])[1]').click()
# driver.quit() # 关闭浏览器
# By寻找元素格式:
# CLASS_NAME
# ID
# CSS_SELECTOR
# LINK_TEXT
# NAME
# PARTIAL_LINK_TEXT
# TAG_NAME
# XPATH