Skip to content

抖音自动发布完整指南

📋 三种发布方式对比

方式原理依赖当前可用性推荐度
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[自动点击发布按钮]

关键点

  1. 不需要扫码授权:你提前在Chrome中手动登录(扫码只需一次)
  2. 保持登录状态:Chrome一直开着,不要退出登录
  3. Selenium控制浏览器:通过Chrome的远程调试端口自动操控
  4. 完全独立运行:与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:手动登录抖音创作者平台

  1. 在上述Chrome中访问:https://creator.douyin.com
  2. 扫码登录(用抖音APP扫码)
  3. 保持登录状态,不要关闭浏览器

步骤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: 固定为 douyin
  • account_id: 唯一标识,代码中使用 default
  • credentials.browser: 固定为 chrome
  • credentials.debug_port: 与Chrome启动参数一致
  • credentials.upload_url: 抖音上传页面地址

步骤5:前端启用自动发布

在分镜合成页面:

  1. 打开 FFmpeg 合成视频 对话框
  2. 滚动到 📤 发布设置 区域
  3. 开启 自动发布抖音 开关
  4. 点击 开始合成

流程

合成视频 → 保存到数据库 → 创建发布工作流 → 自动审批 → 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: 其他平台(快手/视频号等)

工作流的价值

  1. 审批流程:创建 → 审批 → 执行
  2. 状态跟踪:WAITING_APPROVAL → RUNNING → SUCCESS/FAILED
  3. 日志记录:每次发布的详细日志
  4. 支持多平台:一个视频发布到多个平台

使用场景

适用于

  • 需要审批流程的企业场景
  • 多人协作发布
  • 批量发布到多个平台

不适用于

  • 个人使用
  • 需要实时发布

🎯 当前推荐方案

最佳实践:Selenium自动化 + 工作流管理

  1. 启动环境(一次性配置):

    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
  2. 手动登录抖音(保持登录状态):

    • 访问:https://creator.douyin.com
    • 扫码登录
  3. 前端启用自动发布

    • 开启 自动发布抖音 开关
    • 开始合成

📊 完整流程图

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打开页面后显示登录界面

解决方案

  1. 在Chrome中手动访问:https://creator.douyin.com
  2. 扫码登录
  3. 不要关闭浏览器
  4. 重新触发发布

⚠️ 注意事项

  1. Chrome不能关闭

    • 一旦关闭,登录状态丢失
    • 需要重新扫码登录
  2. Publisher服务常驻

    • 建议用PM2或systemd守护进程
    • 或在需要时手动启动
  3. 账号安全

    • Chrome调试模式存在安全风险
    • 仅在可信环境使用
    • 不要在公共网络运行
  4. 发布频率

    • 遵守抖音发布频率限制
    • 避免短时间内大量发布

📝 总结

你的三个疑问解答

  1. 第一种H5 OAuth发布

    • ✅ 你的理解完全正确
    • ❌ 当前确实无法使用(公司资质限制)
  2. 第二种Selenium发布

    • ❌ 你的理解有偏差
    • ✅ 正确:提前手动登录,Selenium自动操控浏览器
    • ❌ 错误:不是"应用唤起Selenium扫码"
  3. 第三种工作流发布

    • ❌ 你的理解有误
    • ✅ 正确:工作流是管理层,可独立使用
    • ✅ 它调用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合成视频 → 开启"自动发布抖音" → 开始合成

完成!🎊