在打开某一页面时,我们通常要等待一定时间,等页面加载出对应的元素再进行操作。Selenium有三种等待方式:
1. 强制等待
import time
time.sleep(5) -- 不管页面元素有没有被找到,都固定等待5s。这种方式简单,但不灵活
2. 隐性等待
driver.implicitly_wait(5) -- 在给定时间5s范围内,如果元素被找到即可往下执行,不用必须等待5s; 这种方式只处理两种场景,页面元素被找到或者一条命令执行完成(如API的执行)。每个会话当中只需被调用一次,所以不用每次都写driver.implicitly_wait(5)。
3. 显性等待
相比较前面的强制等待和隐性等待,显性等待是最灵活的,能过用在页面元素可见/窗口出现/页面元素可用等很多复杂场景中。
from selenium.webdriver.support.waitimport WebDriverWait
from selenium.webdriver.supportimport expected_conditions
locate= ("xpath","//div[@class="search-input-wrap flex_between"]") -- 被定位的元素
expected_conditions调用等待条件:
WebDriverWait(driver,10).until(expected_conditions.visibility_of_element_located(locate))
除了until, 也还可以使用not until。 not until是当条件不成立时则继续往下执行,调用方式跟until 一致。