等待选择:
-1、隐性等待:全局设置,等待查找元素,
-2、显性等待:等待元素可以被点击,可见,
-3、强制等待:多个系统交互的地方。(上传文件/执行js代码)
1、强制等待
强制等待, time.sleep(), 时间不好控制。
import time time.sleep(1)
2、隐性等待
- 隐性等待
- 全局设置,
- 设置超时时间,超过超时时间:NoSuchElementException
- 只能用来等待元素
from selenium import webdriver # 设置全局等待时间 driver.implicitly_wait(5) driver.get("http://www.baidu.com") # 静态页面加载完成 driver.find_element_by_xpath('//div[@id="u1"]//a[@name="tj_login"]').click() # 当你的操作带来了页面的变化 ,请一定要等待。
3、显性等待
- 显性等待如果找不到元素
- 报错,TimeoutException
一般的条件:
presence_of_element_located 等待某个元素出现
visibility_of_element_located 某个元素是否可见
element_to_be_clickable 某个元素是否可被点击
一般步骤1、设置定时器 2、设置满足条件
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions #预期条件
#设置定时器 每隔0.5秒去查看 元素是否出现,共检查5秒
wait = WebDriverWait(driver,5,poll_frequency=0.5)
#设置满足的条件
"""presence_of_element_located 等待某个元素出现
visibility_of_element_located 某个元素是否可见
element_to_be_clickable 某个元素是否可被点击
"""
locator = ("xpath",'//*[@id="1"]/h3/a')
ele = wait.until(
expected_conditions.element_to_be_clickable(
locator=locator))