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

PowerShell调用Invoke-WebRequest解析HTML表格失效求助

问题排查与解决方法

核心原因

目标网站大概率改用JavaScript动态渲染表格内容了,而Invoke-WebRequest的ParsedHtml仅能解析页面初始加载的静态HTML,无法捕获JS动态生成的DOM元素,导致你获取到的table为空。

解决步骤

1. 用Selenium模拟浏览器抓取动态内容

Selenium可以模拟完整的浏览器加载流程,等待JS渲染完成后再提取表格。

先安装Selenium模块

Install-Module -Name Selenium -Scope CurrentUser -Force

替换后的脚本示例

Import-Module Selenium

# 需提前下载对应Chrome版本的chromedriver,填写实际路径
$driverPath = "D:\cropex\trading\chromedriver.exe"
$driver = Start-SeChrome -DriverPath $driverPath

try {
    $driver.Navigate().GoToUrl('https://www.cropex.hr/en/market-data/day-ahead-market/day-ahead-market-results.html')
    # 等待JS渲染表格,可根据实际加载速度调整等待时长
    Start-Sleep -Seconds 5
    
    $table = $driver.FindElementsByTagName('table')[0]
    $table.GetAttribute('outerHTML') | Set-Content -Path 'D:\cropex\trading\table.html' -Encoding UTF8
}
finally {
    $driver.Quit()
}

2. 备选方案:直接调用数据API(更高效)

打开浏览器开发者工具(F12)切换到Network标签,刷新页面后查找加载表格数据的API请求(通常是XHR/Fetch类型),直接请求API获取数据:

# 替换为实际找到的API地址
$apiUrl = "目标API地址"
$data = Invoke-RestMethod -Uri $apiUrl

# 根据API返回的JSON结构构建HTML表格(示例)
$htmlTable = "<table><thead><tr><th>列名1</th><th>列名2</th></tr></thead><tbody>"
foreach ($item in $data) {
    $htmlTable += "<tr><td>$($item.Field1)</td><td>$($item.Field2)</td></tr>"
}
$htmlTable += "</tbody></table>"

$htmlTable | Set-Content -Path 'D:\cropex\trading\table.html' -Encoding UTF8

3. 验证静态HTML是否包含表格

先导出页面初始静态HTML,确认表格是否仅在动态渲染后出现:

$url = 'https://www.cropex.hr/en/market-data/day-ahead-market/day-ahead-market-results.html'
$page = Invoke-WebRequest -Uri $url
$page.Content | Set-Content -Path 'D:\cropex\trading\static-page.html' -Encoding UTF8

打开导出的文件,如果看不到表格,就坐实了动态加载的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 19:55:56