xianyu-monitor
闲鱼商品监控与捡漏工具。定时搜索闲鱼,发现新商品后推送通知。Use when: user wants to monitor 闲鱼/Xianyu/Goofish for specific items, set up price alerts, track second-hand goods, or find rental listings on 闲鱼. Supports keyword search, price range, text filters (exclude/include), time filter, dedup via SQLite.
DeepseekModel
官方收录技能
质量 良好 · 64
v1.0.0
获取
https://deepseekmodel.com/api/download.php?id=voltwake-xianyu-monitor-skill-md&format=skill
下载 .skill
标准格式,含 system_prompt 与 model_config,导入任意 Agent 框架即可使用
.skill 文件中 system_prompt 字段的实际内容。
name xianyu-monitor description 闲鱼商品监控与捡漏工具。定时搜索闲鱼,发现新商品后推送通知。Use when: user wants to monitor 闲鱼/Xianyu/Goofish for specific items, set up price alerts, track second-hand goods, or find rental listings on 闲鱼. Supports keyword search, price range, text filters (exclude/include), time filter, dedup via SQLite. 闲鱼监控 (xianyu-monitor) 架构 核心原理 :非 headless Chrome + CDP 搜索框输入 + DOM 被动读取 闲鱼(goofish.com)有严格的反自动化检测,本工具通过以下方式绕过: 非 headless Chrome :headless 模式会被拦截("非法访问") AppleScript 地址栏导航 :首次访问用 Cmd+L 输入 URL( page.goto() 被 baxia 拦截) CDP Input 搜索 :用 page.click(搜索框) + page.keyboard.type() + Enter 搜索(产生 isTrusted=true 事件,前端无法区分真人) 两步排序 :点击"新发布"展开下拉菜单 → 点击"最新"选项 DOM 被动读取 :从 a[class*="feeds-item-wrap"] 卡片中提取数据 登录 vs 未登录 状态 搜索结果范围 排序 未登录 只能看到 6小时以上 发布的商品 有限 已登录 可以看到 实时发布 的商品(含最近几分钟) 完整(新发布→最新) ⚠️ 强烈建议登录闲鱼账号 ,否则监控不到最新发布的商品,失去实效性。 登录方法 启动 Chrome: bash scripts/setup-chrome.sh start 在弹出的 Chrome 窗口中访问 goofish.com 用手机扫码或短信验证码登录 Cookie 保存在 ~/.chrome-debug-xianyu profile 中,约 7 天有效 过期后需重新登录(脚本会输出 COOKIE_EXPIRED 提示) 登录状态检测 脚本扫描时会自动检测登录状态: 搜索结果中有"分钟前发布"的商品 → 已登录 ✅ 搜索结果中最新的也是"6小时前发布" → 未登录或 cookie 过期 ⚠️ 前置条件 macOS (需要 AppleScript 控制 Chrome 地址栏) Chrome 非 headless 实例运行在 CDP 端口 18803(profile: ~/.chrome-debug-xianyu ) puppeteer-core 和 better-sqlite3 已安装 Chrome 需要有 辅助功能权限 (System Events keystroke 需要) 建议登录闲鱼账号 (用小号,防封号风险) 启动 Chrome bash scripts/setup-chrome.sh start # 非 headless 模式 bash scripts/setup-chrome.sh status # 检查状态 bash scripts/setup-chrome.sh stop # 停止 ⚠️ Chrome 必须以 非 headless 模式运行,headless 会被闲鱼拦截。 核心脚本: scripts/xianyu.js 添加监控任务 node scripts/xianyu.js add --keyword "搜索词" \ [--max-price 3000] [--min-price 500] \ [--filter "排除词1,排除词2" ] \ [--only "必含词1,必含词2" ] \ [--region "深圳,龙华" ] 执行扫描 node scripts/xianyu.js scan [-- id <task_id>] [--hours 3] --hours N : 只返回 N 小时内发布的商品 搜索流程:复用已有闲鱼 tab → 搜索框输入关键词 → Enter → 点击"新发布→最新" → DOM 提取 冷启动时自动用 AppleScript 导航到 goofish.com 建立 session 新商品输出在 --- NEW_ITEMS_JSON --- 和 --- END_NEW_ITEMS_JSON --- 之间 其他命令 list — 查看所有活跃任务 remove --id <N> — 停用任务 history [--id <N>] [--limit 20] — 查看发现历史 建立监控流程 启动 Chrome : bash scripts/setup-chrome.sh start 首次登录 :在 Chrome 窗口中访问 goofish.com,扫码登录 添加任务 : node scripts/xianyu.js add --keyword "iPhone 16" --max-price 5000 测试扫描 : node scripts/xianyu.js scan --hours 24 (确认能拿到最新商品) 创建 cron :设定扫描频率(如每小时),推送新商品到 Discord 指定频道 Cron 任务模板 闲鱼监控扫描任务。工作目录: /Users/chaos/.openclaw/workspace ## 步骤 1:确保 Chrome 运行 运行:bash skills/xianyu-monitor/scripts/setup-chrome.sh start ## 步骤 2:执行扫描 运行:node skills/xianyu-monitor/scripts/xianyu.js scan --hours 24 ## 步骤 3:推送结果 解析输出中 --- NEW_ITEMS_JSON --- 和 --- END_NEW_ITEMS_JSON --- 之间的 JSON 数组。 如果有新商品,逐条用 message 工具推送: - action=send, channel=discord, accountId=xiaov, target=<频道ID> - 格式: 🛒 **标题**(截取前60字) 💰 ¥价格 | 📍 地区 ⏰ 发布时间 🔗 https://www.goofish.com/item?id=商品ID 如果没有新商品,安静结束,不发消息。 🔴 完成后只回复一句确认(发现N条/无新商品),不贴原始数据 反爬要点 操作 结果 page.goto(searchURL) ❌ 被 baxia 拦截,显示登录墙 page.click(搜索框) + type + Enter ✅ 正常(CDP Input,isTrusted=true) headless Chrome ❌ "非法访问" 非 headless Chrome ✅ 正常 AppleScript 设置 tab URL ❌ 被拦截 AppleScript Cmd+L 地址栏输入 ✅ 正常(仅用于首次导航到首页) JS element.click() ⚠️ 风险(isTrusted=false,可被检测) CDP page.click() ✅ 安全(isTrusted=true,与真人点击无差别) 数据存储 SQLite: data/xianyu-monitor.db tasks 表: 监控任务配置 items 表: 已发现商品(自动去重) 故障排查 "No element found for selector: input[class =search-input]" * Chrome 可能没有闲鱼 tab,或首页加载失败 重启 Chrome 再试(第一次建立 session,第二次正常) 只能看到 6 小时前的商品 Cookie 过期或未登录 在 Chrome 窗口中重新扫码登录 搜索结果为 0 过滤条件太严格,用 scan 不带 --hours 试试 或者所有商品已经在数据库中(正常去重) Chrome 进程消失 bash scripts/setup-chrome.sh status 检查 bash scripts/setup-chrome.sh stop && bash scripts/setup-chrome.sh start 重启
Agent 识别该技能的关键词,点击任意一个即可复制。
该技能未提供触发词。
下载的 .skill 包内含以下字段。
| 字段 | 说明 |
|---|---|
| format | 格式标识(skill/v1) |
| skill_id | 技能唯一 ID |
| name | 技能名称 |
| version | 版本号 |
| description | 技能描述 |
| category | 所属分类(数组) |
| trigger_words | 触发词列表 |
| tags | 标签列表 |
| source | 来源标识 |
| source_url | 来源链接(本页地址) |
| exported_at | 导出时间(每次下载生成) |
| system_prompt | 系统提示词正文 |
| model_config | 模型参数:provider / model / temperature / max_tokens / top_p |
| examples | 示例 |
| install_guide | 各平台导入说明(Coze / Dify / Claude / 自定义框架) |