CDP Bridge Skill
强制规则
- 严格按照 SOP 顺序执行,不可跳步
- 执行中遇到任何错误,立即中断,输出问题描述 + 可行解决方案,不继续执行
- 数据提取与保存使用
scripts/cdp-client.js- 所有结果文件输出到当前工作目录(
{cwd})- 禁止使用 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 扩展
- 安装 CDP Bridge 扩展(如未安装):
- Chrome 网上应用店:https://chromewebstore.google.com/detail/cdp-bridge/nebfobgfljofcokgognlfkbnfmmdaccm
- 点击"添加到 Chrome"
- 打开 Chrome →
chrome://extensions - 确认
CDP Bridge扩展已加载且处于启用状态 - 点击扩展图标,确认显示绿色指示灯 + "已连接"
❌ 未连接 → 检查 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-listingid以2500开头的为广告推广位,自动过滤 - 结果序列化:
eval代码必须用JSON.stringify(...)包裹,扩展不支持直接返回对象数组 - 代码格式:
eval中的 JS 代码必须单行(扩展不支持多行代码)
错误处理
| 错误 | 原因 | 方案 |
|:-----|:-----|:-----|
| WebSocket 连接失败 | 服务端未启动 | node server.js start |
| 命令超时 | 页面加载慢或无响应 | 检查页面是否正常加载 |
| 扩展未连接 | 扩展未加载或 SW 休眠 | 检查 chrome://extensions 中扩展状态 |
| 返回结果为空 | 选择器不匹配 | 确认页面选择器是否正确 |
注意事项
- 服务端保持后台运行:
server.js start后守护进程方式运行,关闭终端不影响。一般不需要手动关闭 - 扩展自动连接:扩展会定期探测服务端,在线后自动连接
- 登录态复用:操作的是当前 Chrome 窗口,eBay 登录态自动可用
- 配置确认:确认
chrome://extensions中扩展已启用,图标显示绿色
微信扫一扫