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

使用Selenium EC等待元素aria-busy属性出现报超时异常如何解决?

基于aria-busy属性的Selenium AJAX加载等待实现

问题原因

  • 等待逻辑与需求不匹配:你当前使用的presence_of_element_located是等待aria-busy="true"的元素出现,也就是等待加载启动,但你的最终需求是等待加载完成(aria-busy属性消失)。
  • 轮询间隔不匹配:WebDriverWait默认轮询间隔为0.5秒,而你的测试显示aria-busy="true"的状态仅持续约0.1秒,默认轮询间隔过长会直接错过该状态窗口,因此触发超时异常。

解决方案

方案1:直接等待加载完成(推荐,适用于绝大多数场景)

直接判断目标元素的aria-busy属性是否不为true即可,无需额外检测加载启动状态:

from selenium.webdriver.support import expected_conditions as EC

# 等待表格加载完成:aria-busy属性不等于true
WebDriverWait(self.driver, 10).until(
    lambda driver: driver.find_element(By.ID, "gridpoOverview").get_attribute("aria-busy") != "true"
)

方案2:两段式等待(适用加载启动有延迟的场景)

如果点击搜索后存在短时间的初始未加载状态(初始aria-busy为None),需要先确认加载已启动再等待加载结束,可调低轮询间隔捕获短暂的aria-busy="true"状态:

# 1. 调低轮询间隔到0.01秒,等待加载启动(aria-busy=true)
WebDriverWait(self.driver, 10, poll_frequency=0.01).until(
    EC.presence_of_element_located((By.XPATH, '//div[@id="gridpoOverview" and @aria-busy="true"]'))
)

# 2. 等待加载完成
WebDriverWait(self.driver, 10).until(
    lambda driver: driver.find_element(By.ID, "gridpoOverview").get_attribute("aria-busy") != "true"
)

内容的提问来源于stack exchange,提问作者Ralk

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 11:15:00