电力交易平台数据批量获取
> 授权边界(使用前提):本技能仅用于使用人员已获得平台授权、有权正常查看和导出的数据。所有请求通过用户自己的已登录会话发起,请求节奏与停止规则遵循平台要求;不用于访问未授权数据,不规避验证码、权限校验或其他平台安全机制。详细规则见 references/safety.md。
从用户已登录、且用户明确拥有访问权限的电力交易平台(Chrome 开启 9222 调试端口)批量获取披露数据。核心思路是:不依赖”点击导出并处理保存弹窗”,而是在正常页面访问过程中识别查询/导出 API,再按用户指定日期请求文件流写盘。
> 日期原则:本技能不内置固定取数日期。 每次执行都必须由实际使用人员显式提供 --from 与 --to。技能不得擅自扩大日期范围,也不得因为“历史补数”而自动抓取未指定日期。
本技能不内置任何站点账号、Cookie 或固定站点配置。面对新平台,先用通用探测器产出站点配置草稿;之后同平台可复用配置,但每次取数日期仍由用户单独指定。
工作流(分阶段自动化)
一条命令驱动整条流程,特征是:范围人工指定,过程自动执行,结果自动校验。 run.mjs 编排器串联探测、取数与校验三个阶段;discover / fetch-batch / verify 仍可单独使用。
阶段一(新平台,自动):探测 → 生成配置 → 自检
# 日期由使用人员显式指定;流程只自动化过程,不扩大范围
node scripts/run.mjs --site "https://<平台域名>/..." --keywords "节点,出清" --from 2026-09-01 --to 2026-09-03 --out <输出目录>
自动完成:遍历菜单树识别数据页 → 点击一次"查询"捕获 API → 从查询 API 推导少量导出候选并低频验证 → 生成站点配置 → 按使用人员指定日期的前 1~3 天小批量试取并自检 → 回填行数阈值 → 写入待确认配置后退出(退出码 3)。
探测只用于识别用户正常页面操作背后的数据接口;遇到 401/403/429、登录页、验证码页或其他访问限制时应停止,不继续探测或尝试绕过。
阶段二(唯一人工环节):确认配置
人工检查自检结果:数据集身份是否正确(不同数据集单日价格可能恰好全同,必要时换日期复核)、文件前缀与阈值是否合理。确认通过后才放行全量。
阶段三(确认后,自动):全量取数与校验
node scripts/run.mjs --config <站点配置.json> --from 2026-09-01 --to 2026-09-30 --out <输出目录> --confirm
自动按 safety.maxDaysPerRun 分段执行批量取数并校验,输出执行报告。此后同平台补数据用同一命令(去掉 --confirm):
- 已存在文件自动跳过,支持断点续跑;
- 单次分段默认 31 天(可在站点配置 safety 中调整);
- 401/403 停止、429 尊重 Retry-After、5xx 有限退避等规则全程一致。
页面结构特殊(非 Element UI、iframe 跨域、导出需轮询文件 ID)导致自动探测覆盖不到时,按 references/playbook.md 手动排查,产出同样格式的站点配置后,从阶段二(确认)继续。
安全与平台保护约束
详细规则见 references/safety.md。核心要求:
- 权限边界:只访问用户本来就有权限查看/导出的数据,不绕过登录、验证码、权限、接口签名或其他访问控制。
- 用户指定日期:必须显式提供
--from、--to;不得擅自扩大日期范围。 - 低频串行:默认串行请求,基础间隔 + 随机抖动,避免形成突发负载。
- 尊重限流:遇到 HTTP 429 时尊重
Retry-After,仅做有限次数退避重试;连续限流后停止。 - 鉴权异常立即停止:401/403、登录页、验证码页、异常重定向出现时,不连续重试,不尝试规避风控,提示用户检查登录状态或平台规则。
- 服务端异常有限重试:5xx 使用指数退避并设置最大重试次数。
- 单次任务范围限制:默认限制单次处理天数,长时间范围应拆分为多个任务,降低平台压力并方便审计。
- Cookie 仅内存使用:不得打印、写盘、写入站点配置或外传。
- 只读:只查询和下载,不执行发布、提交、修改、删除等写操作。
- 审计日志:只记录日期、状态码、耗时、文件大小等非敏感信息,不记录 Cookie、Token、完整响应内容。
取数模式(配置里的 mode 字段)
| mode | 原理 | 适用 |
|---|---|---|
page-fetch |
在已登录页面上下文中调用导出 API → base64 回传 → 本地写盘 | 秒级返回的小文件(通常 <2MB) |
direct |
从已登录 Chrome 会话读取当前域 Cookie(仅内存)→ Node 直接 POST → 流式写盘 | 大文件、慢接口、后台标签页容易失效的场景 |
模式选择是为了稳定性,不用于规避平台访问控制。若任一模式触发鉴权或限流异常,应停止并检查平台授权与访问策略,而不是切换模式继续试探。