Python抓取Ajax动态表格 如何通过aria-busy属性判断加载完成
实现方案
你可以通过Selenium的显式等待能力,分两步校验表格加载状态,完全规避固定等待的不稳定问题:
依赖导入
首先确认你已导入显式等待所需模块:
from selenium.webdriver.support.ui import WebDriverWait from selenium.common.exceptions import TimeoutException
核心等待逻辑
点击搜索按钮后,先校验表格进入加载状态,再校验加载完成:
# 点击搜索按钮 self.Chromium.find_element(By.ID, 'button-1511').click() try: # 第一步:等待表格进入加载状态(最多等待3秒,避免点击未触发加载的异常场景) WebDriverWait(self.Chromium, 3, poll_frequency=0.05).until( lambda driver: driver.find_element(By.ID, "gridpoOverview").get_attribute("aria-busy") == "true" ) # 第二步:等待表格加载完成(最多等待10秒,可根据实际接口响应时长调整超时时间) WebDriverWait(self.Chromium, 10, poll_frequency=0.05).until( lambda driver: driver.find_element(By.ID, "gridpoOverview").get_attribute("aria-busy") != "true" ) except TimeoutException: # 可自定义超时后的异常处理逻辑,比如重试、抛错提示 print("表格加载超时") # 此处即可执行后续的表格数据抓取逻辑
逻辑说明
poll_frequency参数为轮询检查属性的间隔,这里设置为0.05秒和你之前测试的间隔一致,也可以根据需求调整- 第一步的校验可以避免点击失效、加载未触发时,第二步直接判断为加载完成的边界问题
- 如果你的场景不需要严格校验是否进入过加载状态,也可以直接省略第一步,只保留第二步的等待逻辑
内容的提问来源于stack exchange,提问作者Ralk
相关产品推荐
相关产品推荐

