一个基于 Playwright 和 yt-dlp 的自动化视频下载工具,专门用于批量下载小鹅通平台的视频课程。
- 🎯 自动捕获 - 使用 Playwright 自动拦截并捕获 m3u8 视频地址
- 🔐 登录保持 - 使用持久化浏览器会话,首次登录后自动保存状态
- 📦 批量下载 - 支持批量处理多个视频URL
- 🎬 高清优先 - 自动捕获最高清晰度版本 (f421220)
- 📊 友好界面 - 使用 Rich 库提供美观的终端界面
- 💾 信息保存 - 可选保存捕获的视频信息为 JSON 文件
- ⚡ 并发下载 - 使用 yt-dlp 的并发分片下载加速
macOS (使用 Homebrew):
brew install yt-dlp ffmpegLinux (Ubuntu/Debian):
sudo apt install yt-dlp ffmpegWindows (使用 Scoop):
scoop install yt-dlp ffmpeg或者使用 pip:
pip install yt-dlp# macOS/Linux
curl -LsSf https://astral.sh/uv/install.sh | sh
# Windows
powershell -c "irm https://astral.sh/uv/install.ps1 | iex"# 克隆或进入项目目录
cd fetch-video
# 使用 uv 安装依赖
uv sync
# 安装 Playwright 浏览器驱动
uv run playwright install chromiumuv run python main.py运行程序后,按照提示操作:
-
输入 URL
- 选项 1: 手动输入单个或多个URL(用逗号分隔)
- 选项 2: 从文本文件读取URL列表
-
选择浏览器模式
- 首次运行建议显示浏览器窗口,以便完成登录
- 后续可以使用无头模式(后台运行)
-
等待捕获
- 程序会自动访问每个URL并捕获 m3u8 地址
- 捕获成功后会显示视频列表
-
下载视频
- 确认下载后,程序会自动下载所有视频
- 视频保存在
downloads目录
创建 urls.txt 文件,每行一个URL:
https://appezrn4igg1968.h5.xet.citv.cn/p/course/video/v_xxx1
https://appezrn4igg1968.h5.xet.citv.cn/p/course/video/v_xxx2
https://appezrn4igg1968.h5.xet.citv.cn/p/course/video/v_xxx3
然后运行程序,选择选项 2,输入文件路径。
fetch-video/
├── main.py # 主程序
├── pyproject.toml # 项目配置(uv 管理)
├── README.md # 说明文档
├── .gitignore # Git 忽略文件
├── browser_session/ # 浏览器会话数据(自动生成)
├── downloads/ # 视频下载目录(自动生成)
└── captured_videos.json # 捕获的视频信息(可选生成)
您可以在代码中修改以下参数:
# main.py 中的 VideoDownloader 类初始化
downloader = VideoDownloader(
user_data_dir="./browser_session", # 浏览器会话目录
output_dir="./downloads" # 视频输出目录
)程序支持先捕获视频信息,保存为 JSON,稍后再下载:
from main import VideoDownloader
downloader = VideoDownloader()
urls = ["https://..."]
downloader.capture_video_urls(urls, headless=True)
downloader.save_captured_info("videos.json")修改 download_video 方法中的 yt-dlp 参数:
cmd = [
"yt-dlp",
"--referer", referer,
"--concurrent-fragments", "10", # 增加并发数
"--format", "best", # 指定格式
"--merge-output-format", "mp4", # 合并格式
"-o", output_template,
media_url
]-
首次登录
- 首次运行请选择"显示浏览器窗口"
- 在弹出的浏览器中完成微信/手机号登录
- 登录后会自动保存在
browser_session目录
-
多清晰度
- 程序默认捕获最高清版本(v.f421220)
- 如需其他清晰度,可修改
setup_request_handler中的过滤条件
-
网络问题
- 确保网络稳定
- 下载失败可以重新运行程序,已下载的视频不会重复下载
-
法律声明
- 仅用于下载您已购买/有权访问的课程
- 请勿用于侵权目的
解决方案:
- 确保已登录(使用显示浏览器模式)
- 增加等待时间(修改
page.wait_for_timeout(5000)的值) - 检查 URL 是否正确
解决方案:
- 检查 yt-dlp 和 ffmpeg 是否正确安装
- 查看错误信息,可能是网络问题
- 尝试手动使用 yt-dlp 下载测试
解决方案:
uv run playwright install chromium$ uv run python main.py
# 选择选项 1: 手动输入
# 输入 URL: https://appezrn4igg1968.h5.xet.citv.cn/p/course/video/v_xxx
# 选择显示浏览器: 是
# 等待捕获...
# 确认下载: 是创建 urls.txt:
https://appezrn4igg1968.h5.xet.citv.cn/p/course/video/v_xxx1
https://appezrn4igg1968.h5.xet.citv.cn/p/course/video/v_xxx2
运行:
$ uv run python main.py
# 选择选项 2: 从文件读取
# 输入文件路径: urls.txt
# 选择显示浏览器: 否(如已登录)
# 等待捕获...
# 确认下载: 是欢迎提交 Issue 和 Pull Request!
MIT License
- Playwright - 浏览器自动化
- yt-dlp - 视频下载
- Rich - 终端美化
如有问题或建议,请提交 Issue。
Happy Downloading! 🎉