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

Selenium获取交互式页面源码后,提取JS表格数据并导出CSV

解决方法:用Selenium提取动态生成的JS数组并导出为CSV

我太懂你的困扰了——ASPX这类交互式网站的动态数据根本不会出现在静态源码里(就是你按Ctrl+U看到的内容),因为表格数据是通过JavaScript动态计算后存在theCols和theRows数组里的。下面是完整的实现步骤和代码,帮你搞定这个问题:

核心思路

  1. 用Selenium模拟真实浏览器操作,完成下拉框选择、查询点击,确保页面完全渲染并生成目标JS数组。
  2. 通过Selenium的execute_script方法直接从浏览器的全局作用域中提取theCols和theRows变量(这是关键!静态源码里根本拿不到这些动态生成的数据)。
  3. 将提取到的表头(theCols)和行数据(theRows)转换为CSV格式导出。

完整代码示例

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

# 初始化Chrome浏览器(换成Firefox等也可以,对应改驱动就行)
driver = webdriver.Chrome()
driver.get("你的目标ASPX网站URL")

try:
    # 1. 处理下拉框选择(替换成你实际页面的下拉框定位器)
    # 先等下拉框加载出来
    dropdown = WebDriverWait(driver, 10).until(
        EC.presence_of_element_located((By.ID, "你的下拉框ID"))
    )
    select = Select(dropdown)
    # 这里可以按索引、值或可见文本选,比如选指定文本的选项
    select.select_by_visible_text("你需要的选项文本")

    # 2. 点击查询按钮(替换成你实际的查询按钮定位器)
    query_btn = WebDriverWait(driver, 10).until(
        EC.element_to_be_clickable((By.ID, "查询按钮的ID"))
    )
    query_btn.click()

    # 3. 等待目标JS数组加载完成(重中之重!确保theCols和theRows已经生成)
    WebDriverWait(driver, 15).until(
        lambda d: d.execute_script("return typeof window.theCols !== 'undefined' && typeof window.theRows !== 'undefined'")
    )
    # 保险起见再等1秒,防止数据还在后台处理
    time.sleep(1)

    # 4. 从浏览器内存中提取JS数组数据
    the_cols = driver.execute_script("return window.theCols")
    the_rows = driver.execute_script("return window.theRows")

    # 5. 导出为CSV文件
    with open("aspx_table_data.csv", "w", newline="", encoding="utf-8") as csvfile:
        writer = csv.writer(csvfile)
        # 写入表头
        writer.writerow(the_cols)
        # 写入所有行数据
        writer.writerows(the_rows)

    print("CSV文件导出成功!可以去当前目录查看结果啦")

finally:
    # 不管成功失败,最后都关闭浏览器
    driver.quit()

关键细节说明

  • 为什么Ctrl+U没用? 因为ASPX的静态源码只是初始的HTML框架,theCols和theRows是你点击查询后,浏览器通过JS动态计算生成并存在内存里的,只有通过浏览器的执行环境才能拿到这些数据。
  • 等待机制:一定要用WebDriverWait等待元素和JS变量加载完成,别用固定的time.sleep,这样代码更稳定,不会因为网络慢或者页面卡出问题。
  • 元素定位:你需要把代码里的下拉框ID、查询按钮ID替换成你实际网站的元素定位器——可以用Chrome开发者工具的元素选择器直接复制。
  • 编码问题:如果导出的CSV有乱码,把encoding参数改成gbk或者其他适合你数据的编码就行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 19:17:32