PRA-only-demo/scripts/export-last-run.js
yu e25121660d 修复点击验证误报与相似元素列表全重复等运行时问题
- 点击可信验证增加两类生效旁证: 页面跳转/新开标签页(淘宝搜索按钮),
  点击后元素整体消失(关闭登录弹窗); 此前均被误报为"目标未收到可信点击"
  并在节点超时内反复重试, 造成"点击生效却等很久还报错"
- 相似元素列表引用增加 index 序号: 动态id泛化后各卡片选择器相同,
  46 条引用全部命中第一张卡导致抓取结果全重复;
  修复 NodeList 无 indexOf 的 TypeError 被静默吞掉导致序号从未写入
- 元素定位改为两段式: 先在当前附着页查找, 找不到才跟随前台标签页,
  避免多标签环境下被无条件切到 pages[0] 导致找错页面
- 新开标签页优先复用启动残留的 about:blank 空白页, 不再堆积空标签
- AI 能力输入识别增加 hint_word 字段(此前提示词读到的是空)
- try_catch 捕获子步骤失败时记录 warn 日志, 不再静默
- Excel 落盘遇 EBUSY(文件被打开占用)时自动另存为带时间戳的文件
- 新增 similar-list.test.ts 端到端回归(46 卡片动态 id 真实浏览器验证)
- 新增 export-last-run.js: 从运行记录导出比价 Excel
2026-11-05 14:57:33 +08:00

32 lines
1.4 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

// 从运行记录的 tmp_table.json 重建比价表并导出 Excel
const ExcelJS = require("exceljs");
const fs = require("fs");
const table = JSON.parse(fs.readFileSync("C:/Users/Administrator/AppData/Roaming/rpa-studio/tmp_table.json", "utf8"));
// table[0] 是损坏的表头行(["标题"]),数据行从 index 1 开始:6 列 = 标题/价格/店铺/销量/空/AI
const dataRows = table.slice(1).filter((row) => row.length >= 4 && row[0]);
const aiText = table.map((row) => (row.length >= 6 ? row[5] : null)).find((c) => c && String(c).trim() && c !== null && String(c) !== "None") || "";
const workbook = new ExcelJS.Workbook();
const sheet = workbook.addWorksheet("比价结果");
sheet.addRow(["标题", "价格", "店铺", "销量"]);
for (const row of dataRows) {
sheet.addRow([row[0], row[1], row[2], row[3]]);
}
// AI 分析单独放一个 sheet
const aiSheet = workbook.addWorksheet("AI分析");
aiSheet.addRow(["AI 比价分析结论"]);
aiSheet.getRow(1).font = { bold: true };
aiSheet.addRow([String(aiText)]);
aiSheet.getColumn(1).width = 120;
sheet.getColumn(1).width = 60;
sheet.getColumn(2).width = 12;
sheet.getColumn(3).width = 24;
sheet.getColumn(4).width = 14;
sheet.getRow(1).font = { bold: true };
const out = "C:/Users/Administrator/Desktop/淘宝手机比价.xlsx";
workbook.xlsx.writeFile(out).then(() => {
console.log("written:", out, "dataRows:", dataRows.length, "aiLen:", String(aiText).length);
});