电商 — 商品详情
商品 URL / 关键词 / SKU → 完整商品数据(名称、价格、品牌、图片、编码、库存、评分、变体)
语言
所有面向用户的流程输出(进度更新、流程提示)都使用用户语言。
目标
使用通用多层提取策略(JSON-LD → 平台特定 DOM → OG meta → microdata),从任何公开可访问的电商商品页提取完整商品信息。
前置条件
- 目标浏览器已打开并已连接
- 公开商品页无需登录
执行前检查
1. 工具就绪
如果当前会话中已确认 browser-act 可用 → 跳过本步。
通过 Skill 工具调用 browser-act 加载用法。如果出现安装或配置问题,按其指引解决后重试。
能力组成
本技能的操作边界 = 用户在自己浏览器里能手动做到的事。它只读取页面上已经展示给用户的数据,绝不绕过身份验证或访问控制。JS 代码封装在
scripts/目录下的 Python 文件中,通过eval "$(python scripts/xxx.py {params})"调用。使用 bash 工具执行。
DOM:从当前商品页提取商品数据
先导航到商品 URL,然后提取:
eval "$(python scripts/extract-product.py)"
输出示例:
{
"url": "https://www.amazon.com/dp/B09WNK39JN",
"name": "Amazon Echo Pop",
"price": 39.99,
"price_currency": "USD",
"brand": "Amazon",
"image": "https://m.media-amazon.com/images/I/61bTwy0ooPL.jpg",
"images": ["https://...jpg", "https://...jpg"],
"description": "Compact smart speaker with Alexa...",
"category": ["Electronics", "Smart Speakers"],
"sku": "B09WNK39JN",
"gtin": null,
"mpn": null,
"availability": "InStock",
"rating": 4.7,
"review_count": 103789,
"variants": [{"name": "Charcoal", "sku": "B09WNK39JN", "price": 39.99}],
"seller": "Amazon",
"identifiers": {"ASIN": "B09WNK39JN", "Best Sellers Rank": "#1 in Smart Speakers"},
"_platform": "amazon",
"_source": "json-ld"
}
组合能力:关键词或 SKU → 商品详情
当输入是关键词、ASIN/SKU 或 EAN/UPC 而非直接商品 URL 时:
步骤一 —— 按输入类型导航到搜索 URL:
| 输入类型 | 目标站点 | URL 模式 |
|-----------|-------------|-------------|
| ASIN(10 位字母数字) | Amazon | https://www.amazon.com/dp/{ASIN} |
| 关键词 | Amazon | https://www.amazon.com/s?k={keyword_urlencoded} |
| 关键词 | eBay | https://www.ebay.com/sch/i.html?_nkw={keyword_urlencoded} |
| 关键词 | Walmart | https://www.walmart.com/search?q={keyword_urlencoded} |
| 关键词 + 指定 --site | 任意站点 | https://{site}/search?q={keyword_urlencoded} |
| 关键词(未指定站点) | 跨站 | https://www.google.com/search?tbm=shop&q={keyword_urlencoded} |
| EAN / UPC / GTIN | 跨站 | https://www.google.com/search?tbm=shop&q={identifier} |
步骤二 —— 如果落到搜索/列表页(多个结果):
wait stableeval "$(python scripts/extract-listing.py --max-results 3)"—— 取前 3 条结果- 从
items[0].url中挑出最相关的商品 URL navigate {product_url}→wait stable
步骤三 —— 提取商品数据:
eval "$(python scripts/extract-product.py)"
注意:如果作为独立 Skill 安装,scripts/extract-listing.py 位于 ../ecommerce-listing/scripts/extract-listing.py;否则参考 listing 技能。
成功判据
result.name != null AND (result.price != null OR result.availability != null)
已知限制
- Amazon 反爬检测:在全新会话中直接导航到商品 URL 可能被重定向到 CAPTCHA 或机器人校验页。先从
https://www.amazon.com导航以建立会话 Cookie,然后再导航到商品页 - eBay 商品页可能需要先从
https://www.ebay.com导航;如果出现挑战,使用solve-captcha - 有些站点完全通过客户端 JavaScript 渲染商品数据;提取前务必使用
wait stable - 缺货商品或需要登录才显示价格时,price 可能为 null
- 变体数据的完整度取决于站点是否在 JSON-LD 中包含完整的变体标记
执行效率
- 批量编排:编写 bash 脚本在单个会话内串行遍历商品 URL;请求之间加 1–2 秒间隔,避免触发反爬限制
- 批量前先测试:先用 1–2 个 URL 测试,再跑完整批次
- 错误续跑:逐条保存结果;失败时从断点续跑,而不是从头开始
经验记录
路径:{working-directory}/browser-act-skill-forge-memories/ecommerce-scraper-ecommerce-product-detail.memory.md
执行前:如果该文件存在,先读它 —— 它记录了过去执行中遇到过的意外情况(例如某个策略已失效);据此调整策略顺序。
执行后:如果遇到意外情况(策略失效、页面改版、反爬升级、发现更好路径),追加一行:
{YYYY-MM-DD}: {发生了什么} → {结论}
Scan to join WeChat group