Skip to content

Repository files navigation

account-matrix

TikTok 多账号养号自动化脚本。在云电脑上通过比特浏览器(指纹隔离)+ 住宅 IP 模拟真人行为, 对账号执行 FYP 浏览 / 点赞 / 关注等动作,支持定时调度与动作统计。

项目背景与整体方案见 tiktok_matrix_proposal_v1.md。 规模目标:2 → 10 → 1000+ 账号。

架构

云电脑 (Windows)
├── 梯子 (Clash, TUN 模式)        — 内网穿透到 IPRoyal 住宅 IP
├── BitBrowser 比特浏览器           — 指纹隔离,每号一个 profile + 一个住宅 IP
│   └── 本地 API :54345           — open/close/pids
└── account-matrix (本仓库)
    ├── patchright                — 反检测版 Playwright,connect_over_cdp 接管浏览器
    ├── main.py                   — 单次批量执行所有启用账号
    └── scheduler.py              — FastAPI + APScheduler 定时调度

一个账号动作执行完即关闭浏览器,再执行下一个;文件锁保证同一时间只操作一个账号

目录结构

config/accounts.yaml      账号与行为配置(唯一配置源)
config/comments.txt       FYP 默认评论池(每行一条,可自由增删)
config/comments_brand.txt 品牌向评论池(目标号互动用)
src/
  main.py                 入口:批量/单账号执行,PID 文件锁,SQLite 动作日志
  scheduler.py            定时调度服务(FastAPI lifespan + AsyncIOScheduler)
  bitbrowser.py           BitBrowser 本地 API 客户端
  actions.py              养号动作:fyp_browse / try_like / try_follow / try_comment
  target_engage.py        目标号互动:抓新视频 + 点赞/评论自家品牌官方号
  human_mouse.py          贝塞尔曲线模拟真人鼠标移动
  notify.py               批次结束推送(ServerChan / Bark / Webhook)
  stats.py                动作统计:按账号汇总浏览/点赞/关注/评论次数
  test_like.py            点赞动作诊断脚本
  test_comment.py         评论动作诊断脚本(dump 选择器 + 试发评论)
data/                     运行时生成(已 gitignore)
  actions.db              SQLite 动作日志
  sessions.log            可读的会话日志
  run.lock                PID 锁文件

环境准备

仅在云电脑上运行,本机不登录 TikTok / 不开 BitBrowser。

  1. 云电脑装好 Clash(TUN 模式)、BitBrowser,并在 BitBrowser 里为账号配好住宅 IP 代理后再生成指纹。
  2. Python 3.13,安装依赖:
    pip install -r requirements.txt
  3. BitBrowser 应用保持开启(脚本依赖其本地 API 127.0.0.1:54345)。

配置

编辑 config/accounts.yaml

defaults:
  daily_actions:
    fyp_browse_minutes: [2, 5]     # 单次 FYP 浏览时长范围(分钟)
    like_probability: 0.35         # 每个视频点赞概率
    follows_per_session: [0, 1]    # 每 session 关注数上限
    comment:
      enabled: true
      comments_per_session: [1, 2]   # 每 session 评论数上限(最多 1~2 条)
      min_video_comments: 1000       # 仅评论“评论数 > 此值”的视频
      probability: 0.25              # 命中候选视频后,单视频尝试评论的概率
  active_hours: [[9, 12], [19, 23]]
  timezone: America/New_York

scheduler:
  fires_per_day: 3                 # 每天在 active_hours 内随机触发次数

accounts:
  - id: tiktok_1
    enabled: true
    bitbrowser_profile_id: "比特浏览器的 profile ID"
    notes: "测试号 #1"

新增账号 = 在 accounts: 下加一项;临时停用某号设 enabled: false

使用

cd src

# 单次执行所有启用账号(账号间随机间隔 30-120s)
python main.py

# 只跑某一个账号
python main.py --account tiktok_1

# 创建绑定固定代理的比特浏览器窗口(默认 socks5)
python create_browser.py --name tiktok_2 \
  --proxy "192.0.2.10:12324:用户名:密码"

# HTTP 代理;省略 --proxy 会隐藏输入,避免密码进入 shell 历史
python create_browser.py --name tiktok_2 --type http

# 批量读取代理文件;自动读取现有 tiktok_N 窗口的最大编号并从 N+1 创建
# 默认允许多个窗口复用已使用的代理;如需跳过则增加 --skip-used
# 文件每行格式:host:port:用户名:密码(空行和 # 注释会忽略)
python create_browser.py --file ../config/private/proxies/ip_0630

# 打开 BitBrowser、进入 Google 登录、填写邮箱并点击 Next(停留在密码页)
python gmail_setup.py --browser-name tiktok_25 --email account@gmail.com

# 填写并提交密码;推荐隐藏输入,避免密码进入命令历史
# 自动接受 Workspace 首次登录的 I understand 条款页
# 登录完成后自动点击 Google Account 的 Google password
# 遇到两步验证或其他安全挑战时会停留在对应页面
python gmail_setup.py --browser-name tiktok_25 --email account@gmail.com --ask-password

