wechat-search-collector

📁 httprunner/skills 📅 5 days ago
1
总安装量
1
周安装量
#55081
全站排名
安装命令
npx skills add https://github.com/httprunner/skills --skill wechat-search-collector

Agent 安装分布

opencode 1
codex 1
claude-code 1
antigravity 1

Skill 文档

微信视频号搜索

概述

本技能覆盖微信视频号在 Android 端的关键词搜索与结果遍历流程。

路径约定

统一安装与执行目录:~/.agents/skills/wechat-search-collector/。执行前先进入该目录:

cd ~/.agents/skills/wechat-search-collector
  • 执行层需使用 android-adb 实现 Android 设备管理和 UI 操作,使用 ai-vision 从截图中定位 UI 元素并推理下一步动作,不要使用 dump-ui 做元素发现。当前 ai-vision 实现会输出已转换的绝对像素坐标,可直接用于 adb 操作。
  • è·¨ skill 编排时,优先使用 references/commands.md 中的函数封装(ADB/VISION/TASK/REPORT 等),可在任意工作目录执行,避免 cd 漂移导致的路径问题。
  • 截图与相关产物输出目录由 TASK_ID 控制:若指定 TASK_ID 则写入 ~/.eval/<TASK_ID>/,未指定则写入 ~/.eval/debug/。文件名带时间戳避免覆盖。
  • 具体命令已抽离到 references/commands.md,流程中只描述关键步骤。
  • 如需从飞书多维表格拉取搜索任务,使用 feishu-bitable-task-manager 获取任务参数后再进入对应流程。
  • 结果采集与上报使用 result-bitable-reporter:前置必须启动 collect,收尾必须执行 collect-stop 与 report。
  • 场景结束后,需根据场景类型执行相应的后置处理:piracy-handler、group-webhook-dispatch。

前置处理

  • 设备预检:确认驱动与依赖可用,读取环境变量 SerialNumber 获取设备 serial。
  • 任务拉取:
    • 当需要“从任务表获取搜索任务并执行”时,先用 feishu-bitable-task-manager 的 claim 获取任务,将任务字段映射到本技能的参数。
    • claim 默认拉取 Date=Today 且 status 为 pending,failed 的任务,并保证多节点多设备不会重复领取相同任务。
    • 若在指令中指定场景类型,则拉取该场景的任务。
      • 例如:从飞书多维表格拉取一个微信视频号的综合页搜索的任务,开始执行
    • 若未指定场景类型,则按默认优先级 --scene 个人页搜索,综合页搜索 拉取。
      • 例如:从飞书多维表格拉取一个微信视频号的任务,开始执行
    • claim 已将该任务字段更新为:Status=running、DispatchedDevice=<serial>、DispatchedAt=now、StartAt=now。
    • 根据任务的 Scene 进入对应流程:
      • 综合页搜索 -> 综合页搜索流程
      • 个人页搜索 -> 个人页搜索流程
  • 目录初始化:必须提供 TASK_ID(仅数字),创建输出目录 ~/.eval/<TASK_ID>/;若缺失则失败结束。
  • 启动采集:
    • 在进入微信搜索流程前,调用 result-bitable-reporter 的 collect 启动后台采集。
    • 环境变量要求:BUNDLE_ID、SerialNumber。
    • 参数要求:--task-id <TASK_ID>、--db-path ~/.eval/records.sqlite、--table capture_results。

综合页搜索流程

适用于“在视频号综合页搜索单个或多个关键词并遍历结果”的需求。

1. 任务参数校验

  • 任务信息必须提供搜索关键词(以逗号拆分为 KEYWORDS)

2. 启动微信

  • 若当前已在微信内,先使用 android-adb 的 back-home 命令返回手机桌面。
  • 回到桌面后再启动微信。

3. 进入 发现 -> 视频号

  • 通过截图 + ai-vision 定位并点击 发现 与 视频号 入口。

4. 进入搜索界面

  • 通过截图 + ai-vision 点击搜索框/放大镜进入搜索页;若被遮挡则先滑动后再定位。

5. 依次输入关键词并触发搜索

  • 对关键词列表 KEYWORDS 逐个执行:清空输入框 -> 输入关键词 -> 触发搜索。
  • 若未进入结果页,重试触发直到进入结果页。

