抖音 / 快手 / B站 三平台一条视频批量发布,支持自定义标题、话题、封面,以及立即发布 / 定时发布。
分享或发布前必看:
profile/里保存的是你的登录 Cookie,logs/、gui-state.json、history.json里可能有你的账号、视频路径和标题。打包给别人时不要带上这些内容, 否则等于把账号交出去。.venv/是本机依赖,也不要打包。 只发布代码、LICENSE、config.json、README.md、requirements.txt、setup.*和两个.bat即可。
不依赖浏览器扩展:用 Playwright 直接驱动本机 Chrome(优先)或 Edge,登录态保存在
本地 profile/ 目录里,扫码登录一次即可长期复用。
| 旧版 bsk 版 | 本版 Playwright 版 | |
|---|---|---|
| 依赖 | bsk CLI + 浏览器扩展必须保持 connected |
只要本机有 Chrome/Edge |
| 登录态 | 依赖你日常浏览器的已登录状态 | 独立 profile,互不干扰 |
| 传文件 | 模拟拖拽到上传区 | 直接写入 <input type=file>,更稳 |
| 日志 | 只在窗口里 | logs/时间戳-任务/ 下留存 + 每步截图 |
| 调试 | 页面改版只能盲猜 | 失败时自动截图 + 存 DOM 快照 |
多平台发布器/
├── setup.bat 一键安装(推荐)
├── setup.ps1 安装脚本:创建 .venv、装依赖、建桌面快捷方式
├── cli.py 命令行入口(doctor / login / publish)
├── gui.py 图形界面
├── 启动.bat 双击开图形界面
├── 登录.bat 双击扫码登录
├── requirements.txt 依赖清单
├── LICENSE MIT 许可证
├── config.json 默认话题预设
├── gui-state.json 上次填写的字段(自动生成)
├── history.json 历史模板:标题 / 文案 / 各平台话题(自动生成)
├── core/
│ ├── __init__.py 版本号
│ ├── browser.py 浏览器启动与 profile 管理
│ ├── steps.py 点击 / 填写 / 上传 / 等待等通用动作
│ └── log.py 日志与截图
├── platforms/
│ ├── __init__.py
│ ├── base.py 任务数据结构与平台基类
│ ├── bilibili.py B站投稿
│ ├── kuaishou.py 快手发布
│ └── douyin.py 抖音发布
├── .github/workflows/ GitHub Actions 语法检查
├── profile/ 登录态(勿提交、勿分享、勿删除)
└── logs/ 每次运行的日志与截图
- 下载本仓库(GitHub 页面点 Code → Download ZIP)并解压,或者
git clone。 - 双击
setup.bat。 - 安装完成后,双击桌面上的「多平台视频发布器」,或项目里的
启动.bat。 - 首次使用双击
登录.bat,三个平台各扫码一次。
setup.bat 会:
- 检查 Python 3.9+(推荐 3.11)
- 在项目里创建独立虚拟环境
.venv,不污染系统 Python - 安装
requirements.txt里的 Playwright / Pillow - 运行
python cli.py doctor做环境自检 - 创建桌面快捷方式
安装脚本可以重复运行;如果只想装依赖、不要桌面快捷方式:
setup.bat -NoShortcut如果自动安装失败,也可以手动执行下面的命令。
cd D:\dsh\多平台发布器 # 换成你的实际目录
# 0. 安装依赖(只需一次)
pip install -r requirements.txt
# 1. 自检
python cli.py doctor
# 2. 登录:会弹出浏览器,三个平台各扫码一次,登好会自动结束
python cli.py login
# 3. 试跑:填好就停,页面保持打开
python cli.py publish --video "D:\v\测试.mp4" --title "测试标题"不想敲命令:双击 登录.bat 即可,效果一样。浏览器会自己弹出来,
里面有三个标签页(B站 / 快手 / 抖音),用手机 App 扫码登录,三个都登好后
窗口自动结束,不需要按回车。默认最多等 10 分钟,--timeout 秒数 可调。
试跑时会依次打开三个平台,把标题、话题、封面、定时都填好,停在提交前不动。 去浏览器里肉眼检查一遍,没问题自己点发布。
python cli.py publish `
--video "D:\v\今日.mp4" `
--cover "D:\v\今日-封面.jpg" `
--title "不断杀" `
--desc "今天这局有点东西" `
--bili-tags "三国杀,桌游棋牌" `
--ks-topics "#三国杀 #三国杀锦囊妙会" `
--dy-topics "#三国杀 #随时随地杀一下" `
--date 2026-10-21 --time 06:00常用参数:
| 参数 | 说明 |
|---|---|
| (默认) | 填完就停,页面无限期保持,你自己在网页上点发布 |
--auto |
填完直接自动提交(建议只在选择器稳定后使用) |
--platforms bili,douyin |
只发指定平台,默认三个全发 |
--hold |
同上默认行为,写不写都一样 |
--date / --time |
定时发布,默认明天 06:00 |
--now |
立即发布:三个平台都不设定时,忽略 --date / --time |
--desc |
文案(默认同标题);B站简介 / 快手描述 / 抖音作品描述(与标题不同时才写入抖音) |
--bili-tags |
B站标签,逗号分隔 |
--bili-topic |
B站「参与话题」,逗号分隔 |
--ks-topics |
快手话题,# 开头空格分隔 |
--dy-topics |
抖音话题,# 开头空格分隔 |
--cover |
封面图片;不填就用平台推荐的封面(B站用系统推荐第一张,快手挑最亮的一张,抖音点第一张智能推荐) |
话题默认值写在 config.json 的 defaults 里(键名见上面的参数表;发布包默认是空的,填上就会自动带上),命令行传了就以命令行为准。
| 情况 | 实际行为 |
|---|---|
| 指定了封面图 | 三个平台都上传这张图,走平台自己的裁剪确认 |
| 没指定封面 | B站点「系统推荐封面」里最上面那张;快手从「智能推荐封面」里挑最亮的一张;抖音点「Ai智能推荐封面」第一张并确认 |
快手推荐位的第一张常常就是视频开头的黑帧,所以按亮度挑,避免出来还是全黑。
快手指定封面时会走「封面截取 → 上传封面 → 确认」:程序会等「上传封面」标签真正切过去(页面多挂一个图片输入框)再塞图,最后比对封面缩略图确认真的换了。日志里如果出现「封面没生效」,说明平台这次没接住,请在网页上手动补一下封面。
三个平台的话题用空格分开就行,# 可以不写,程序会自动补上:
#三国杀#三国杀锦囊妙会 #随时随地杀一下#三国杀将星筑梦
上面这串会拆成 4 个话题:#三国杀 #三国杀锦囊妙会 #随时随地杀一下 #三国杀将星筑梦。
逗号、顿号、分号(中英文)也都能当分隔符。
- 抖音 / 快手:打完会校验是不是真的变成了话题胶囊,没变的会在日志里点名(多半是平台里没这个话题)
- B站:走「搜索更多话题」,先找名字完全一样的,找不到就选播放量最高的那个,日志里会写清楚选了哪个 (比如搜「三国杀」,平台里没有正好叫「三国杀」的话题,就会选到「我爱三国杀 1870万次播放」这类)
双击 启动.bat,或:
python gui.py流程就是五步:
- 选视频、封面(封面可留空,留空就用平台推荐封面),填标题和三个平台各自的话题
- 选「发布方式」:立即发布 / 定时发布;定时发布时用下拉框挑时间,日期有「今天 / 明天」快捷键
- 勾平台,选「跑完之后」的方式(默认第一项)
- 点「开始填表」,等日志打到最后
- 切到 Chrome/Edge 窗口,逐个标签页核对,自己点「发布 / 立即投稿」
「发布方式」两个选项:
| 选项 | 行为 |
|---|---|
| 立即发布 | 三个平台都切到「立即发布」,不设日期时间,页面上点发布就当场发出 |
| 定时发布 | 按设定的日期时间定时,抖音要求 ≥2 小时且 ≤14 天 |
「跑完之后」两个选项:
| 选项 | 行为 |
|---|---|
| 填好就停,页面保持打开,我自己点发布(默认) | 填完三个平台后进程挂住,页面不限时保持,不自动提交。关掉浏览器后程序自动退出 |
| 填好并自动提交 | 填完直接点提交,适合已经验证过、信任选择器的时候;点「开始填表」后会再弹一次确认 |
几点说明:
- 日期每次打开都默认明天,不会沿用上次的旧日期;其他字段记住上次输入
(存在
gui-state.json),包括选的是立即还是定时 - 定时时间是个下拉框:
06:00 / 07:00 / 08:00 / 09:00 / 10:00 / 12:00 / 16:00 / 17:00 / 18:00 / 19:00 / 20:00 / 21:00 / 22:00 / 23:00点一下就行,也可以直接在框里改成任意HH:MM - 选「立即发布」时,日期/时间控件会变灰,避免误填
- 历史记录:每次点「开始填表」自动把这一套标题、文案、三个平台话题存成一条 模板(下拉列表里按时间倒序,最多 50 条)。下次直接从下拉里选一条,标题和话题 自动回填,视频和封面只在原文件还在时才跟着换。也可以不跑任务、直接点 「存为模板」;选中一条后点「删除」可以清理
- 任务跑着的时候关掉图形界面窗口,不会停止后台任务,浏览器仍然开着
- 日志按颜色区分:绿色是通过、黄色是警告、红色是错误;右上角显示已用时间。 跑飞了点「停止」会连浏览器一起关掉(会先确认)
- 底部「重新登录」会另开一个窗口跑
cli.py login
每次运行都会生成 logs\<时间戳>-publish\:
run.log— 完整输出bili-01-open.png… — 各阶段截图xxx-crashed.png— 崩溃现场
定位方法:看最后一张截图停在哪个界面,就知道卡在哪一步;对照 run.log
里最后一条 [!!] 警告。常见三类:
- 找不到上传入口 → 平台改版了,改
platforms/<平台>.py顶部的选择器常量 - 标题/描述填不进去 → 同上,该平台的选择器元组里加一条新写法
- 定时没设上 → 日期面板结构变了,通常是日期格子或时间列的 class 改名
截图偶尔会超时(平台页面渲染卡住时),程序会在同一页面连续失败 3 次后 自动跳过后续截图,避免整轮任务被拖慢;这时以
run.log为准。
改完照常跑一遍,填完页面会停住,肉眼核对即可,不用真发。
- 串行发布:同一个浏览器里三个平台依次跑,一条视频大约 3–8 分钟(取决于体积)
- 需要登录态有效:登录过期会卡在登录页,重跑
python cli.py login - profile 独占:上一次的浏览器窗口没关时,新任务会直接提示「profile 被占用」并退出, 先关掉旧窗口再跑(不会卡在启动阶段干等;Chrome 和 Edge 都会检查)
- 自动提交有风险:页面改版后可能点错位置,正式发布建议用默认的「填好就停」
- 风控:脚本已做基础反检测(去
webdriver标记、真实 profile、慢速操作), 但高频发布仍可能触发平台验证,遇到验证码需要手动过一次 - 定时时间:必须晚于当前时间,否则平台会拒绝(选「立即发布」则不受此限制)
- 平台改版:DOM 一变就要修选择器,这是所有非官方 API 方案的共同成本
- Windows 10/11
- Python 3.9+(推荐 3.11)
- Chrome 或 Edge(优先用 Chrome,装一个即可)
- Playwright / Pillow:双击
setup.bat会自动装好,也可以手动运行pip install -r requirements.txt
Pillow 用于快手推荐封面按亮度挑选、以及封面是否真的换了的校验; 不装也能跑,但这两处会退化。
不需要 playwright install——直接用系统浏览器。
-
python cli.py doctor通过 - 用一条测试视频跑一遍默认模式,三个平台都能填到提交前
- 不要把
profile/、logs/、gui-state.json、history.json、__pycache__/、.venv/打进发布包 -
config.json里的默认话题改成通用示例,或确认可以公开 - 在干净目录双击
setup.bat,确认能安装并创建快捷方式 - LICENSE 已使用 MIT,如需其他许可证请自行替换
本工具通过浏览器自动化操作平台页面,不是官方 API。使用可能违反平台服务条款, 并带来账号风控风险。请先用小号测试,发布前人工核对,风险自负。
本项目使用 MIT License。