selenium学习:等待方式
隐式等待
1.针对查找元素设置最大的超时时间
2.可以全局性的设置
3.不满足时,提示no such element
driver.implicitly_wait(5) #对查找元素最大的超时时间,如果超过最大等待时间后,没有找到元素,则会报错:no such #elementexception
显式等待
直到传递给他的条件得到解决,才会继续,否则会报错。他会以一定频率调用该条件,直到等待超时结束
1.不仅仅针对元素查找,还支持很多条件
2.显示等待支持自定义条件
3.不满足时报错TimeoutException
wait = WebDriverWait(driver,10)#常见显示等待对象,其中包含参数(driver,timeout=10,poll_frequency=0.5) 超时时间时10s,每0.5秒去轮询
login_link=wait.until(expected_conditions.presence_of_element_located((By.LINK_TEXT,'登录')))
#expected_conditions 方法名字
#(By.LINK_TEXT,'登录')是一个元组
自定义
参考expected_conditions里面的方法
1.页面包含指定元素
def text_contains(text:str):
def _predicate(driver):
return text in driver.page_source
return _predicate
expected_conditions文件中的方法
2.自定义显示等待-点击元素成功
def click_success(locator):
def _predicate(driver):
try:
element = driver.find_element(*locator)
element.click()
return True
except:
return False
return _predicate
wait = WebDriverWait(driver,timeout=10)
wait.until(click_success((By.LINK_TEXT,'进入个人中心')))
# driver.find_element(By.LINK_TEXT,'进入个人中心').click()
sleep()
time.sleep(n)