BEST MINDS · EXECUTION NOTE

Douyin Playwright CLI:用 GitHub Actions 每天 00:01 自动跑(不占本地电脑)

2026-01-26 · 个人自动化 / 生产力 · GitHub Actions · Playwright · 登录态

把 _research/douyin-music-create-scheduler 变成云端定时任务:cron、secrets、运行形态与风控边界

结论:可以用 GitHub Actions 的 schedule 在每天 00:01(上海时区)触发,并在一次 Job 内按 10 分钟间隔循环到达日限额;但 GitHub 托管 runner 是数据中心 IP,抖音类站点常见风控(验证码/二次验证)会显著降低稳定性。最稳的路径是:先用 GitHub Actions 验证链路;一旦风控频繁,就切到 self-hosted runner(你自己的小主机/固定环境)并用 Secrets 注入 storageState 登录态。

GitHub ActionsPlaywrightCronstorageStateSelf-hosted runnerXvfb

TL;DR

Trigger
cron @ 00:01
Runner
GitHub-hosted / self-hosted
Auth
storageState (Secret)
Stability
IP & 风控决定

世界上最懂的人会怎么说

Playwright 核心团队视角(工具可靠性)

GitHub Actions 架构师视角(调度与运行模型)

风控/反滥用工程师视角(稳定性边界)

架构图:从 00:01 触发到 Playwright 执行

GitHub Actions schedule / workflow_dispatch Runner ubuntu-latest + Node 20 Your CLI run_pack.mjs → schedule_create_music.mjs → run.mjs Secrets & Runtime Files DOUYIN_STORAGE_STATE_B64 → storageState.json PLAYWRIGHT_BROWSERS_PATH cache Playwright Chromium headed via Xvfb or headless music.douyin.com UI automation → create music flow 关键点:runner 是否“像真人”(IP/验证码)决定可持续性;状态持久化需额外策略。
一次 Job 内部按 10 分钟间隔循环到达日限额;失败时建议输出 trace/har/screenshot 便于定位。

方案对比:把“跑在云端”拆成 4 种实现

评分矩阵(1 低 → 5 高) 维度:稳定性(风控/IP)/ 运维成本 / 可观测性 / 成本 稳定性 运维 可观测 成本 GitHub-hosted runner Self-hosted runner(家里小主机) VPS / 云服务器 runner 本地 Mac 定时(cron) 解读:如果 GitHub-hosted 稳定性不足,优先迁 self-hosted(你可控的 IP/环境)。
这不是“功能能不能跑”的评分,而是“长期每天跑”的评分:IP/验证码是决定性因素。

落地步骤(最短路径)

  1. 把仓库推到 GitHub(工作流必须在仓库根目录的 .github/workflows/)。
  2. 本地登录一次,生成/刷新 3_clone_douyin/tools/douyin-music-playwright/storageState.json(不要提交)。
  3. 把登录态写到 GitHub Secrets:DOUYIN_STORAGE_STATE_B64(base64 单行)。
  4. 默认每天 00:01(上海时区)自动触发;也可以手动触发并传入 packDir
仓库里已经加好的文件
  • .github/workflows/douyin-music-create-scheduler.yml:定时触发 + 安装依赖 + 写入登录态 + 运行任务。
  • _research/douyin-music-create-scheduler/config.github-actions.json:Actions 默认跑的 pack(promptpacks/_daily)。
  • _research/douyin-music-create-scheduler/schedule_create_music.mjs:已修复 Linux runner 的 PLAYWRIGHT_BROWSERS_PATH 默认路径。

运维要点(避免账号风险)

Closing Summary

把这个 Playwright CLI 迁到 GitHub Actions 完全可行;真正的成败点不在代码,而在“登录态与风控”——一旦 GitHub-hosted runner 因 IP/验证码不稳定,立刻迁到 self-hosted runner 才能长期每天跑。

One next action:storageState.json base64 写入 GitHub Secret DOUYIN_STORAGE_STATE_B64,然后在 Actions 手动触发一次验证链路。

“Automation is easy. Reliability is the product.”

OPERATIONS MINDSET