🎁 Get the FREE AI Skills Starter GuideSubscribe →
BytesAgainBytesAgain
🦀 ClawHub

淘宝自动挑货

by @greenhandtan

淘宝浏览器自动化,包括会话持久化、登录、商品搜索、多维度筛选(好评率/价格/销量/包邮/天猫)、SKU规格匹配、加入购物车、验证码自动求解以及结果回传。支持任意消息通道(飞书/Slack/CLI)触发。keywords: Taobao, search, cart, rating, price, sales, sh...

Versionv1.0.7
Downloads103
TERMINAL
clawhub install taobao-search-skill

📖 About This Skill


name: Taobao-Search-Skill description: "Search Taobao/Tmall, filter by rating/price/sales/shipping, match SKU specs, add to cart. 淘宝天猫浏览器自动化——按好评率/价格/销量/包邮筛选,SKU规格匹配,加入购物车。Agent as brain: understands intent, decides filters, interprets results, handles exceptions." version: "2.0.0" model: opus allowed-tools: [Bash]

Taobao-Search-Skill

> 合规声明: 本 Skill 仅用于自动化你自己的淘宝/天猫账号操作。不得绕过平台安全控制、不得用于批量注册/刷单/爬虫等违反淘宝服务条款的行为。使用者对自身操作承担全部责任。

你的角色:大脑

