✅ 一、总体目标
这个脚本是一个自动上传视频到微信视频号平台的程序,具备以下功能:
-
自动打开浏览器、登录微信视频号平台
-
监听 Redis 任务队列(zset)
-
解析任务、上传视频、填写信息并发表
-
自动重试失败任务、记录日志
-
支持定时刷新页面保持会话有效
✅ 二、功能模块分析
1. 浏览器初始化
-
使用 Playwright + 本地用户数据目录(保持登录态)
-
自动导航到微信视频号发布页面
-
检测是否已登录,等待用户扫码(最长2分钟)
2. 任务调度与来源
-
任务来自 Redis 的
upload_tasks
zset,结构是:{ "video": "xxx.mp4", "desc": "视频描述", "title": "短标题"(可选) }
-
使用
zrangebyscore
获取“到期”的任务(基于时间戳) -
每隔 60 秒检查一次 Redis 是否有新任务
3. 视频上传核心流程
-
进入上传页面
https://channels.weixin.qq.com/platform/post/create
-
检查是否已经登录(多个选择器判断)
-
上传视频(避免触发系统上传框 ✅)
-
填写:
-
视频描述(富文本区域)
-
合集(通过合集标题点击)
-
视频短标题
-
勾选选项(如原创、声明等)
-
4. 发布视频
-
检查所有必要字段
-
声明原创
-
点击“发表”按钮
-
发表后重新跳转到创建页,准备下一个任务
5. 任务容错与重试机制
-
每个任务最多重试 3 次
-
Redis 中用
task_fail_count:{video}
来记录失败次数 -
成功上传后自动从 Redis 移除任务并清除失败记录
6. 会话保活
-
每 5 分钟刷新页面,保持登录状态,避免 session 过期
-
会在后台定期执行
self.page.goto(...)
并检测是否仍在登录状态
7. 日志记录和调试
-
所有操作记录都写入日志文件
upload.log
-
出现异常时:
-
自动截图页面
upload_fail_screenshot.png
-
保存 HTML 源码
upload_fail_page.html
-
也有
task_start_screenshot.png
和task_start_page.html
供分析用
-
✅ 三、技术栈总结
技术 | 用途 |
---|---|
Playwright | 浏览器自动化 |
Redis | 任务队列 |
schedule | 定时刷新页面 |
logging | 日志记录 |
JSON | 任务结构 |
Pathlib / time | 文件管理与时间调度 |
✅ 四、适用场景
这个脚本特别适合用于:
-
批量发布视频到微信视频号
-
构建无人值守的视频内容发布系统
-
与其它系统(比如视频生成、剪辑、AI语音)集成做全流程自动化
直接上代码,上传任务从redis获取。
任务生成
import redis
import time
import json
from datetime import datetime ,timedelta
# 初始化 Redis 客户端(默认本地)
r = redis.Redis(host='192.168.250.249', port=6379, db=5, decode_responses=True)
def push_upload_task(video_path, description, title, upload_time):
task = {
"video": video_path,
"desc": description,
"title": title
}
score = int(upload_time.timestamp())
r.zadd("upload_tasks", {json.dumps(task, ensure_ascii=False): score})
upload_time = datetime.now() + timedelta(minutes=1) # 10分钟后上传
push_upload_task("output\\2025-04-25\\20250425-8.mp4","今天是2025年04月25日,星期五,农历乙巳年三月二十八,早安。失败不是终点,而是梦想路上温柔的转折。每一次跌倒都是大地在教 你如何更稳地站立,每一道伤痕都在雕刻更坚韧的自己。愿你在风雨中依然相信,所有失去的都会以另一种方式归来。加油","早安是什么意思和含义",upload_time)
from playwright.sync_api import sync_playwright
import time
import schedule
i