Skip to content

CLI 抖音/快手 headless 登录被平台识别为自动化,二维码扫码后被作废;同时 CLI 登录不会自动同步到 Web UI 账号表 #224

@DerekEXS

Description

@DerekEXS

现象

  1. 使用 python -m sau_cli douyin login --account <name> --headlesskuaishou login --account <name> --headless 生成二维码并扫码后,终端一直等到 200 秒超时,而抖音 App 端提示「该二维码异常」。
  2. 即便二维码流程“成功”,CLI 也只写入 cookies/<platform>_<account>.json不会更新 db/database.dbuser_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;" -> 仍为空。

根因分析(与调试结论一致)

  1. headless 浏览器被识别为自动化环境:默认 SAU 走 playwright.chromium.launch(headless=True, channel="chromium"),浏览器带有可被抖音/快手识别的自动化特征(--remote-debugging-pipenavigator.webdriver 等),即使加 --headed 在 WSL 下也常被风控识别。
  2. 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 容易误判。
  3. CLI 与 Web UI 存储分离sau_cli.py 把 cookie 写到 cookies/<platform>_<account>.json,后端 Web UI 账号表走 db/database.db.user_info + cookiesFile/<uuid>.json,两条链路互不打通。

建议修复方向(已在本机 fork 验证可行)

  1. 抖音/快手登录支持 CDP 模式:为 douyin_setup/ks_setup 增加 cdp_url 参数;CLI 新增 --cdp-url http://127.0.0.1:9222 选项;这样可以复用本地真实 Chrome 进程,绕过 headless 反爬。
  2. _is_douyin_login_completed 改为检测 Cookie:只看 page.context.cookies() 里是否出现登录态 Cookie(如 sessionid),不再依赖 URL 跳转。
  3. CLI 登录成功后自动注册到 Web UIsau_cli.py 新增 register_cli_cookie_to_webui(platform, account_name, cookie_path),把 cookie 复制到 cookiesFile/<uuid>.jsonINSERT/UPDATE user_infostatus=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

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions