Back to skills
extension
Category: Data & AnalyticsNo API key required

cdp-ebay-research-skill

CDP Bridge 自动化工具。通过 Chrome 扩展 + WebSocket 直接控制真实浏览器,复用 eBay 登录态,绕过反爬检测。

personAuthor: user_f4ecf047hubcommunity

CDP Bridge Skill

强制规则

  1. 严格按照 SOP 顺序执行,不可跳步
  2. 执行中遇到任何错误,立即中断,输出问题描述 + 可行解决方案,不继续执行
  3. 数据提取与保存使用 scripts/cdp-client.js
  4. 所有结果文件输出到当前工作目录({cwd}
  5. 禁止使用 agent-browser、WebFetch、Python requests 等方式提取数据

架构

cdp-client.js ──WS──→ server.js(后台)──WS──→ CDP Bridge 扩展 ──→ 真实 Chrome

通过 Chrome 扩展的 chrome.debugger API 直接控制真实浏览器标签页,复用已有 eBay 登录态,所有操作在用户当前 Chrome 窗口中执行。


入参

| 变量 | 含义 | |:-----|:-----| | {cwd} | 当前工作目录(由 agent 平台提供) | | {skill_path} | Skill 所在路径(由 agent 平台提供) |


文件结构

{skill_path}/
├── SKILL.md
└── scripts/
    ├── package.json
    ├── server.js        # WS 服务端(后台运行)
    ├── cdp-client.js    # 调研脚本发送器
    └── gen-report.js    # HTML 报表生成器

初始化 SOP(仅首次使用)

初始化清单

逐项完成,每项完成后标记 ✅。

[ ] I-1 安装依赖

cd {skill_path}\scripts
npm install

✅ 验证:node cdp-client.js --help 显示使用说明。

[ ] I-2 启动 WS 服务端

cd {skill_path}\scripts
node server.js start

✅ 验证:输出 CDP Bridge 服务端已启动 (PID: ...)。 ❌ 失败 → 端口 18765 被占用,node server.js stop 后重试。

管理命令:

node server.js status     # 检查运行状态
node server.js stop       # 停止服务端
node server.js restart    # 重启服务端

[ ] I-3 安装并检查 Chrome 扩展

  1. 安装 CDP Bridge 扩展(如未安装):
    • Chrome 网上应用店:https://chromewebstore.google.com/detail/cdp-bridge/nebfobgfljofcokgognlfkbnfmmdaccm
    • 点击"添加到 Chrome"
  2. 打开 Chrome → chrome://extensions
  3. 确认 CDP Bridge 扩展已加载且处于启用状态
  4. 点击扩展图标,确认显示绿色指示灯 + "已连接"

❌ 未连接 → 检查 server.js 是否已启动

[ ] I-4 验证初始化

cd {cwd}
node {skill_path}/scripts/cdp-client.js goto "https://www.ebay.com"

✅ 验证:输出 TITLE: ... | eBay ❌ 失败 → 检查服务端是否运行、扩展是否已加载


自动化 SOP(每次使用)

步骤 G-1:确认服务端和扩展正常

cd {skill_path}\scripts
node server.js status

检查 Chrome 扩展图标是否为绿色(已连接)。

步骤 G-2:搜索并提取商品(一键)

使用 search 命令一步完成搜索 + 数据提取。

cd {cwd}
node {skill_path}/scripts/cdp-client.js search "{关键词}" "{输出文件名}"

不指定输出文件时,自动生成 ebay-{关键词}-{时间戳}.json。 指定输出文件时,也会自动在文件名中追加时间戳,例如 ebay-tires-225-65-r17-20260624_090500.json,避免多次搜索覆盖结果。

输出格式:

搜索: headlight
共 240 个商品,正在分批提取...
........
COUNT: 240
FILE: {cwd}/ebay-headlight-2026-06-23_103000.json

输出字段: | 字段 | 说明 | 示例 | |:-----|:-----|:-----| | title | 商品标题 | For MINI Cooper R50 R52 R53 Headlights | | price | 原始价格文本 | $569.00 | | price_value | 纯数值价格 | 569 | | currency | 币种代码 | USD | | link | 商品链接(已去追踪参数) | https://www.ebay.com/itm/388853984999 | | image | 图片 URL | https://i.ebayimg.com/...webp | | shop | 店铺名 | archaicautolights |

步骤 G-3:生成可视化 HTML 报表

使用 gen-report.js 将提取的 JSON 数据生成为静态 HTML 报表(数据全内嵌,可直接双击打开)。

cd {cwd}
node {skill_path}/scripts/gen-report.js <输入JSON> [输出HTML]
  • <输入JSON> — 必需,步骤 G-2 输出的 JSON 文件路径
  • [输出HTML] — 可选,默认将 .json 替换为 -report.html

示例:

node {skill_path}/scripts/gen-report.js ebay-tires-225-65-r17.json

输出格式:

报表已生成: ebay-tires-225-65-r17-report.html (88095 bytes)

生成报表包含以下内容: | 模块 | 说明 | |:-----|:-----| | 统计摘要 | 商品总数、最低/高/平均价格、店铺数 | | 价格分布图 | 柱状图展示各价格区间的商品数量 | | 热门店铺 Top 15 | 横向柱状图展示商品最多的店铺 | | 套装数量占比 | 饼图展示 1条/2条/4条装比例 | | 价格 Top 20 | 价格最高的 20 件商品排序 | | 数据表格 | 支持搜索、按数量筛选、按价格/标题排序、分页浏览 |

✅ 验证:生成的 .html 文件可直接双击用浏览器打开查看。

步骤 G-4:手动提取商品数据(备选)

如需自定义提取逻辑,可先 goto 到页面,再 eval 提取:

cd {cwd}
node {skill_path}/scripts/cdp-client.js goto "https://www.ebay.com/sch/i.html?_nkw={关键词}&_ipg=240"
node {skill_path}/scripts/cdp-client.js eval "JSON.stringify(Array.from(document.querySelectorAll('li.s-card[data-listingid]')).filter(item => !item.dataset.listingid.startsWith('2500')).map(item => ({ title: (item.querySelector('.s-card__title')?.textContent?.trim()||''), price: (item.querySelector('.s-card__price')?.textContent?.trim()||''), link: (item.querySelector('a.s-card__link')?.href||'').split('?')[0], image: item.querySelector('img.s-card__image')?.src||'' })).filter(i=>i.title&&i.price))"

注意事项

提取逻辑说明

  • 商品容器:li.s-card[data-listingid]
  • 广告过滤:data-listingid2500 开头的为广告推广位,自动过滤
  • 结果序列化:eval 代码必须用 JSON.stringify(...) 包裹,扩展不支持直接返回对象数组
  • 代码格式:eval 中的 JS 代码必须单行(扩展不支持多行代码)

错误处理

| 错误 | 原因 | 方案 | |:-----|:-----|:-----| | WebSocket 连接失败 | 服务端未启动 | node server.js start | | 命令超时 | 页面加载慢或无响应 | 检查页面是否正常加载 | | 扩展未连接 | 扩展未加载或 SW 休眠 | 检查 chrome://extensions 中扩展状态 | | 返回结果为空 | 选择器不匹配 | 确认页面选择器是否正确 |


注意事项

  1. 服务端保持后台运行server.js start 后守护进程方式运行,关闭终端不影响。一般不需要手动关闭
  2. 扩展自动连接:扩展会定期探测服务端,在线后自动连接
  3. 登录态复用:操作的是当前 Chrome 窗口,eBay 登录态自动可用
  4. 配置确认:确认 chrome://extensions 中扩展已启用,图标显示绿色