如何通过Puppeteer下载Blob URL格式的Instagram Reel
解决Puppeteer下载Instagram Reel的Blob URL问题
Blob URL是浏览器上下文内的临时资源标识,无法直接在Node.js环境中用fetch请求,必须在生成该URL的页面上下文内读取Blob内容,再将数据传递到Node端保存。以下是具体实现方案:
核心解决步骤
- 在Puppeteer的
page.evaluate中执行Blob读取操作(该方法运行在浏览器页面环境) - 将Blob内容转为可序列化的格式(Base64或Uint8Array)传递回Node环境
- 在Node端将数据转为Buffer并写入本地文件
代码实现示例
方法1:通过Base64传递数据
const puppeteer = require('puppeteer'); const fs = require('fs'); (async () => { const browser = await puppeteer.launch({ headless: false }); const page = await browser.newPage(); // 替换为你的导航逻辑:登录、进入目标账号页面等 await page.goto(`https://www.instagram.com/${targetId}/`); await page.waitForSelector('video[src]', { visible: true }); // 等待视频元素加载完成 // 在页面上下文内读取Blob并转为Base64 const videoBase64 = await page.evaluate(async () => { const videoEl = document.querySelector('video'); const blobRes = await fetch(videoEl.src); const blob = await blobRes.blob(); return new Promise((resolve) => { const reader = new FileReader(); reader.onloadend = () => resolve(reader.result.split(',')[1]); // 移除data URI前缀 reader.readAsDataURL(blob); }); }); // 将Base64转为Buffer并保存 const videoBuffer = Buffer.from(videoBase64, 'base64'); fs.writeFileSync('instagram_reel.mp4', videoBuffer); await browser.close(); })();
方法2:通过Uint8Array传递数据(更高效)
const puppeteer = require('puppeteer'); const fs = require('fs'); (async () => { const browser = await puppeteer.launch({ headless: false }); const page = await browser.newPage(); // 导航逻辑:登录、进入目标账号页面 await page.goto(`https://www.instagram.com/${targetId}/`); await page.waitForSelector('video[src]', { visible: true }); // 在页面上下文读取Blob转为Uint8Array const videoUint8Arr = await page.evaluate(async () => { const videoEl = document.querySelector('video'); const res = await fetch(videoEl.src); const arrayBuffer = await res.arrayBuffer(); return Array.from(new Uint8Array(arrayBuffer)); // 转为普通数组便于序列化传递 }); // 转为Buffer保存 const videoBuffer = Buffer.from(videoUint8Arr); fs.writeFileSync('instagram_reel.mp4', videoBuffer); await browser.close(); })();
注意事项
- 页面加载状态:必须确保视频元素的
src属性已填充,可通过waitForSelector等待元素可见且有src值 - 反爬机制:Instagram会检测自动化工具,建议设置真实的User-Agent,必要时模拟登录状态
- 视频格式:Instagram Reel通常为MP4格式,直接保存为
.mp4即可
内容的提问来源于stack exchange,提问作者dev.muhammad
相关产品推荐
相关产品推荐

