Python使用Selenium实现等待指定elementID或简单alert的方法咨询
完整实现代码
依赖导入
from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC from selenium.webdriver.common.by import By from selenium.common.exceptions import TimeoutException from selenium.webdriver.common.alert import Alert
核心逻辑
try: # 最多等待10秒,满足「元素出现」或「弹窗触发」任一条件即可返回 wait_result = WebDriverWait(driver, 10).until( lambda driver: driver.find_elements(By.ID, "buttonID") or EC.alert_is_present()(driver) ) # 按返回结果类型区分触发条件,执行对应操作 if isinstance(wait_result, list) and len(wait_result) > 0: # 目标按钮已出现,执行X逻辑 target_button = wait_result[0] # 示例操作:点击按钮 target_button.click() elif isinstance(wait_result, Alert): # alert弹窗已触发,执行Y逻辑 # 示例操作:获取弹窗文本并确认 alert_content = wait_result.text wait_result.accept() except TimeoutException: # 超时处理逻辑:10秒内两个条件均未触发 print("等待超时,未检测到目标按钮或alert弹窗")
关键说明
EC.alert_is_present()本身返回的是判断函数,需要传入driver参数执行才能得到判断结果,所以要写成EC.alert_is_present()(driver)的调用形式find_elements匹配不到元素时返回空列表(布尔判定为False),匹配到则返回非空列表(布尔判定为True),刚好可以和弹窗判断逻辑用or组合until的返回值就是第一个为真的条件的返回结果,通过类型判断即可直接区分触发场景,无需重复查询
内容的提问来源于stack exchange,提问作者leftdowntown
相关产品推荐
相关产品推荐

