反向评论(去目标用户视频底下评论触达)此前只有 Android ADB / 已停的 iOS WDA 两条通道。 云电脑此前只用于发私信。抖音 PC 客户端能不能在视频评论区发评论,完全没验证过—— 早期判断里「profile 视频 grid + 评论区是 webview,对自动化不可见」一度让这条路被打上问号。
先写最小可行性脚本 _probe-reverse-comment.py,纯 GUI、不碰 DB,逐步走 + 每步截图,
目的只回答一个问题:PC 客户端到底能不能发评论。结论:
✅ 能 评论框是真输入框(不是吃不进字的死 webview), SendInput 直键能打进去、能发出。spike 阶段在 @梦想的天空分外蓝 的视频下成功发出第一条测试评论「测试一下评论」。
目标:@峥宇60km/小时(OCR 身份门 conf 0.98 通过)
评论:「你好,峥宇60km小时哥。装修吵了半年确实够呛,价格透明才能少扯皮。你方便发个+v号过来吗 我让设计师加你,价格上能再让一档。」
结果:真发出 ✓(人工刷新评论区气泡确认)
这条同时验证了完整链路:搜人 → 身份门 → 开视频 → 暂停 → 评论区 → 长文案 SendInput → 发送。
两层执行:本机(Mac)备料 + 投递,无影(Windows)做抖音 PC 客户端的 GUI 自动操作。
| 原则 | 原因 |
|---|---|
| 大元素 VL / 小元素固定坐标 | 搜索框/视频/评论 tab 大而独立,VL 定位稳;评论框/发送键小而密集,VL 飘 → 实测固定坐标。 |
| OCR 身份门 | 按昵称搜索会撞同名,公开评论错人代价大 → 进主页先核对昵称,不符就跳过不评。 |
| SendInput 直键 | 无影剪贴板对抖音 Ctrl+V 失效、中文 IME 抢首字 → 逐字 unicode 直键绕开两个隐藏层。 |
| 先暂停视频 | 视频播完自动跳下一条,不暂停则打字期间可能评到别的视频。 |
小样本里观察到的分流:数字号昵称 → 身份门拦下(wrong_user);无作品/定位失败 → no_works; 身份门通过 + 暂停 + 评论 → sent。漏斗各档真实占比需大批量才有意义。
| 类别 / 现象 | 优化方式 | 进展 |
|---|---|---|
| SendInput 文字漏进终端/桌面 | 根因=打字时前台不是抖音。后台进程 SetForegroundWindow 被 Windows 静默拒 →
AttachThreadInput 绕开;拉前台用 SW_MAXIMIZE(不能用 SW_RESTORE,会缩小窗口→坐标落桌面)。
打字前打印前台标题做诊断。 |
已修复 |
| 发送键点空(长评论框变高) | 短评论发送键在 px(2519,1520);长评论换行后挪到 ~px(2534,1541),固定坐标偏上点空(文字进了框却没发)。 → 打完字 VL 现场定位「红底白字 发送」文字按钮,固定坐标兜底。 | 已修复 |
| 视频播完自动跳下一条 → 评论发错视频 | 开视频后 space 暂停,再去评论区。 |
已修复 |
| nickname 填数字抖音号 → 身份门必拦 | 身份门按昵称子串匹配,数字号拿不到人类昵称。→ CSV nickname 列填真实显示昵称。 |
已规范 |
| 短昵称 / 同名大号身份门模糊放行 → 评错人 | 0.95 阈值对短名(≤3 字)会放过不同人(如「小嘟→嘟妹」)。 建议:短名收紧到精确相等 / 要求目标名是 seen 子串。当前靠人工气泡核对兜底。 | 兜底中 · 待收紧 |
| 旧版 douyin_dm_grounded 缺符号 → AttributeError 崩 | 无影上是 6/1 版,没有 6/3 才加的 C_WORK_FIRST/_has_works_on_profile。
→ 新脚本自定义同名 env 常量,不依赖 dm 模块新符号。 |
已修复 |
| paste.rs 在无影下载卡死(中国区) | 脚本传输改 gzip+base64 → 剪贴板(~7KB,gzip CRC 自校验完整);CSV 仍走 paste.rs(偶发,重试)。 | 已缓解 |
| 无影剪贴板截断 / 首字符被吞 | gzip 压到 ~7KB 单次可粘;部署命令开头留一个空格防吞掉首字符 $。 |
已缓解 |
| 无影分辨率自适应漂移 → 固定坐标全偏 | 锁 2560×1600(关分辨率自适应 + 全屏别缩放窗口)。 | 已修复 |
| `✅ 已点发送` ≠ 真送达 | 脚本只点发送、不程序化判定(VL 自检在本机假阴性严重,已弃用)。→ 铁律:以评论区气泡人工核对。 | 人工兜底 |
_reverse_throttle.py。把上面 8 条优化串起来,就是一条 pull-based 公告板 全自动闭环——复用 DM 通道已跑通的
dispatch_queue + 云电脑常驻 poller 模型,没有任何节点持有云电脑的直连。
核心纪律(全局规则 #5):非语言任务(claim / 去重 / 节奏 / 重试 / 发出判定 / recheck)一律确定性代码,LLM 只做打分和文案。
| 角色 | 负责 |
|---|---|
| LLM | 只做两件:意向打分(analyze)+ 评论文案生成(Langfuse,带自检门防杜撰)。其余一概不碰。 |
| 确定性代码 | claim 锁 / 去重守卫 / 节奏节流 / 派单 / 抢锁 / 发出判定 / 重试升级 / recheck / 身份门收紧 / halt / 自愈。 |
| 人 | 目标态 0 操作:只看监控告警 + 周期抽检命中率/错评率。前期保留人工气泡抽检直到程序化判定稳。 |
| 阶段 | 能力 | 人工 |
|---|---|---|
| 现在 · 手动版 已到 | CSV 直发,GUI 全自动跑完一批;身份门防错评。 | 备 CSV + 气泡核对 |
| 半自动(todo 1·2) | 接 reverse_comment_queue + claim 去重 + 节奏门 + pull-based 派单。候选/文案自动备好,云电脑自动抢着发。 | 仅气泡抽检 |
| 全自动(+ todo 4·5·身份门收紧·自愈) | 程序化判定真发出 + recheck 删除核查 + 异常自愈 + 短名身份门收紧。闭环去重,无需人工核对。 | 0 值守 |
关联:skill send-cloudpc-comment · 脚本 worker/scripts/wuying-dm/douyin_comment_grounded.py ·
踩坑详录 memory feedback_wuying_gui_fixed_coords_over_grounded.md(点 21-27)。