6. 结果滚动到底并切换下一个关键词

  • 每个关键词的结果页都执行“结果滚动到底”的滑动循环。
  • 不论结果多少,必须持续滑动直到确认触底(出现底部分割线、无更多提示或其他明确的触底标识),不得中途自行终止。
  • 触底判定需更稳健:若连续两次滑动后截图中仍是同一批末尾结果(封面/标题/时长/点赞等保持一致),且底部出现明显灰色空白区域/列表不再继续延伸/底部导航条已明显露出且内容不再变化,即可判定已触底,即使没有“无更多”提示;提示词需强制将“底部空白 + 内容不再延伸”视为到底(可在提示词中明确“仅当列表仍在继续延伸、底部仍被内容填满时才判定为否”)。
  • 频率要求:在结果页滚动过程中,每滑动 5 次检测一次是否已滑动到底。
  • 确认触底后:点击搜索框确保输入框激活 -> 清空 -> 输入下一个关键词 -> 触发搜索,直到完成所有关键词的遍历。

7. 场景后置处理

  • 当综合页搜索任务成功完成后,调用 piracy-handler,实现盗版聚类筛查、子任务创建与 webhook 推送计划创建。
  • 若综合页搜索流程失败或中断,不调用该编排器。

个人页搜索流程

适用于“先进入某账号个人页,再在个人页内检索多个关键词并遍历结果”的需求。

1. 任务参数校验

  • 任务信息必须提供:账号名称(ACCOUNT_NAME)和搜索关键词(以逗号拆分为 KEYWORDS)

2. 启动微信

  • 若当前已在微信内,先使用 android-adb 的 back-home 命令返回手机桌面。
  • 回到桌面后再启动微信。

3. 进入 发现 -> 视频号

  • 通过截图 + ai-vision 定位并点击 发现 与 视频号 入口。

4. 进入搜索界面

  • 通过截图 + ai-vision 点击搜索框/放大镜进入搜索页;若被遮挡则先滑动后再定位。

5. 搜索账号并进入个人页

  • 输入账号名称 ACCOUNT_NAME 并触发搜索
  • 进入搜索结果后,若有目标账号则直接点击进入个人页
  • 否则可先点击 账号 Tab,然后在账号列表中点击目标账号进入个人页

6. 在个人页依次搜索关键词

  • 对关键词列表 KEYWORDS 逐个执行:先点击个人页搜索框确保输入框激活 -> 清空 -> 输入关键词 -> 触发搜索 -> 滑动结果到底。
  • 每个关键词的结果页都执行“结果滚动到底”的滑动循环。
  • 不论结果多少,必须持续滑动直到确认触底(出现底部分割线、无更多提示或其他明确的触底标识),不得中途自行终止。
  • 触底判定规则同上(底部空白/导航条露出/内容不再变化视为已到底,即使没有“无更多”提示)。
  • 频率要求:在结果页滚动过程中,每滑动 5 次检测一次是否已滑动到底。
  • 每个关键词搜索前确认仍在该账号个人页;若误退出则重进个人页后继续。

7. 场景后置处理

  • 个人页任务结束并进入终态(success/error)后,若任务存在 GroupID,调用 group-webhook-dispatch 做“是否就绪 + webhook 推送”。

任务结束后的收尾逻辑

  • 若 claim 未获取任务,直接结束不做收尾。
  • 所有关键词遍历完成后,使用 android-adb 的 back-home 命令返回手机桌面
  • 无论任务成功、失败或中断,都必须执行以下动作(finally 语义):
    • 调用 result-bitable-reporter 的 collect-stop 结束当前设备采集,并打印采集统计。
    • 调用 result-bitable-reporter 的 report,并带 --task-id <TASK_ID>,仅上报当前任务在 capture_results 中 reported in (0,-1) 的数据到飞书多维表格采集结果表。
  • 调用 feishu-bitable-task-manager 更新该 TaskID 的字段:Status -> success/failed/error(基于任务执行结果)、EndAt ->now

备注与排障

  • 点击不准:重新截图,让 ai-vision 提供更精确坐标(不要改用 dump-ui)。
  • 异常流程(弹窗遮挡或步骤卡住):先识别弹窗并关闭,再继续原步骤。处理命令见 references/commands.md。
  • 任务超时限制:若单个任务执行时长超过 30 分钟,则终止执行,任务状态更新为 failed。