You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Selenium WebDriver等待逻辑问题:条件触发点击/刷新代码排查

Selenium代码问题分析与修复

原代码的核心问题

  1. 阻塞式等待逻辑错误:WebDriverWait.until()会一直阻塞,直到找到元素或超时抛出异常。原代码中wait_new执行后,无论create_it是否存在,wait_old要么直接超时报错,要么根本没机会执行——如果create_it不存在,wait_new先触发超时异常,代码直接终止;如果create_it存在,wait_old会继续等待submit_it,不存在就超时报错。
  2. 无效的条件判断:wait.until()成功返回的是元素对象,永远为真,if wait_new这种判断完全多余;失败则直接抛异常,根本走不到判断分支。
  3. 重复元素查找:已经通过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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 00:14:55