目录
为什么进行时间等待?
-
模拟用户真实使用场景
-
防止代码因非语句错误而报错-----页面未完全加载完成时定位元素会报错
时间等待的三种方式:
1.强制等待
-
当代码执行到强制等待语句时,会等待给定的时间参数
-
需要导包(两种方式)
import time time.sleep(3) #等待三秒 from time import sleep sleep(3)
2.隐式等待(智能等待)
-
等待页面元素全部加载完成,需要传参【最长等待时间】。规定时间内加载完成后不会再进行等待
-
无需导包
driver.implicitly_wait(10)
3.显式等待
常搭配异常处理处理使用
语法格式:
-
等待页面指定元素加载完成,需要传参【驱动】【最长等待时间】【检测频率】
-
需要导包
-
设置显式等待,将driver作为参数传给lambda表达式。
-
检测某个元素是否存在
#第一种方法
WebDriverWait(driver, 10, 1).unit(lambda x: x.find_element(By.XPATH, '//*[@id="fmsearch"]/div/button'))
#第二种方法
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
# 判断元素是否可见(页面是否显示该元素),可见返回该元素,不可见抛异常
#传参为元组,元组内第一个参数是定位元素的方法,第二个参数是该元素的属性
EC.visibility_of_element_located((By.ID, 'ID'))
WebDriverWait(driver, 10, 1).unit(EC.visibility_of_element_located((By.ID, 'ID')))
lambda表达式
# lambda表达式:一句话函数,格式为:参数列表:返回值
var = lambda x: x * 2
def func(x):
return x * 2
def add(a, b):
return a + b
# ||
# ||等同于
# \/
add_num = lambda a, b: a + b
异常处理
-
可以导包也可不导包(导需要用到的异常包)
-
from selenium.webdriver.support.wait import WebDriverWait try: button = WebDriverWait(driver, 10, 1).until(lambda x: x.find_element(By.XPATH, '//*[@id="fmsearch"]/div/button')) button.click() except: print('定位失败!') raise # raise 主动抛出异常