CLI 抖音/快手 headless 登录被平台识别为自动化,二维码扫码后被作废;同时 CLI 登录不会自动同步到 Web UI 账号表
Author: DerekEXSCreated Jun 11, 2026Updated Sep 6, 2026
现象
- 使用
python -m sau_cli douyin login --account <name> --headless或kuaishou login --account <name> --headless生成二维码并扫码后,终端一直等到 200 秒超时,而抖音 App 端提示「该二维码异常」。 - 即便二维码流程“成功”,CLI 也只写入
cookies/<platform>_<account>.json,不会更新db/database.db的user_info表,所以 Web UI 的账号管理页面(/getAccounts、/getValidAccounts)始终为空,前端看不到账号。
复现步骤
cd social-auto-upload
python -m sau_cli douyin login --account demo --headless
# 终端生成二维码并打印等待;
# 抖音 App 扫码 -> 提示“二维码异常”;
# 进程等到 200 秒超时退出;
# sqlite3 db/database.db "SELECT * FROM user_info;" -> 仍为空。根因分析(与调试结论一致)
- headless 浏览器被识别为自动化环境:默认 SAU 走
playwright.chromium.launch(headless=True, channel="chromium"),浏览器带有可被抖音/快手识别的自动化特征(--remote-debugging-pipe、navigator.webdriver等),即使加--headed在 WSL 下也常被风控识别。 - URL 跳转判定不稳:
uploader/douyin_uploader/main.py::_is_douyin_login_completed原本只判断page.url.startswith("https://creator.douyin.com/creator-micro/home"),但抖音/快手是 SPA,扫码后 URL 不一定跳到home,且只看 URL 不看 Cookie 容易误判。 - CLI 与 Web UI 存储分离:
sau_cli.py把 cookie 写到cookies/<platform>_<account>.json,后端 Web UI 账号表走db/database.db.user_info+cookiesFile/<uuid>.json,两条链路互不打通。
建议修复方向(已在本机 fork 验证可行)
- 抖音/快手登录支持 CDP 模式:为
douyin_setup/ks_setup增加cdp_url参数;CLI 新增--cdp-url http://127.0.0.1:9222选项;这样可以复用本地真实 Chrome 进程,绕过 headless 反爬。 _is_douyin_login_completed改为检测 Cookie:只看page.context.cookies()里是否出现登录态 Cookie(如sessionid),不再依赖 URL 跳转。- CLI 登录成功后自动注册到 Web UI:
sau_cli.py新增register_cli_cookie_to_webui(platform, account_name, cookie_path),把 cookie 复制到cookiesFile/<uuid>.json并INSERT/UPDATEuser_info,status=1。平台 type 映射建议沿用现有:xiaohongshu=1, tencent=2, douyin=3, kuaishou=4。
提议
- 我已经在本机 fork 上完整实现了以上三处改动,并通过了最小回归测试。
- 请问维护者倾向:
- (A) 直接接受 PR(可以拆成 3 个独立 PR)
- (B) 在
sau_cli.py里只接受register_cli_cookie_to_webui这一个 - (C) 维持现状,需要本机 fork 自维护
- 顺带提一句:上游似乎没有
LICENSE文件,PR 合并前可能需要先确认一下 license 影响。
复现环境
- SAU 仓库:dreammis/social-auto-upload
- 复现平台:抖音、快手(其它平台未验证)
- 浏览器:Patchright 自带 Chromium(headless)— 被风控;本地真实 Chrome via CDP — 可成功
- Python:3.13
Source: dreammis/social-auto-upload