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

PowerBI政府版仪表盘表格爬取仅获20行,求完整解决代码

解决PowerBI政府版表格滚动加载爬取问题

问题分析

PowerBI仪表盘的表格采用虚拟滚动渲染机制,仅加载当前可见区域的行,未滚动到的行不会被DOM渲染,因此直接获取只能得到初始可见的20行。原代码仅执行一次滚动,无法触发后续行的加载。

完整解决代码

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
import time

url = "https://app.powerbigov.us/view?r=eyJrIjoiZDQxYTM0MDMtMGQ2Mi00ZTRkLThmNzQtNTYyYjBhNjhiMTQyIiwidCI6IjUwNzZjM2QxLTM4MDItNGI5Zi1iMzZhLWUwYTQxYmQ2NDJhNyJ9"

driver = webdriver.Chrome()
driver.get(url)

# 等待页面中两个表格全部加载完成
WebDriverWait(driver, 30).until(EC.presence_of_all_elements_located((By.XPATH, "//div[@role='grid']")))
tables = driver.find_elements(By.XPATH, "//div[@role='grid']")

for table_index, table in enumerate(tables, 1):
    print(f"=== 处理第 {table_index} 个表格 ===")
    
    # 循环滚动加载所有行,直到行数不再增加
    previous_row_count = 0
    current_row_count = len(table.find_elements(By.XPATH, ".//div[@role='row']"))
    
    while current_row_count > previous_row_count:
        previous_row_count = current_row_count
        
        # 仅滚动当前表格到最底部,避免滚动整个页面
        driver.execute_script("arguments[0].scrollTop = arguments[0].scrollHeight;", table)
        
        # 等待PowerBI渲染新行,可根据网络情况调整等待时长
        time.sleep(2)
        
        # 更新当前表格的行数
        current_row_count = len(table.find_elements(By.XPATH, ".//div[@role='row']"))
    
    # 提取并打印所有行数据
    rows = table.find_elements(By.XPATH, ".//div[@role='row']")
    print(f"第 {table_index} 个表格共获取到 {len(rows)} 行数据")
    
    for row in rows:
        try:
            cells = row.find_elements(By.XPATH, ".//div[@role='gridcell' and not(@class='prefix-cell')]")
            row_content = " | ".join([cell.text.strip() for cell in cells if cell.text.strip()])
            print(row_content)
        except Exception as e:
            print(f"行数据提取失败: {str(e)}")

driver.quit()

核心方案说明

  1. 多表格定位:通过presence_of_all_elements_located等待页面中两个目标表格全部加载,分别处理每个表格的滚动逻辑
  2. 循环滚动触发加载:通过对比滚动前后的行数,持续滚动表格到底部,直到行数不再变化(确认所有行已渲染)
  3. 精准表格滚动:使用execute_script直接操作表格元素的scrollTop属性,确保滚动范围仅局限于目标表格,而非整个页面
  4. 加载等待机制:每次滚动后添加短暂等待,给PowerBI足够时间完成新行的DOM渲染

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 07:53:25