[selenium]等待
前言
当网络不稳定或应用页面加载有问题,可以设置等待,避免网络问题导致找不到元素等异常。
隐式等待
隐式等待设置的是最长等待时间,如果在规定时间内网页加载完成,则执行下一步,否则一直等到时间结束。
隐式等待在driver的整个生命周期都有效,初始化的时候设置一次即可。
# 隐式等待10秒
driver.implicitly_wait(10)
显式等待
from selenium.webdriver.support.ui import WebDriverWait
# 使用js的方式等待页面加载
# 最长显式等待10秒
WebDriverWait(driver, 10).until(lambda driver: driver.execute_script('return document.readyState') == 'complete')
print("页面加载完成")
driver.find_element(by=By.CSS_SELECTOR, value="...").click()
# 使用期望条件
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
WebDriverWait(driver,timeout).until(EC.presence_of_element_located((By.ID, "query")))
EC期望条件
条件 | 说明 |
---|---|
title_is | title是否已出现 |
title_contains | title中是否包含某些字符 |
presence_of_element_located | 元素是否已被加载到dom树,并不代表元素一定可见 |
visibility_of_element_lcoated | 元素是否已被加载到dom树且可见 |
visibility_of | 元素是否可见 |
presence_of_all_elements_located | 是否有至少一个元素存在于dom树 |
visibility_of_any_elements_located | 是否至少有一个元素可见 |
text_to_be_present_in_element | 元素是否包含预期字符 |
text_to_be_present_in_element_value | 元素的属性值是否包含预期字符 |
frame_to_be_available_and_switch_to_it | frame是否可切换进去 |
invisibility_of_element_located | 元素是否存在于dom或不可见 |
element_to_be_clickable | 元素是否可见且可点击 |
staleness_of | 等待元素从dom中移除 |
element_selection_state_to_be | 元素选中状态是否符合预期 |
element_located_selection_state_to_be | 元素选中状态是否符合预期 |
alert_is_present | 页面似乎存在alert |
本文来自博客园,作者:花酒锄作田,转载请注明原文链接:https://www.cnblogs.com/XY-Heruo/p/16443480.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 一文读懂知识蒸馏
· 终于写完轮子一部分:tcp代理 了,记录一下