| 维度 | 锁定值 |
|---|---|
| 硬件 | 1 台阿里无影云电脑(国内 IP) |
| 账号 | 1 个抖音号(野荞) |
| 通道 | DM 一触 · RC 楼中回复 · 二触(点赞+评论1+评论2) |
| 目标 | 三通道并行 —— 不接受"二选一手动切换"、不加机、不加号 |
执行器全程用 pyautogui(douyin_dm_grounded.py 实证):光标 / 截屏 / 键盘焦点都是桌面会话单例。
而且每条 GUI 发送是大块占用:DM ≈ 40 秒,RC ≈ 1 分钟,二触三连 ≈ 1–2 分钟。塞不进彼此的缝里。
关键洞察:RC 和二触的"发送"本质是 HTTP POST(评论 / 点赞),连桌面都不需要。把它们移出桌面,就和 GUI 发 DM 不再争抢。
douyin_dm_grounded.py,逻辑不动comment/publish,点赞 = commit/item/digghttpx POST,不碰桌面,几百毫秒一条抖音读评论现在已经用签名 httpx 在跑(comment_api.py)。发评论 = 把同一套签名机制从 GET 换成 POST,只差三处:
| 读(现有 GET) | 发(要做 POST) | |
|---|---|---|
| 方法 | GET | POST |
| 参数 | aweme_id | aweme_id + text 正文 [+ reply_id 给RC] |
| cookie | 匿名 ttwid 够 | 野荞登录态 cookie(sessionid) |
| 签名 a_bogus | 完全复用 ABogusManager.model_2_endpoint | |
| 验证 | status_code==0 | status_code==0 + 返回新评论 cid |
async def publish_comment(aweme_id, text, login_cookie, reply_id=None):
from f2.apps.douyin.utils import ABogusManager
params = _common_browser_params(aweme_id) # 复用!设备指纹 + 新 msToken
params["text"] = text # 评论正文
if reply_id: params["reply_id"] = reply_id # RC 楼中回复才带
endpoint = ABogusManager.model_2_endpoint( # 签名,与读评论同一函数
_USER_AGENT, ".../aweme/v1/web/comment/publish/", params)
async with httpx.AsyncClient(timeout=15) as client:
r = await client.post(endpoint,
headers={"User-Agent": _USER_AGENT, "Referer": "https://www.douyin.com/"},
cookies=login_cookie) # ★ 登录态(非匿名)
return r.json().get("status_code") == 0 # 0 = 发成功
对比:GUI 发评论 = 搜人→开视频→暂停→点赞→点评论框→打字→发送(1–2 分钟占窗口);httpx 发评论 = 拼参数→签名→POST(几百毫秒,桌面全程空着)。
写 _probe-comment-publish.py:用野荞 web cookie + f2 签名,手动实发 1–2 条评论 / 1 个点赞,看返回 status_code==0 且账号无异常(无验证码、无限流、无封禁)。
comment_api.py 补 publish_comment / digg_item 两个签名 POSTDM_VIOLATION_RE 违规闸)全走 APIparent_cid / reply_id)claim 4h 锁去重;各记各的日预算桶comment_api.py 现在只会读。发评论 / 点赞要自己加签名 POST。DM_VIOLATION_RE 砍掉,只剩评论1。| 评估维度 | 评分 | 说明 |
|---|---|---|
| 技术可行性(签名/POST) | 高 | a_bogus / msToken 签名已封装且生产验证;POST 是标准操作 |
| 代码改动量 | 小 | 复用 90% 现有链路;新增约 4–6 人天 |
| 架构契合度 | 高 | 无影是国内 IP(API 能签通,东京被封才走 GUI);claim 去重 / 预算桶现成 |
| 发布接口可行性 | 未知 | 端点确切契约(text 放 query/body、a_bogus 是否签 body)需探针实测 |
| 封号风险 | 需验证 | 发布类反爬严;自动评论可能被风控 → 第 1 步硬 gate |
| 运维复杂度 | 中 | 多一份 web cookie 要定期换;双 loop 比单 loop 略复杂 |
探针通过 → 投 4–6 人天建双车道,得到一台机一个号的真物理并行:DM 走 GUI、RC/二触 走 API,同一秒并发,且评论桶与 DM 桶分别填,当天总触达更多。
探针失败(发不通 / 被风控)→ 并行方案到此为止。退回方案 B:单桌面自动轮转调度器(DM/二触/RC 按配额自动轮流发,窗口够用,一天三通道全跑完),仍解决"二选一手动切换"的痛点,只是不是物理并行。
_probe-comment-publish.py 实发 1–2 条评论验证 —— 它是整个方案的总开关。
低成本(1 天)、决定性:发得通且不封,后面 4–6 人天才值得投;发不通,立刻省下后面全部工作量、改走轮转调度器。
worker/services/comment_api.py(签名读取链路)、
worker/scripts/wuying-dm/douyin_dm_grounded.py(pyautogui 桌面单例)、
wuying_poll_agent.py(现 A→B→C 串行轮询)、
scripts/gen-second-touch-comments.py(二触评论2=搬DM正文+违规闸)。
本文档为方案设计,未改动任何生产代码。