你是决策者,scripts/taobao.py 是你的执行手脚。

  • 理解用户意图,构造搜索参数,解读返回的结构化结果,对用户汇报
  • taobao.py 执行浏览器操作(搜索、筛选、加购),返回 JSON 数据
  • 用户 在你需要时手动完成登录或验证码
  • 三者协作流程:

    用户描述需求 → 你解读意图 → 构造参数 → exec taobao.py
        → taobao.py 返回 JSON → 你解读结果 → 向用户汇报
        → 如需登录/验证 → 你通知用户 → 用户完成后 → 你 exec taobao.py resume
    

    核心原则:

  • taobao.py 只报告发生了什么,不决定"该怎么办"——那是你的工作
  • 每次 exec 返回的 JSON 包含 status 字段,你根据它决定下一步
  • 遇到 need_login / need_captcha 时,暂停并告知用户,不要自行绕过

  • 前置检查:首次使用保障

    在收到用户搜索请求后,执行以下检查再构造命令:

    1. 检查会话状态(可选但推荐):

       python scripts/taobao.py check-session
       
    如果 session_exists: false,提前告知用户:"首次使用需要手动登录淘宝,过程中会弹出浏览器窗口。"

    2. 确认依赖可用(遇到报错时检查): - python -m playwright install chromium — 浏览器未安装时执行 - python -m pip install -r requirements.txt — 依赖缺失时执行 - Python 版本需 ≥ 3.11

    3. 选择人工接管模式: - 默认(交互式):不传 --no-manual-approval。脚本会自行等待用户登录(最长 3.5 分钟),你无需逐轮交互。适合用户就在电脑前、可以立即扫码的场景。 - Agent 完全控制:传 --no-manual-approval。遇登录/验证立即返回 need_login/need_captcha 信号,你完全掌控中断时机和用户提示语。适合你在多轮对话中需要精确控制流程的场景。


    1. 意图理解:从用户话中提取参数

    从用户自然语言输入中提取以下字段。未提及的字段使用默认值,不要自作主张。

    | 参数 | 提取规则 | 默认值 | |------|----------|--------| | search_keyword | 搜索目标,如"苹果手机""索尼耳机" | "Sony headphones" | | rating_threshold | "好评率大于X%""评分X以上"→ X/100;未提及则不筛选 | 0 | | max_candidates | "最多N个""前N个"→ N;未提及 | 5 | | price_min | "N元以上""最低N""不少于N"→ 数值 | None | | price_max | "N元以内""不超过N""N以下"→ 数值 | None | | min_sales | "付款人数超过N""销量大于N""至少N人付款"→ 数值 | None | | require_free_shipping | "包邮""免邮""免运费"→ true | false | | require_tmall | "只要天猫""天猫店"→ true;"只要淘宝""C店"→ false | None | | sku_keywords | "16+512""16G 512G"→ 空格分隔关键词 | None | | need_screenshot | "截图""证据"→ true | true | | manual_approval_required | "自动""无人值守"→ false | true | | headless | "无头""后台静默"→ true | false | | session_strategy | 通常不需要改,使用默认值 | "storage_state" | | report_channel | 结果回传通道,目前支持 feishu | "feishu" |

    提取示例:

  • "帮我找便宜的蓝牙耳机,100以内包邮" → search_keyword="蓝牙耳机", price_max=100, require_free_shipping=True
  • "搜苹果手机好评率95%以上,前10个" → search_keyword="苹果手机", rating_threshold=0.95, max_candidates=10
  • "天猫上找索尼耳机,付款人数超1000,16G 512G规格" → search_keyword="索尼耳机", require_tmall=True, min_sales=1000, sku_keywords="16G 512G"

  • 2. 执行协议

    Step 1: 构造命令

    根据提取的参数构造 CLI 调用:

    python scripts/taobao.py search \
      --keyword "<关键词>" \
      --rating-threshold <阈值> \
      --max-candidates <数量> \
      --price-min <最低价> --price-max <最高价> \
      --min-sales <最低销量> \
      --require-free-shipping --require-tmall yes \
      --sku-keywords "<规格关键词>"
    

    可选 flags:--no-screenshot--no-manual-approval--headless--no-session-auto-save

    Step 2: 执行并读取结果

    执行命令,捕获 stdout 作为 JSON 解析。stderr 是浏览器运行日志,忽略。

    taobao.py 返回两种 JSON:

    正常完成(success / partial_success / failed):

    {
      "status": "success|partial_success|failed",
      "task_id": "...",
      "session": {"status": "restored|missing|captured", "logged_in": true|false},
      "search": {"status": "...", "keyword": "...", "candidates_found": N},
      "items": [
        {
          "title": "商品标题",
          "item_id": "...",
          "price": "¥299.00",
          "price_value": 299.0,
          "sales_count": 15000,
          "rating": 0.98,
          "free_shipping": true,
          "is_tmall": true,
          "url": "https://...",
          "cart_added": true
        }
      ],
      "skipped": [
        {"title": "...", "reason": "sku_or_price_mismatch", "detail": "..."}
      ],
      "evidence": ["screenshot_paths"],
      "steps": [{"name": "...", "status": "...", "message": "..."}],
      "error": null,
      "resume_stage": null
    }
    

    中断信号(need_login / need_captcha):

    {
      "status": "need_login|need_captcha",
      "task_id": "...",
      "session": {"status": "...", "logged_in": false},
      "message": "人类可读的中断原因",
      "action": "告知用户如何操作",
      "resume_stage": "awaiting_login|awaiting_captcha",
      "steps": [...]
    }
    

    中断信号下没有 items/search/skipped 字段,因为搜索尚未完成。执行 resume 后会重新走完整流程。

    Step 3: 根据 status 决定下一步

    | status | 含义 | 你应该做的事 | |--------|------|-------------| | success | 全部完成,商品已加购 | 向用户汇报 items 列表,展示关键信息 | | partial_success | 部分完成(无匹配商品) | 说明 skipped 原因,建议放宽条件 | | need_login | 需要手动登录 | 第 3 节中断处理流程 | | need_captcha | 需要手动过验证码 | 第 3 节中断处理流程 | | failed | 执行异常 | 查看 error.code,决定重试/放弃/求助用户 |


    3. 中断处理:登录与验证码

    收到 need_login

    taobao.py 的 session 未登录。你必须:

    1. 告知用户: "淘宝未登录,请在弹出的浏览器窗口中手动完成登录(扫码或账号密码),完成后告诉我。" 2. 等待用户确认(用户说"好了""完成""done") 3. 执行恢复: python scripts/taobao.py resume

    不要自动重试 search——resume 会复用已保存的会话状态继续搜索。

    收到 need_captcha

    搜索被风控拦截。你必须:

    1. 告知用户: "淘宝触发了安全验证,请在浏览器中完成滑块验证,完成后告诉我。" 2. 等待用户确认 3. 执行恢复: python scripts/taobao.py resume

    处理超时

    如果 resume 仍然返回 need_loginneed_captcha(最多尝试 2 次):

  • 告知用户:"登录/验证似乎未成功,请确认是否已完成操作。也可以尝试清除会话重新开始:python scripts/taobao.py clear-session"
  • 让用户决定是否继续

  • 4. 结果解读与汇报

    汇报格式

    向用户自然语言汇报,不要直接 dump JSON。格式参考:

    搜索「{keyword}」完成,共检查 {N} 个候选商品,成功加购 {M} 件:

    ✅ 符合条件(好评率 ≥ {threshold}%): 1. [天猫/淘宝] 商品标题 — ¥价格 — 好评率 X% — 月销 N — 包邮/不包邮 2. ...

    ⚠️ 好评率不达标: 1. 商品A — 好评率 X%(低于 {threshold}% 阈值)

    ❓ 好评率未知: 1. 商品B — 详情页未展示好评率

    ❌ 加购失败:

  • 商品C:SKU规格不匹配
  • 如果用户未设定好评率阈值,则不需要分"符合/不达标",直接列出所有加购商品并标注好评率即可。

    筛选决策

    taobao.py 做了基础筛选(价格/销量/包邮/天猫/关键词匹配),并提取了每个商品的好评率rating 字段)。

    你需要做的判断(好评率筛选):

  • 读取每个 item 的 rating 字段
  • 如果用户设定了好评率阈值:rating >= 阈值 → 向用户汇报为"符合";rating < 阈值 → 汇报为"好评率不达标",但仍告知用户该商品存在
  • rating: null vs rating: 0 null = 详情页未提取到好评率("未知");0 = 提取到但值为 0%(几乎不会出现,若出现则视为"不达标")
  • 不加购的商品(sku/价格不匹配)在 skipped 中,分析 reason 向用户解释
  • 主动建议:

  • 如果符合好评率要求的商品太少:建议放宽阈值或扩大搜索范围
  • 如果所有商品好评率都未知:建议用户手动确认
  • 证据引用

    如果 evidence 数组非空,在汇报末尾告知用户截图已保存。注意 evidence 中的路径是本地文件系统路径(如 C:\...\search_results.png),不是 URL。可在汇报中列出路径供用户直接打开,但不要尝试用 Read 工具读取(它们是二进制图片文件)。


    5. 异常处理决策树

    WORKFLOW_ERROR

    收到 WORKFLOW_ERROR
      ├─ 网络相关错误 → 等待 3 秒,重试 1 次
      ├─ 浏览器启动失败 → 告知用户检查 Playwright 安装
      └─ 其他错误 → 告知用户错误信息,请求指示
    

    会话过期

    如果 session.status == "missing"status == "need_login"

  • 这是正常的首次使用或会话过期
  • 按 3 节流程处理即可

  • 6. 常用操作

    检查会话状态

    python scripts/taobao.py check-session
    

    返回会话文件是否存在及 cookie 数量。在新任务开始前可以快速检查,避免无效的 search 调用。

    清除会话(重新登录)

    python scripts/taobao.py clear-session
    

    当用户反馈"登录失败""会话失效"时使用。下次 search 会触发新的手动登录流程。


    依赖与启动

  • Python 3.11+
  • 安装依赖:python -m pip install -r requirements.txt
  • 安装浏览器:python -m playwright install chromium
  • 默认会话路径:.cache/taobao-search-skill/taobao-session.json
  • 默认截图路径:.cache/taobao-search-skill/artifacts/

  • 失败码参考

    | 错误码 | 说明 | 你的处理 | |--------|------|----------| | LOGIN_REQUIRED | 未登录,需手动完成登录并保存会话 | 中断处理流程 | | SEARCH_BLOCKED | 淘宝风控拦截搜索,需手动完成验证 | 中断处理流程 | | WORKFLOW_ERROR | 工作流执行异常 | 异常处理决策树 | | NO_STATE | resume 时没有可恢复的状态 | 引导用户先执行 search |


    多平台部署

    Claude Code

    将本文件复制到 .claude/skills/taobao-search.md,Claude Code 自动识别。触发方式:

  • 显式:/taobao-search 搜索苹果手机 好评率大于95%
  • 语义匹配:描述淘宝搜索/加购意图时自动匹配
  • .claude/settings.local.json 中确保允许执行:

    {
      "permissions": {
        "allow": [
          "python scripts/taobao.py search *",
          "python scripts/taobao.py resume",
          "python scripts/taobao.py check-session",
          "python scripts/taobao.py clear-session"
        ]
      }
    }
    

    Cursor

    将本文件复制到 .cursor/rules/taobao-search.md,在 Cursor Rules 中启用。触发方式为自然语言描述淘宝搜索意图。

    GitHub Copilot

    将本文件内容合并到 .github/copilot-instructions.md,或作为独立 prompt 文件放置在 .github/prompts/taobao-search.prompt.md

    OpenClaw

    将本文件作为 Skill 定义放置在 OpenClaw 的 Skill 目录下,保持 description 中的关键词覆盖触发场景即可。OpenClaw 的消息路由机制会自动匹配。

    其他 AI Agent 工具

    任何支持 Markdown 前导 + 指令格式的 Agent 工具(Cursor Rules、Copilot Instructions 等),参考「执行协议」段即可直接使用。核心能力要求:执行 Shell 命令 + 解析 JSON。

    直接 CLI

    python scripts/taobao.py search --keyword "苹果手机" --price-max 10000
    python scripts/taobao.py search --keyword "耳机" --rating-threshold 0.95 --price-min 50 --price-max 500 --min-sales 1000 --require-free-shipping --require-tmall yes