微信视频号搜索
约定
统一安装与执行目录:~/.agents/skills/wechat-search-collector/ 。执行前先进入该目录:
cd ~/.agents/skills/wechat-search-collector
-
使用 android-adb 执行设备操作;使用 ai-vision 从截图定位元素(不要用 dump-ui )。
-
关键:所有 UI 操作(如点击、输入)必须使用 plan-next 进行规划和执行。严禁先执行 query 再使用返回坐标进行点击,因为存在坐标偏移问题。
-
优先复用 references/commands.md 的函数封装(ADB /VISION /TASK /REPORT ),避免 cd 漂移。
-
产物目录:TASK_ID 存在则写 ~/.eval/<TASK_ID>/ ,否则写 ~/.eval/debug/ (文件名带时间戳)。
-
结果采集与上报:使用 result-bitable-reporter ;进入微信流程前必须 collect-start ,结束时必须 collect-stop
- report 。
前置处理
-
读取设备序列号:使用环境变量 SerialNumber (或 ADB devices 自行确认)。
-
准备输出目录:TASK_ID 必须为数字;创建 ~/.eval/<TASK_ID>/ 。
-
启动采集:执行 REPORT collect-start --task-id <TASK_ID> --db-path ~/.eval/records.sqlite --table capture_results (见 references/commands.md )。
-
可选拉取任务:用 TASK claim 从飞书领取任务;按 Scene 选择流程(综合页搜索 / 个人页搜索)。
共享子流程:滚动结果到触底(每滑动 5 次检测一次)
目标:避免视觉误判,优先用 sqlite capture_results 增量判断是否还有新增。
-
进入某个关键词结果页后,记录基线 LAST_COUNT : LAST_COUNT="$(REPORT stat --task-id <TASK_ID>)"
-
循环执行直到触底:
-
滑动 5 次:ADB -s <SERIAL> swipe 540 1800 540 400 --duration-ms 800 (循环 5 次;每次滑动后随机等待 500~1000ms)
-
查询当前总行数:CUR_COUNT="$(REPORT stat --task-id <TASK_ID>)"
-
若 CUR_COUNT == LAST_COUNT 连续出现 N 次(建议 N=3 ),判定触底;否则更新 LAST_COUNT=CUR_COUNT 并继续。
-
sqlite 判定不可用时,用 ai-vision assert 二值兜底(不确定必须判定为否),见 references/commands.md 。
综合页搜索流程
适用于“在视频号综合页搜索单个或多个关键词并遍历结果”的需求。
- 任务参数校验
- 任务信息必须提供搜索关键词(以逗号拆分为 KEYWORDS )
- 启动微信
-
若当前已在微信内,先使用 android-adb 的 back-home 命令返回手机桌面。
-
回到桌面后再启动微信。
- 进入 发现 -> 视频号
- 通过截图 + ai-vision 定位并点击 发现 与 视频号 入口。
- 进入搜索界面
- 通过截图 + ai-vision 点击搜索框/放大镜进入搜索页;若被遮挡则先滑动后再定位。
- 依次输入关键词并触发搜索
-
对关键词列表 KEYWORDS 逐个执行:清空输入框 -> 输入关键词 -> 触发搜索。
-
若未进入结果页,重试触发直到进入结果页。
- 结果滚动到底并切换下一个关键词
-
每个关键词的结果页都执行“结果滚动到底”的滑动循环。
-
对每个关键词执行“共享子流程:滚动结果到触底(每滑动 5 次检测一次)”。
-
确认触底后:点击搜索框确保输入框激活 -> 清空 -> 输入下一个关键词 -> 触发搜索,直到完成所有关键词的遍历。
- 场景后置处理
-
当综合页搜索任务成功完成后,调用 piracy-handler ,实现盗版聚类筛查、子任务创建与 webhook 推送计划创建。
-
若综合页搜索流程失败或中断,不调用该编排器。
个人页搜索流程
适用于“先进入某账号个人页,再在个人页内检索多个关键词并遍历结果”的需求。
- 任务参数校验
- 任务信息必须提供:账号名称(ACCOUNT_NAME )和搜索关键词(以逗号拆分为 KEYWORDS )
- 启动微信
-
若当前已在微信内,先使用 android-adb 的 back-home 命令返回手机桌面。
-
回到桌面后再启动微信。
- 进入 发现 -> 视频号
- 通过截图 + ai-vision 定位并点击 发现 与 视频号 入口。
- 进入搜索界面
- 通过截图 + ai-vision 点击搜索框/放大镜进入搜索页;若被遮挡则先滑动后再定位。
- 搜索账号并进入个人页
-
输入账号名称 ACCOUNT_NAME 并触发搜索
-
进入搜索结果后,若有目标账号则直接点击进入个人页
-
否则可先点击 账号 Tab,然后在账号列表中点击目标账号进入个人页
- 在个人页依次搜索关键词
-
对关键词列表 KEYWORDS 逐个执行:先点击个人页搜索框确保输入框激活 -> 清空 -> 输入关键词 -> 触发搜索 -> 滑动结果到底。
-
每个关键词的结果页都执行“结果滚动到底”的滑动循环。
-
对每个关键词执行“共享子流程:滚动结果到触底(每滑动 5 次检测一次)”。
-
每个关键词搜索前确认仍在该账号个人页;若误退出则重进个人页后继续。
- 场景后置处理
- 个人页任务结束并进入终态(success/error )后,若任务存在 GroupID ,调用 piracy-handler 做“是否就绪 + 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 )。务必确认使用了 plan-next 而非 query 。
-
异常流程(弹窗遮挡或步骤卡住):先识别弹窗并关闭,再继续原步骤。处理命令见 references/commands.md 。
-
任务超时限制:若单个任务执行时长超过 30 分钟,则终止执行,任务状态更新为 failed。