Selenium WebDriver等待逻辑问题:条件触发点击/刷新代码排查
Selenium代码问题分析与修复
原代码的核心问题
- 阻塞式等待逻辑错误:
WebDriverWait.until()会一直阻塞,直到找到元素或超时抛出异常。原代码中wait_new执行后,无论create_it是否存在,wait_old要么直接超时报错,要么根本没机会执行——如果create_it不存在,wait_new先触发超时异常,代码直接终止;如果create_it存在,wait_old会继续等待submit_it,不存在就超时报错。 - 无效的条件判断:
wait.until()成功返回的是元素对象,永远为真,if wait_new这种判断完全多余;失败则直接抛异常,根本走不到判断分支。 - 重复元素查找:已经通过
wait_new拿到元素,没必要再次调用driver.find_element。
修正后的代码
from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC from selenium.webdriver.common.by import By import time wait = WebDriverWait(driver, 5) try: # 等待5秒,直到目标点击元素出现 create_btn = wait.until(EC.presence_of_element_located((By.NAME, 'create_it'))) time.sleep(1) create_btn.click() time.sleep(2) except: # 未找到点击元素时,检查刷新触发元素 try: wait.until(EC.presence_of_element_located((By.NAME, 'submit_it'))) time.sleep(1) driver.refresh() time.sleep(2) except: # 两个元素都未找到的兜底处理,可按需调整 print("未检测到目标元素")
修正说明
- 用
try-except捕获超时异常,避免代码直接崩溃,实现分支逻辑 - 使用官方推荐的
expected_conditions等待方法,可读性和稳定性更强 - 直接复用等待获取的元素,减少冗余操作
- 优先尝试等待点击元素,失败后再执行刷新逻辑,完全匹配需求
内容的提问来源于stack exchange,提问作者Daniel
相关产品推荐
相关产品推荐

