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

Selenium获取表格行仅返回前70行的原因及解决方法

解决Selenium仅能抓取表格前70行数据的问题

这种情况几乎都是表格采用了懒加载/滚动加载机制——只有行元素进入浏览器可视区域后才会被渲染到DOM里,超出范围的行暂时不会加载,所以find_elements只能抓到已经渲染的前70行。调整缩放比例没用,说明问题不在可视区域高度,而是网站本身的加载逻辑。

下面是具体的解决思路和代码:


方法1:滚动表格容器触发全部行加载

直接滚动表格的专属滚动容器(别滚整个页面,避免干扰其他元素),循环执行直到获取的行数不再增加:

# 先定位表格的滚动父容器(需要替换成你页面中实际的滚动容器XPATH)
scroll_container = driver.find_element(By.XPATH, "替换为表格滚动容器的XPATH")
previous_count = 0

while True:
    # 获取当前已加载的行
    grid_rows = driver.find_elements(By.XPATH, "/html/body/div[1]/div[3]/div/div[2]/div/div/div[2]/div[1]/div[2]/div[1]/div[2]/div[1]/div/div[3]/div/div[2]/div/div/div[2]/div[1]/div[3]/div[1]/div[2]/div[1]/div/div[3]/ptcs-tab-set/ptcs-mb-container/div/div[1]/div[1]/div[1]/div[1]/div[1]/div/div[3]/div[2]/div[2]/table/tbody/tr")
    current_count = len(grid_rows)
    
    if current_count == previous_count:
        # 行数不再变化,说明所有行都加载完了
        break
    
    previous_count = current_count
    # 滚动到容器底部触发加载
    driver.execute_script("arguments[0].scrollTop = arguments[0].scrollHeight", scroll_container)
    time.sleep(2)  # 等待加载,根据网站速度调整时长

print(f"最终获取到{len(grid_rows)}行数据")

方法2:替换脆弱的绝对XPATH

你现在用的是绝对XPATH,页面结构稍微变动就会失效,建议改成相对路径,比如通过表格的唯一标识定位:

# 假设表格有唯一class,比如class="data-grid-table"
grid_rows = driver.find_elements(By.CSS_SELECTOR, ".data-grid-table tbody tr")

或者通过表格的标题、属性等特征定位,稳定性会高很多。

方法3:检查是否有分页/加载更多按钮

部分表格不会滚动加载,而是用分页或「加载更多」按钮控制数据展示,这种情况需要模拟点击按钮,直到所有数据加载完成。


额外优化提示:

  • 别依赖固定的time.sleep(),改用WebDriverWait等待元素加载,脚本更稳定:
    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.support import expected_conditions as EC
    
    # 等待行元素加载完成
    WebDriverWait(driver, 10).until(EC.presence_of_all_elements_located((By.XPATH, "你的行元素XPATH")))
    
  • 优先滚动表格自身的滚动容器,不要直接滚整个页面,防止影响其他元素的正常加载。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 21:40:15