
本文介绍如何使用 Puppeteer 或 Playwright 等无头浏览器工具,自动化抓取嵌入在 中的动画视频直链,并实现整季多集批量下载,摆脱手动逐个查找 Network 请求的低效操作。
本文介绍如何使用 puppeteer 或 playwright 等无头浏览器工具,自动化抓取嵌入在 `
要实现从类似 https://www.php.cn/link/c60e7d24e22cb7c59788e690275ff4df 这类动画聚合网站中自动下载全部剧集,核心思路是复现并规模化你当前的手动流程:打开页面 → 加载播放器 iframe → 触发视频加载 → 捕获网络请求中的真实 MP4/MP3/M3U8 资源地址 → 下载保存。整个过程无法仅靠静态 HTML 解析完成(因视频链接通常由 JavaScript 动态生成或受防盗链保护),因此需借助浏览器自动化工具。
关键步骤概览
启动无头浏览器并访问目标番剧主页
使用 Puppeteer(Node.js)或 Playwright(支持多语言)加载页面,等待 DOM 就绪,并识别所有“播放页”链接(如第1集、第2集…对应的<a href="/play/xxx"></a>元素)。-
逐集进入播放页,注入逻辑捕获视频资源
对每个播放页:- 等待
<iframe></iframe>加载完成; - 通过
page.setRequestInterception(true)启用请求拦截(Puppeteer)或routeAPI(Playwright),过滤出response.headers['content-type']包含video/、.mp4、.m3u8或application/vnd.apple.mpegurl的请求; - 记录匹配请求的
request.url(),并去重(避免重复捕获分片或预加载资源)。
- 等待
下载并命名视频文件
获取到有效直链后,调用axios/node-fetch或内置page.download()(Playwright v1.40+)下载;建议按番剧名_S01E01.mp4格式命名,提升离线管理效率。
// Puppeteer 示例片段(伪代码)
await page.setRequestInterception(true);
const videoUrls = new Set();
page.on('request', req => {
const url = req.url();
if (/\.mp4(\?.*)?$|\/hls\/.*\.m3u8/i.test(url)) {
videoUrls.add(url);
}
req.continue();
});
await page.goto(playEpisodeUrl);
await page.waitForTimeout(5000); // 确保视频请求已发出
注意事项与规避风险
- ⚠️ 反爬机制:部分站点校验
Referer、User-Agent或存在 token 过期机制。务必在page.goto()前设置合理 headers,并考虑复用登录态 Cookie(若需会员权限)。 - ⚠️ 动态 Token/M3U8 加密:若捕获到的是
.m3u8地址,需额外解析并下载.ts分片(可用ffmpeg或m3u8-downloader库合并);部分站点还对 AES 密钥做前端加密,此时需逆向 JS 逻辑。 - ⚠️ 法律与道德边界:仅限个人学习与离线观看用途;禁止传播、商用或绕过付费墙;建议优先支持正版平台(如 Crunchyroll、Bilibili 官方客户端离线功能)。
综上,Puppeteer 和 Playwright 是当前最实用的技术路径——它们真实模拟用户行为,兼容 JavaScript 渲染、iframe 跨域通信与复杂请求流,远优于传统 requests + BeautifulSoup 方案。入门推荐从 Playwright 开始(API 更现代、多浏览器支持更好、内置自动等待),配合 Chrome DevTools 协议调试,可快速构建稳定可靠的批量下载工作流。











