taobao-review-export
功能
给一个淘宝或天猫商品详情页链接,自动完成:打开商品页 → 触发「用户评价」抽屉 → 滚动加载评价列表 → 提取每条评价的 8 个字段 → 导出为本地 Markdown 表格。用于选品调研、竞品差评分析、爆款分析等场景,默认采集 20 条公开评价。
前置条件
- Chrome 已打开,且浏览器扩展已启用、relay 服务已启动(HTTP API:
http://127.0.0.1:3459)。skill 启动时会探测/api/status的extensionConnected,未连接会直接报错。 - Chrome 里已登录淘宝。本 skill 只使用你当前的登录态,未登录时页面会跳登录页,skill 会明确报错并提示你登录后重试。
- 失败归因需要调用 LLM 子会话,因此本地 pipeline 服务(
:3460)需在运行中。该服务不可用时,主流程不受影响,只有失败提示会退化成内置的固定文案。
使用方式
node skill.mjs <input.json>
input.json 字段:
| 字段 | 必填 | 说明 |
|---|---|---|
| productUrl | 是 | 淘宝/天猫商品详情页链接,形如 https://item.taobao.com/item.htm?id={itemId} 或 https://detail.tmall.com/item.htm?id={itemId}。带 id 参数即可,不需要签名/加密参数 |
| count | 否 | 采集目标条数,默认 20。达到即停 |
| output_dir | 否 | 输出目录(绝对路径),默认当前工作目录 |
| output_files | 否 | { "result": "res.json", "data": "data.md" },可覆盖结果文件名 |
| entry_text | 否 | 「查看全部评价」入口文案覆盖项,默认 查看全部评价。淘宝改文案时用它兜底,无需改代码 |
示例:
{
"productUrl": "https://detail.tmall.com/item.htm?id=603182978744",
"count": 20,
"output_dir": "/abs/path/to/out"
}
输出
写到 output_dir:
reviews.md—— 主产物,Markdown 表格,列为:序号 | 用户名 | 日期 | 已购SKU | 正文 | 图片数 | 商家回复 | 追评。已购SKU/图片数/商家回复/追评 有则填、无则留空;正文里的|会被转义、换行替换为空格,保证表格不被撑破。未达count但不少于 5 条时,文件首行为<!-- partial -->并附一行原因说明。data.md—— 与reviews.md内容相同(平台约定的数据文件)。res.json—— 精简元信息:status(success/partial/failed)、total、stop_reason、summary、失败时的error与hint。
stdout 只输出一行 JSON 摘要:{"status":...,"summary":...,"output_dir":...}。
行为说明
- 真实鼠标点击:触发评价抽屉的点击走扩展内部的
Input.dispatchMouseEvent(真实鼠标事件)。页面用el.click()之类的合成事件会被 React 的isTrusted检查无视,所以本 skill 一律用真实鼠标点击。 - 滚动加载:抽屉初始只渲染 20 条,滚动内部列表容器后会再加载 20 条(实测 20 → 40 → 60 递增)。
count > 20时会自动滚动补齐,滚动间隔 ≥2s 以避免触发淘宝访问限制。 - 数据提取:全部由
page.eval直接从 DOM 提取结构化 JSON,选择器一律用 class 前缀匹配(hash 后缀随版本变化),并把作用域限定在抽屉容器内——商品页左栏的预览评价卡片 class 相同,不限定会混入重复且缺字段的行。 - 去重:按
用户名 + 日期 + 已购SKU + 正文前20字去重,抵御滚动加载时同一卡片重复出现。 - 失败归因:只有在失败路径(找不到评价入口 / 抽屉打不开 / 完整评价不足 5 条)才会调用一次 LLM 子会话,把页面标题、URL、正文片段等现场信息交给它判断原因,产出面向普通用户的中文提示;成功路径零子会话。
Scan to join WeChat group