如何使用PowerShell获取指定太阳能电站网页的输出功率数值
实现思路与可行方案
你之前用静态请求拿不到数据的核心原因是该页面的运行数据为前端异步渲染,Invoke-WebRequest默认只能拿到初始静态HTML,不会执行页面JS加载动态数据。可以按以下优先级选择方案:
方案1:直接调用后端数据接口(优先推荐)
这是资源消耗最低、最稳定的方案:
- 打开浏览器访问目标页面,按
F12启动开发者工具,切换到「网络」面板,筛选XHR/ Fetch类型的请求 - 刷新页面后逐一查看请求的响应内容,找到返回输出功率数值的API接口
- 直接通过PowerShell请求该接口解析数据,示例代码参考:
# 替换为你抓到的实际接口地址、请求头参数 $header = @{ "User-Agent" = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36" } $response = Invoke-RestMethod -Uri "你抓到的实际API地址" -Headers $header -Method Get # 按接口返回的JSON结构提取功率值,此处为示例,需根据实际结构调整 $currentPower = $response.data.power
方案2:使用无头浏览器获取渲染后页面
如果接口有加密、鉴权难以直接调用,可以用无头浏览器模拟正常访问,等待页面渲染完成后再提取元素:
- 先安装Playwright PowerShell模块:
Install-Module -Name Playwright,执行playwright install chromium安装依赖 - 示例代码参考:
Import-Module Playwright $playwright = New-Object Playwright.Playwright $browser = $playwright.Chromium.LaunchAsync($true).Result # 无头模式启动 $page = $browser.NewPageAsync().Result $page.GotoAsync("http://www.solar-cybro.com/p/alpod-plant/540/").Wait() # 等待功率元素加载完成,替换为实际元素的选择器(可通过开发者工具右键元素复制选择器) $powerElement = $page.WaitForSelectorAsync("你要提取的元素的CSS选择器").Result $currentPower = $powerElement.InnerTextAsync().Result -replace "[^0-9.]", "" # 提取数值部分 $browser.CloseAsync().Wait()
后续告警逻辑实现
- 功率判断:配置白天判定时间段(比如早7点到晚7点,也可以调用本地日出日落接口动态适配),如果时间段内
$currentPower低于阈值(比如0或者最低发电功率)则触发告警 - 邮件发送:使用
Send-MailMessage命令配置你的发件邮箱SMTP参数发送告警邮件,示例:
Send-MailMessage -From "告警邮箱<alarm@xxx.com>" -To "收件人<admin@xxx.com>" -Subject "太阳能电站功率异常告警" -Body "当前时间电站输出功率低于阈值,实际功率:$currentPower W" -SmtpServer "smtp.xxx.com" -Port 587 -UseSsl -Credential (Get-Credential)
- 定时执行:在Windows任务计划程序中新建任务,设置触发器为每小时执行一次,操作设置为启动
powershell.exe -ExecutionPolicy Bypass -File "你的脚本完整路径.ps1"
内容的提问来源于stack exchange,提问作者Miha Žitko
相关产品推荐
相关产品推荐

