一次扫码,长期免登:social-auto-upload 的 Cookie 持久化与登录状态验证指南
2026/9/11 14:39:04 网站建设 项目流程

一次扫码,长期免登:social-auto-upload 的 Cookie 持久化与登录状态验证指南

【免费下载链接】social-auto-upload自动化上传视频到社交媒体:抖音、小红书、视频号、tiktok、youtube、bilibili项目地址: https://gitcode.com/GitHub_Trending/so/social-auto-upload

每次想自动上传视频,都要重新掏手机扫码?social-auto-upload 用 Cookie 持久化把这个麻烦干掉了:扫码后的登录状态会被写成本地 JSON 文件,下次任务直接读取,上传前再花几秒验证它是否还有效。

为什么工具能"记住"你的登录状态

扫码登录成功后,浏览器里其实多了一组带时效的 Cookie,网站靠它认出"这台设备已登录"。social-auto-upload 做的事很直接:趁登录成功,把这组 Cookie 连同浏览器上下文一起存到磁盘上;之后所有自动上传任务都从文件读回登录状态,不再让你重新扫码。一次扫码的收益就被拉长到 Cookie 自然过期为止,而且各平台的文件彼此独立,互不串号。

整体机制:存、验、保三步走

把全流程压缩一下就是三步。存:登录成功瞬间,Playwright(一个驱动浏览器的 Python 库)的 storage_state 接口——相当于给当前浏览器上下文拍一张快照,Cookie、localStorage 都在里面——被序列化成 JSON 文件。验:每次上传启动前,先加载这份文件、打开对应平台的创作者后台,用几秒钟确认登录状态没失效。保:文件按平台、按账号隔离存放,某个账号过期只影响它自己,其余任务照跑。

上图就是加载已有登录状态之后的效果:标题、封面、发布动作全部自动完成,全程没有登录页出现。

存:📦 Cookie 文件存在哪里,怎么按平台隔离

项目里 Cookie 的落盘位置有两套。CLI 主线由 sau_cli.py 里的 resolve_account_file 统一拼路径:cookies/平台_账号名.json,比如执行sau douyin login --account myaccount1会生成cookies/douyin_myaccount1.json,父目录不存在时会自动创建。后台流程则用 UUID v1 作文件名,统一写进cookiesFile/目录,天然避免重名;早期示例脚本还有第三种写法,小红书示例固定读cookies/xiaohongshu_uploader/account.json

真正写文件的动作只有一小段,在 myUtils/login.py 里:

cookies_dir = Path(BASE_DIR / "cookiesFile") cookies_dir.mkdir(exist_ok=True) await context.storage_state(path=cookies_dir / f"{uuid_v1}.json") result = await check_cookie(3, f"{uuid_v1}.json")

前两句准备目录,第三句把当前浏览器上下文整体写进 JSON,最后一句立刻验一遍:验不过就报错、本次登录作废,坏文件进不了系统。

验:🔍 5 秒判断登录状态是否过期

验证入口是 myUtils/auth.py 的 check_cookie,本质是个类型分发器,用 match-case 语法(按参数值分派到不同分支):传 1 走小红书 cookie_auth_xhs,2 走视频号 cookie_auth_tencent,3 走抖音 cookie_auth_douyin,4 走快手 cookie_auth_ks,其他一律返回 False。每个分支套路一致:用 storage_state 把 JSON 里的登录状态灌进一个干净的 Chromium 上下文,打开该平台的创作者页面,然后等 5 秒看它是否把你打回登录页。以抖音为例:

await page.goto("https://creator.douyin.com/creator-micro/content/upload") try: await page.get_by_text("扫码登录").wait_for(timeout=5000) douyin_logger.error("[+] cookie 失效,需要扫码登录") return False except: douyin_logger.success("[+] cookie 有效") return True

5 秒内页面出现"扫码登录"字样,判定失效;没出现就算有效。小红书分支盯的是"手机号登录"和"扫码登录"两个文本,快手、视频号也是"盯一个只有未登录时才可见的元素"的同款思路。

登录态背后就是图里这种带签名的键值对,被原样序列化进 JSON 文件。

各平台行为差异一览

验证一旦没通过,CLI 上传时抛出的错误会直接告诉你下一步该敲什么,以抖音为例:

Douyin cookie is missing or expired: {account_file}. Run `sau douyin login --account {request.account_name}` first.

四个平台的细节差异如下:

平台Cookie 文件路径命名方式失效判定依据失效时的表现
抖音cookies/douyin_{账号}.json平台_账号名5 秒内出现"扫码登录"报错 missing or expired + 重登命令
小红书cookies/xiaohongshu_{账号}.json(旧示例:cookies/xiaohongshu_uploader/account.json平台_账号名出现"手机号登录"或"扫码登录"报错 missing or expired + 重登命令
快手cookies/kuaishou_{账号}.json平台_账号名5 秒内出现"机构服务"元素报错 missing or expired + 重登命令
TikTokcookies/tk_uploader/account.json平台目录+固定文件名页面出现 tiktok 表单容器类名自动打开浏览器等你登录,日志提示[+] cookie file is not existed or expired. Now open the browser auto.

前三个平台的提示风格一致:报错加一条现成的补救命令;TikTok 则是"边提示边自动开浏览器",把补救动作做进了流程里。

日常使用:3 个高频问题

Cookie 过期了怎么办?不用慌,上传前会自动跑一次验证,过期会被直接拦下来,不会带着坏文件往下走。CLI 场景照着报错里的命令重登一次即可:sau douyin login --account myaccount1。TikTok 更省事,检测到文件缺失或过期会自动弹出浏览器等你登录,登录后 storage_state 把新状态写回文件。

同时养多个账号会冲突吗?不会。每个账号名对应一个独立文件,sau douyin login --account myaccount2生成cookies/douyin_myaccount2.json,和 myaccount1 的文件互不覆盖;上传时再用--account指定用哪个号发。

🔒 文件本身要注意什么?它等同于你的账号密码,别放进共享目录,也别转发给任何人;建议给cookies/目录定期备份一份。工具提示过期时及时重登更新,重要账号可以隔段时间手动登录确认状态。

写在最后

存 JSON、验登录页、按账号隔离,social-auto-upload 用这套朴素到近乎直白的 Cookie 持久化方案,换来了"一次扫码、长期免登"的自动上传体验。想深入看源码,重点翻 myUtils/auth.py 里的四个平台验证分支,和 myUtils/login.py 里的落盘与复核流程就够用了。

【免费下载链接】social-auto-upload自动化上传视频到社交媒体:抖音、小红书、视频号、tiktok、youtube、bilibili项目地址: https://gitcode.com/GitHub_Trending/so/social-auto-upload

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询