## 现象 1. 使用 `python -m sau_cli douyin login --account <name> --headless` 或 `kuaishou login --account <name> --headless` 生成二维码并扫码后,**终端一直等到 200 秒超时**,而抖音 App 端提示「该二维码异常」。 2. 即便二维码流程“成功”,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;" -> 仍为空。 ``` ## 根因分析(与调试结论一致) 1. **headless 浏览器被识别为自动化环境**:默认 SAU 走 `playwright.chromium.launch(headless=True, channel="chromium")`,浏览器带有可被抖音/快手识别的自动化特征(`--remote-debugging-pipe`、`navigator.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 UI**:`sau_cli.py` 新增 `register_cli_cookie_to_webui(platform, account_name, cookie_path)`,把 cookie 复制到 `cookiesFile/<uuid>.json` 并 `INSERT`/`UPDATE` `user_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
现象
python -m sau_cli douyin login --account <name> --headless或kuaishou login --account <name> --headless生成二维码并扫码后,终端一直等到 200 秒超时,而抖音 App 端提示「该二维码异常」。cookies/<platform>_<account>.json,不会更新db/database.db的user_info表,所以 Web UI 的账号管理页面(/getAccounts、/getValidAccounts)始终为空,前端看不到账号。复现步骤
根因分析(与调试结论一致)
playwright.chromium.launch(headless=True, channel="chromium"),浏览器带有可被抖音/快手识别的自动化特征(--remote-debugging-pipe、navigator.webdriver等),即使加--headed在 WSL 下也常被风控识别。uploader/douyin_uploader/main.py::_is_douyin_login_completed原本只判断page.url.startswith("https://creator.douyin.com/creator-micro/home"),但抖音/快手是 SPA,扫码后 URL 不一定跳到home,且只看 URL 不看 Cookie 容易误判。sau_cli.py把 cookie 写到cookies/<platform>_<account>.json,后端 Web UI 账号表走db/database.db.user_info+cookiesFile/<uuid>.json,两条链路互不打通。建议修复方向(已在本机 fork 验证可行)
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 跳转。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。提议
sau_cli.py里只接受register_cli_cookie_to_webui这一个LICENSE文件,PR 合并前可能需要先确认一下 license 影响。复现环境