Files
douyin-pc/docs/2026-09-06-00-25-follow-user-by-uid.md
T
2026-09-06 01:00:17 +08:00

4.4 KiB
Raw Blame History

直接传 UID 关注:调研、实现及实测

结论与变更

src/follow_user.py 改为只接收目标数字 UID,不再要求或解析用户主页链接。无需打开目标主页,仍通过已有抖音标签页的登录态与运行环境调用接口,不是脱离浏览器的 HTTP 客户端。

旧文档 2026-09-06-00-13-follow-user.md 中传主页链接的命令属于历史版本,现以本文命令为准。依赖与安装方式不变。

调研日志

  1. 检查调用关系:生产代码中只有脚本 main 调用 follow_user;同步更新离线测试。
  2. 使用既有 get_user_from_browser() 确认登录有效,不执行任何登录操作。
  3. 只发送资料 GET,验证 /aweme/v1/web/user/profile/other/ 除了 sec_user_id,也支持查询参数 user_id=4432868004606158。返回 UID 完全一致,昵称 tico168888,关注状态 0。没有打开或导航到此用户主页。
  4. 将资料查询参数改为 user_id,返回 UID 必须与输入字符串完全一致;不依赖返回 sec_uid 来发起关注。
  5. 保留关注前状态检查、禁止关注自己、已关注跳过、关注后回查和异常不重试。输入校验发生在连接浏览器之前;只接受不带前导零的正整数 ASCII 数字字符串,拒绝主页链接、空串、零、负号、小数及全角数字。
  6. 离线 4 项测试通过后,运行 CLI 的 --check 确认目标未关注,再执行一次真实关注。
  7. 关注成功并回查确认 follow_status=1;重复运行返回 already_following,不再次提交关注。

请求参数与完整流程

公共查询参数:device_platform=webapp&aid=6383&channel=channel_pc_web

  1. 当前登录态检查:沿用 /aweme/v1/web/user/profile/self/?device_platform=webapp&aid=6383
  2. 目标状态:GET /aweme/v1/web/user/profile/other/,公共参数加 user_id=<uid>
  3. 仅未关注时:POST /aweme/v1/web/commit/follow/user/,公共查询参数;表单正文 user_id=<uid>&type=1Content-Type 为 application/x-www-form-urlencoded; charset=UTF-8
  4. 关注成功后:重复步骤 2,只读确认同一个 UID 已关注。

返回 JSON 为 actionuidsec_uid(资料附带)、nicknamefollow_status;输入不需要 sec_uid。脚本没有取消关注分支,不自动重试写请求。HTTP 200 和 status_code=0 之外,必须同时检查关注响应与回查状态为 1 或 2。私密账号审批等其他状态仍停止,不推测成功。

这些是脚本明确传入的参数;Cookie 由浏览器携带,页面 SDK 可能附加安全字段,未逐项抓取最终网络层字段。

命令与实测输出

python3 src/follow_user.py 4432868004606158 --check
python3 src/follow_user.py 4432868004606158

实际新增关注输出摘要:

{
  "action": "followed",
  "uid": "4432868004606158",
  "nickname": "tico168888",
  "follow_status": 1
}

再次执行相同关注命令:action=already_following, follow_status=1。未取消或修改此前测试对象的关注关系。

python3 -m unittest discover -s src -p 'test_follow_user.py'

4 项离线测试通过:UID 边界、首次关注及状态回查、只查/已关注/相互关注跳过、身份不匹配/失效登录/自己/未知状态停止、写入不确定时不自动重试。测试使用标准库 unittest/mock,不访问浏览器。

空白环境安装与复用

项目 Python 3.10+,保留同目录 src/get_current_user.py;无需新 Python 依赖。另需 Chrome/Chromium 和 browser-harness

# uv 尚未安装时,可通过系统包管理器或用户级 pip 安装
python3 -m pip install --user uv
export PATH="$HOME/.local/bin:$PATH"
uv tool install --python 3.12 --upgrade --force browser-harness
uv tool update-shell
export BU_CDP_URL=http://localhost:9222
browser-harness --doctor

已有 CDP 浏览器直接复用;空白环境须自行开启 Chrome 远程调试、打开抖音并手动登录,详细步骤见前一篇文档安装章节。端点可通过环境变量指定,不固化账号、目标 UID 或标签 ID。遇到登录失效停止,不尝试自动登录。只串行使用,不并发切换账号或标签。

若从通知文件取目标,使用 notifications[].users[].uid;原始通知的顶层 user_id 是通知接收账号,不是互动用户。UID 在调用和 JSON 中保持字符串,避免大整数精度损失。