支持两种分析模式:
| 模式 | 输入 | 输出 |
|------|------|------|
| 实时爬取 | Etsy listing URL(s) | 单品报告 / 多竞品对比报告 |
| CSV 分析 | 已抓取的 Etsy CSV 数据文件 | 批量竞品分析报告(表格驱动型) |
触发条件:
etsy.com/listing/ 链接
C:\Users\Administrator\AppData\Local\Google\Chrome\Bin\chromex.exe
C:\Users\Administrator\AppData\Local\Google\Chrome\User Data
9222
C:\Users\Administrator\Downloads\
scripts/etsy_analyze.js
scripts/etsy_batch.js(2 个以上链接时使用)
template_report.html(批量分析标准模板)
用户发来的 Etsy 链接数量:
1 个 → 使用 etsy_analyze.js(单品报告)
2+ 个 → 使用 etsy_batch.js(单品报告 × N + 1 份对比总报告)
如何识别多个链接:用户可以用任何方式提供链接:
只要消息里有 2 个及以上 etsy.com/listing/ 链接,就走批量流程。
当用户提供已抓取的 Etsy CSV 数据文件时,直接读取 CSV 并生成分析报告。
CSV 文件应包含以下字段(标准 Etsy 抓取格式):
商品链接,商品ID,商品标题,商品标价,商品图片,定制选项1,定制选项2,商品描述,店铺名称,抓取时间
使用 Read 工具读取 CSV 文件路径,解析所有竞品数据。
从每条记录中提取:
使用 Write 工具生成报告,必须使用标准表格驱动型格式。
参考模板:C:\Users\Administrator\.workbuddy\skills\etsy-analyzer\template_report.html
保存到与 CSV 同目录:
<CSV文件所在目录>/Etsy竞品分析报告_<日期>.html
必须使用表格驱动型报告格式,参考 template_report.html:
<div class="summary-grid">
<div class="stat-card">
<div class="stat-num">竞品数</div>
<div class="stat-label">竞品样本数</div>
</div>
...
</div>
| 列 | 说明 |
|---|---|
| # | 序号 |
| 图片 | 商品缩略图(56x56px) |
| 商品标题 | 可点击链接 |
| 店铺 | 店铺名 |
| 基础价 | 最低标价 |
| 最高价 | 最高变体价 |
| 标题字数 | 标题字符数 |
| 风格数 | 定制选项1数量 |
| 图案数 | 定制选项2数量 |
| SKU组合 | 总变体组合数 |
| 定制类型 | badge 标签 |
每行展示:店铺名、风格/款式选项(opt-pill)、图案/内容选项、选项组合数、个性化类型
| 价格区间 | 竞品数 | 代表款式 | 特点 | 策略建议 |
| 维度 | 高频内容 | 频率 | 建议 |
选择 2-3 个典型竞品进行多维度对比
包含商品ID、店铺名、价格、SKU数、可点击链接的表格
/* 固定颜色主题 */
--primary: #C2410C (橙色)
--bg: #f4f4f4
--card-bg: #fff
--success: #22c55e (opportunity)
--warning: #f59e0b (warning)
/* 标签样式 */
.badge-bs { background: #C2410C } /* Bestseller */
.badge-new { background: #6366f1 } /* 新品/定制类型 */
.opt-pill { background: #f1f5f9 } /* 选项胶囊 */
.tag { background: #fde8de } /* 标签 */
/* 盒样式 */
.insight-box { background: #fff8f5; border-left: 3px solid #C2410C }
.opportunity { background: #f0fdf4; border-left: 3px solid #22c55e }
.warning { background: #fffbeb; border-left: 3px solid #f59e0b }
从 URL 中提取数字 ID:
https://www.etsy.com/listing/1234567890/... → listingId = 1234567890
必须使用有界面模式(非 headless),利用本地 Cookie 绕过 DataDome 反爬机制:
$chromePath = "C:\Users\Administrator\AppData\Local\Google\Chrome\Bin\chromex.exe"
$userDataDir = "C:\Users\Administrator\AppData\Local\Google\Chrome\User Data"
# 先检查端口是否已被占用(复用已有实例)
$portInUse = netstat -an | Select-String ":9222 "
if (-not $portInUse) {
Start-Process $chromePath "--remote-debugging-port=9222 --user-data-dir=`"$userDataDir`" --no-first-run <URL>"
Start-Sleep -Seconds 18 # 等待页面完全渲染(含可能的验证码)
} else {
# 端口已在使用,导航到新 URL
# 通过 CDP /json/new?<url> 打开新标签页
Start-Sleep -Seconds 5
}
> ⚠️ 等待时间至少 18 秒,确保 JS 渲染和反爬验证完成。
单品(1 个链接):
$scriptPath = "<SKILL_DIR>\scripts\etsy_analyze.js"
node $scriptPath "<etsy_url>"
批量(2+ 个链接):
$scriptPath = "<SKILL_DIR>\scripts\etsy_batch.js"
node $scriptPath "<url1>" "<url2>" "<url3>"
脚本自动完成:
http://localhost:9222/json 获取页面列表
Runtime.evaluate 获取 document.documentElement.outerHTML
)
输出文件:
C:\Users\Administrator\Downloads\etsy_report_.html
C:\Users\Administrator\Downloads\etsy_compare_.html
报告生成后,使用 preview_url 工具以 file:/// 协议展示报告:
file:///C:/Users/Administrator/Downloads/etsy_report_<listingId>.html
| 模块 | 数据字段 |
|------|---------|
| 核心指标 | 价格区间、评分、评价数、销量、收藏数 |
| 基本信息 | 商品名、店铺、发货地、上架时间、图片数量 |
| 商品变体 | 所有可选变体属性 |
| SEO 关键词 | Meta keywords 标签 |
| 图片预览 | 前 6 张商品主图 |
| 客户评论 | 近期真实评论(最多 5 条) |
| 竞品机会 | 价格/评价/运费/变体/图片维度的差异化建议 |
| 模块 | 内容 |
|------|------|
| 综合最强竞品 | 自动评分排名,突出 TOP 1 |
| 可视化图表 | 销量/评价/价格条形图 + 综合雷达图(Chart.js) |
| 详细对比表 | 所有竞品关键指标并排对比 |
| SEO 关键词对比 | 各竞品关键词横向展示 |
| 机会分析矩阵 | 每个竞品的差异化机会卡片 |
@type: Product):最可靠,优先使用
keywords、description):SEO 数据备用
CDP 连接失败:
Invoke-RestMethod http://localhost:9222/json
页面被 DataDome 拦截(只有 1-2KB HTML):
--headless)
--user-data-dir(含登录 Cookie)
HTML 抓取成功但数据为空:
/hk-en/)
CSV 字段缺失:
onerror="this.style.display='none'"
共 1 个版本