# I understand 默认等待 60 秒;超时后直接继续 Google password 流程
python gmail_setup.py --browser-name tiktok_25 --email account@gmail.com \
  --ask-password --terms-timeout 60

# 未指定新密码时使用脚本内置的统一新密码并提交修改
python gmail_setup.py --browser-name tiktok_25 --email account@gmail.com \
  --ask-password

# 批量读取邮箱文件;从指定窗口名开始逐个登录/改密,操作完自动关闭再打开下一个
# 文件每行格式:账号----密码----可忽略备注(空行和 # 注释会忽略)
# 例:第 1 行跑 tiktok_25,第 2 行跑 tiktok_26
python gmail_setup.py --file ../config/private/mails/mail_0702 \
  --browser-name tiktok_25

# 查看统计
python stats.py            # 全部(FYP 浏览/点赞/关注/评论)
python stats.py --today    # 今天
python stats.py --days 7   # 近 7 天
python stats.py --target           # 目标号互动汇总(按号 + 按目标)
python stats.py --target --today   # 今天的目标号互动(可配合 --today/--days)

# 点赞动作诊断(浏览器已打开时也可用)
python test_like.py

# 评论动作诊断:找高评论视频、dump 选择器 HTML、试发评论
python test_comment.py                  # 找 >1000 评论的视频并试发
python test_comment.py --min 100 --no-post   # 调低门槛、只定位不发评论

评论池在 config/comments.txt,每行一条。养号阶段仅评论“评论数 > min_video_comments” 的高流量视频,每 session 最多 1~2 条,降低被判垃圾评论的风险。

目标号互动(捧场自家品牌)

participants 里的号每次 session 先刷 FYP,再去检查目标官方号有没有新视频, 按概率点赞/评论。配置在 accounts.yamltarget_accounts 段:

target_accounts:
  enabled: true
  handles: [brand_account_1, brand_account_2, brand_account_3]   # 目标官方号
  participants: [tiktok_example_6, ..., tiktok_example_15]   # 执行号(10 个)
  first_run_latest_n: 1       # 无记录时只处理最新 1 条
  max_videos_per_run: 3       # 单次单目标最多处理几条新视频
  like_probability: 0.9
  comment_probability: 0.5    # 不强制全员评论,打散抱团
  comments_file: comments_brand.txt
  follow: true                # 关注目标号(每号对每个目标只关一次)
  follow_probability: 0.5     # 遇到未关注的目标按此概率关注(分散到不同天)

关注目标号:参与号还会关注这几个品牌官方号——每号对每个目标只关一次target_follows 表记录,关过/已关就不再关),且按概率分散到不同天完成,不是 10 个号同一天一起关。关注状态经校验(按钮文案变 Following / 关注键消失才算成功), 失败不记录、下次可重试。

判新机制:抓目标号主页每条视频 URL 里的 video_id(雪花号,越大越新), 与 SQLite target_engagements 表里的水位线(该号对该目标已处理过的最大 id)比对, id > 水位线 才算新。置顶旧视频因 id 较小不会被误判为新。某号对某目标无记录时 只处理最新 1 条作为起点,之后每天自然跟进新发布的,同一天多次触发不会重复处理。

⚠️ 10 个号集中给同一品牌点赞/评论本质是「互动抱团」,是平台重点打击对象。 已内置缓解:点赞/评论各自独立按概率(非全员)、班次错峰、每次先刷 FYP 混淆。 建议先用 23 个号灰度 23 天,确认点赞/评论留存(没被限流回滚)再扩到 10 个。

定时调度

cd src
python scheduler.py

启动后每天 00:05 为每个账号在它自己的 active_hours 内随机生成 fires_per_day 个触发时间,每次只跑那一个账号。服务监听 127.0.0.1:9601

  • GET /health — 查看已排期的触发时间、锁状态
  • 触发前自动探测 BitBrowser API,不可达则跳过本次
  • 进程内串行:同一时刻只驱动一个 profile(session_lock
  • 调度与手动 python main.py 通过 data/run.lock 互斥,不会同时跑

共享 IP 错峰(班次模型):20 号 / 10 IP 时,每个 IP 挂 2 个号——一个排上午班 [[9,12]]、一个排晚上班 [[19,23]]。两班次时间不重叠,所以同一 IP 的两个号绝不会 同时在线(隔离靠 active_hours 错班,配合进程内 session_lock 串行执行)。

  • ip_group:同一个 IP 的两个号填相同字母(A~J),仅用于启动校验——若同 IP 的 两个号被排进重叠的 active_hours,scheduler 启动时会告警。
  • active_hours:决定账号属于哪个班次。

默认 accounts.yaml 已是 20 号 / 2 班次模板,仅 tiktok_1 启用;填好各号的 bitbrowser_profile_id 并把 enabledtrue 即可逐个上线。

通知(可选)

config/accounts.yamlnotify 段默认关闭。开启后每批结束推送 OK/ERR 摘要, 支持 ServerChan / Bark / 通用 Webhook。

注意

  • profile 同一时间只能在一台机器打开,切勿本机与云电脑同时登录同一 BitBrowser 账号。

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages