You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Puppeteer爬取Instagram视频URL?返回Null问题求助

解决Puppeteer爬取Instagram视频URL返回Null的问题

你的代码返回null核心原因有两个:Instagram的动态渲染机制和无头浏览器被反爬检测限制内容加载,以下是具体修复方案:

问题拆解

  1. page.goto默认仅等待DOM结构加载完成,但Instagram的视频元素是通过JS动态渲染的,执行document.querySelector('video')时元素还未生成,因此返回null。
  2. 原生无头模式的Puppeteer会被Instagram识别为爬虫,直接限制核心内容加载,导致视频元素根本不会出现在页面中。

修复后的代码

async function getVideo(){
  // 配置接近真实浏览器的环境,绕过基础反爬检测
  const browser = await puppeteer.launch({
    headless: "new", // 使用新版无头模式,更贴近真实浏览器行为
    args: [
      '--no-sandbox',
      '--disable-setuid-sandbox',
      '--user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36'
    ]
  });
  
  const page = await browser.newPage();
  // 设置桌面端视口,模拟正常浏览场景
  await page.setViewport({ width: 1280, height: 720 });
  
  // 等待页面动态内容加载完成,延长超时避免加载缓慢导致失败
  await page.goto('https://www.instagram.com/p/CfW5u5UJmny/?hl=en', {
    waitUntil: 'networkidle2', // 等待网络请求基本停止
    timeout: 60000
  });

  // 显式等待视频元素出现,最多等待10秒
  await page.waitForSelector('video', { timeout: 10000 });

  const video = await page.evaluate(() => {
      // 双重确保元素存在后再获取src
      const videoEl = document.querySelector('video');
      return videoEl ? videoEl.src : null;
  });

  console.log(video); // 此时应该能正常获取视频URL

  await browser.close();
}

补充提示

  • 如果遇到登录验证弹窗,说明Instagram触发了更严格的反爬机制,可通过手动登录后保存Cookie复用会话,或使用puppeteer-extra配合puppeteer-extra-plugin-stealth进一步绕过检测。
  • Instagram返回的视频URL是临时有效链接,需即时使用,过期后会失效。

内容的提问来源于stack exchange,提问作者shakti goyal

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 17:30:45