抖音自动发布完整指南
📋 三种发布方式对比
| 方式 | 原理 | 依赖 | 当前可用性 | 推荐度 |
|---|---|---|---|---|
| H5 OAuth | 官方API授权发布 | 开放平台企业认证 | ❌ 不可用 | ⭐ |
| Selenium自动化 | 浏览器自动化操控 | Chrome调试模式 | ✅ 可用 | ⭐⭐⭐⭐⭐ |
| 工作流审批 | 管理层包装 | 依赖上述任一方式 | ✅ 可用 | ⭐⭐⭐⭐ |
🚀 方式1:H5 OAuth 发布(暂不可用)
为什么不可用?
你的描述完全正确:
- ✅ 需要抖音开放平台企业认证
- ✅ 需要配置回调域名白名单
- ✅ 需要申请视频发布权限(部分企业才能获批)
- ❌ 你当前无法使用:公司资质限制 + 仅认证URL可用授权登录功能
技术接口
虽然暂不可用,但代码已实现:
- 上传:
POST /api/open/douyin/h5/upload - 发布:
POST /api/open/douyin/h5/create
✅ 方式2:Selenium 自动化发布(推荐)
核心原理
你的理解需要纠正:
❌ 错误理解:
"应用唤起Selenium,由我扫码授权后进入发布流程"
✅ 正确原理:
mermaid
graph TB
A[你手动启动Chrome调试模式] --> B[你手动登录抖音创作者平台]
B --> C[保持浏览器登录状态不要关]
C --> D[启动Publisher服务]
D --> E[前端触发发布]
E --> F[Selenium attach到Chrome]
F --> G[自动上传视频]
G --> H[自动填写标题描述]
H --> I[自动点击发布按钮]关键点:
- 不需要扫码授权:你提前在Chrome中手动登录(扫码只需一次)
- 保持登录状态:Chrome一直开着,不要退出登录
- Selenium控制浏览器:通过Chrome的远程调试端口自动操控
- 完全独立运行:与OAuth无关,无需开放平台授权
完整配置步骤
步骤1:启动Chrome调试模式
bash
# macOS
/Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome \
--remote-debugging-port=9222 \
--user-data-dir=~/chrome-douyin-profile
# 验证调试端口(浏览器访问)
# chrome://inspect/#devices重要提示:
--user-data-dir指定独立配置文件夹,避免与日常Chrome冲突- 一直保持这个Chrome窗口开启
步骤2:手动登录抖音创作者平台
- 在上述Chrome中访问:
https://creator.douyin.com - 扫码登录(用抖音APP扫码)
- 保持登录状态,不要关闭浏览器
步骤3:启动Publisher服务
bash
cd /Users/mzy/docker/dnmp/www/stooland/publisher
# 激活虚拟环境(如果没有则创建)
python3 -m venv .venv
source .venv/bin/activate
# 安装依赖
pip install -r requirements.txt
# 启动服务
uvicorn app.main:app --host 0.0.0.0 --port 8100验证服务:
- 浏览器访问:
http://localhost:8100/health - 应返回:
{"status":"ok"}
步骤4:配置数据库账号
在MySQL数据库 aigc_publish_accounts 表中添加:
sql
INSERT INTO `aigc_publish_accounts`
(`platform`, `account_id`, `account_name`, `credentials`, `status`)
VALUES
('douyin',
'default',
'我的抖音号',
'{
"browser": "chrome",
"debug_port": "9222",
"upload_url": "https://creator.douyin.com/creator-micro/uploader"
}',
'active');字段说明:
platform: 固定为douyinaccount_id: 唯一标识,代码中使用defaultcredentials.browser: 固定为chromecredentials.debug_port: 与Chrome启动参数一致credentials.upload_url: 抖音上传页面地址
步骤5:前端启用自动发布
在分镜合成页面:
- 打开 FFmpeg 合成视频 对话框
- 滚动到 📤 发布设置 区域
- 开启 自动发布抖音 开关
- 点击 开始合成
流程:
合成视频 → 保存到数据库 → 创建发布工作流 → 自动审批 → Selenium自动发布代码集成示例
如果你想在其他地方调用:
javascript
// 手动触发发布
async publishToDouyin() {
const { createPublishWorkflow, approvePublishWorkflow } =
await import('@/api/publisher-api.js')
// 1. 创建工作流
const createResp = await createPublishWorkflow({
video_url: this.mediaUrl, // FFmpeg合成的视频OSS链接
title: '我的短视频标题',
description: '视频描述文案',
targets: [{
platform: 'douyin',
account_id: 'default' // 对应数据库中的account_id
}]
})
const runId = createResp.run_id
// 2. 自动审批并发布
await approvePublishWorkflow(runId, { decision: 'APPROVE' })
// Selenium会自动:
// - attach到Chrome浏览器(端口9222)
// - 打开上传页面
// - 选择视频文件
// - 填写标题和描述
// - 点击发布按钮
}🔄 方式3:工作流审批发布(可选)
你的理解需要纠正
❌ 错误理解:
"第三种方式依赖于第一和第二方式才能实现"
✅ 正确理解:
工作流是一个管理层,它可以调用任何发布方式:
工作流审批系统(管理层)
├── 后端选项1: Selenium自动化 ✅(当前可用)
├── 后端选项2: OAuth API发布 ❌(你无法用)
├── 后端选项3: 手动发布(DEFERRED状态)✅
└── 后端选项4: 其他平台(快手/视频号等)工作流的价值
- 审批流程:创建 → 审批 → 执行
- 状态跟踪:WAITING_APPROVAL → RUNNING → SUCCESS/FAILED
- 日志记录:每次发布的详细日志
- 支持多平台:一个视频发布到多个平台
使用场景
适用于:
- 需要审批流程的企业场景
- 多人协作发布
- 批量发布到多个平台
不适用于:
- 个人使用
- 需要实时发布
🎯 当前推荐方案
最佳实践:Selenium自动化 + 工作流管理
启动环境(一次性配置):
bash# 终端1:启动Chrome调试模式 /Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome \ --remote-debugging-port=9222 \ --user-data-dir=~/chrome-douyin-profile # 终端2:启动Publisher服务 cd /Users/mzy/docker/dnmp/www/stooland/publisher .venv/bin/python -m uvicorn app.main:app --host 0.0.0.0 --port 8100手动登录抖音(保持登录状态):
- 访问:
https://creator.douyin.com - 扫码登录
- 访问:
前端启用自动发布:
- 开启 自动发布抖音 开关
- 开始合成
📊 完整流程图
mermaid
graph TB
A[分镜编辑完成] --> B[开启自动发布开关]
B --> C[开始FFmpeg合成]
C --> D{合成是否成功?}
D -->|成功| E[保存到数据库]
D -->|失败| F[显示错误]
E --> G[创建发布工作流]
G --> H[自动审批]
H --> I[Selenium attach Chrome]
I --> J[自动打开上传页]
J --> K[自动选择视频]
K --> L[自动填写标题/描述]
L --> M[自动点击发布]
M --> N{发布是否成功?}
N -->|成功| O[显示成功提示]
N -->|失败| P[显示错误日志]🔧 故障排查
问题1:Selenium连接失败
症状:提示无法连接到Chrome
解决方案:
bash
# 检查Chrome是否在9222端口运行
lsof -i :9222
# 如果没有,重新启动Chrome调试模式
/Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome \
--remote-debugging-port=9222 \
--user-data-dir=~/chrome-douyin-profile问题2:Publisher服务未启动
症状:前端提示"发布服务调用失败"
解决方案:
bash
# 检查Publisher是否在8100端口运行
lsof -i :8100
# 如果没有,启动服务
cd /Users/mzy/docker/dnmp/www/stooland/publisher
.venv/bin/python -m uvicorn app.main:app --host 0.0.0.0 --port 8100问题3:数据库账号未配置
症状:提示"missing credentials for Douyin account"
解决方案:
sql
-- 检查账号是否存在
SELECT * FROM aigc_publish_accounts WHERE platform='douyin';
-- 如果没有,插入配置
INSERT INTO aigc_publish_accounts
(platform, account_id, account_name, credentials, status)
VALUES
('douyin', 'default', '我的抖音号',
'{"browser":"chrome","debug_port":"9222"}',
'active');问题4:Chrome未登录抖音
症状:Selenium打开页面后显示登录界面
解决方案:
- 在Chrome中手动访问:
https://creator.douyin.com - 扫码登录
- 不要关闭浏览器
- 重新触发发布
⚠️ 注意事项
Chrome不能关闭
- 一旦关闭,登录状态丢失
- 需要重新扫码登录
Publisher服务常驻
- 建议用PM2或systemd守护进程
- 或在需要时手动启动
账号安全
- Chrome调试模式存在安全风险
- 仅在可信环境使用
- 不要在公共网络运行
发布频率
- 遵守抖音发布频率限制
- 避免短时间内大量发布
📝 总结
你的三个疑问解答
第一种H5 OAuth发布
- ✅ 你的理解完全正确
- ❌ 当前确实无法使用(公司资质限制)
第二种Selenium发布
- ❌ 你的理解有偏差
- ✅ 正确:提前手动登录,Selenium自动操控浏览器
- ❌ 错误:不是"应用唤起Selenium扫码"
第三种工作流发布
- ❌ 你的理解有误
- ✅ 正确:工作流是管理层,可独立使用
- ✅ 它调用Selenium作为后端,不依赖OAuth
🎉 立即开始
执行以下命令即可开始自动发布:
bash
# 1. 启动Chrome(新终端)
/Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome \
--remote-debugging-port=9222 \
--user-data-dir=~/chrome-douyin-profile
# 2. 手动登录抖音创作者平台
# 浏览器访问:https://creator.douyin.com
# 3. 启动Publisher服务(新终端)
cd /Users/mzy/docker/dnmp/www/stooland/publisher
.venv/bin/python -m uvicorn app.main:app --host 0.0.0.0 --port 8100
# 4. 前端开启自动发布
# 分镜页面 → FFmpeg合成视频 → 开启"自动发布抖音" → 开始合成完成!🎊