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

虚拟专用服务器上Puppeteer运行异常,Instagram抓取API故障求助

Instagram媒体抓取API部署VPS后返回“Media not found.”的排查方案

核心原因分析与解决办法

1. 反爬机制触发

Instagram会针对无头浏览器、异常IP环境(VPS IP多被标记为爬虫源)进行页面内容限制,导致本地能正常加载的媒体元素在VPS上无法获取。

  • 调整Puppeteer启动参数,模拟真实浏览器环境:
    async function getInstagramMediaLink(postURL) {
      // 启用无头模式并添加必要参数,适配VPS环境
      const browser = await puppeteer.launch({
        headless: "new",
        args: [
          '--no-sandbox',
          '--disable-setuid-sandbox',
          '--disable-blink-features=AutomationControlled'
        ],
        defaultViewport: { width: 1920, height: 1080 }
      });
      const page = await browser.newPage();
    
      // 设置真实用户代理
      await page.setUserAgent('Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36');
      
      // 禁用自动化检测特征
      await page.evaluateOnNewDocument(() => {
        Object.defineProperty(navigator, 'webdriver', {
          get: () => undefined,
        });
      });
    
      await page.goto(postURL, { waitUntil: 'domcontentloaded' });
      // 显式等待媒体元素加载,延长超时时间
      await page.waitForSelector('article img, article video', { timeout: 15000 });
      
      const mediaElement = await page.$('article img, article video');
      if (mediaElement) {
        const mediaSrc = await page.evaluate(element => element.getAttribute('src'), mediaElement);
        await browser.close();
        return mediaSrc;
      }
    
      await browser.close();
      return null;
    }
    

2. VPS网络与页面加载问题

VPS网络延迟或Instagram对该IP的资源加载限制,会导致networkidle0等待完成时,媒体元素尚未渲染。

  • 调整页面等待策略:将waitUntil: 'networkidle0'改为domcontentloaded,并添加显式等待媒体元素的代码(如上例中的waitForSelector)。
  • 测试VPS网络连通性:执行curl -L -I "你的Instagram帖子URL",检查返回状态码是否为200,若为403/429则说明IP被限制,需更换IP或使用代理。

3. 页面结构差异

Instagram会根据访问地区、设备类型返回不同DOM结构,VPS的IP地区与本地不同,导致选择器失效。

  • 在VPS上打印页面源码,排查实际DOM结构:
    // 在page.goto后添加
    const pageHTML = await page.content();
    console.log(pageHTML);
    
  • 根据实际输出调整选择器,例如部分地区的页面媒体元素可能位于div._aagu img或div._aagv video这类容器中。

4. Puppeteer系统依赖缺失

VPS默认缺少Chrome运行所需的系统库,导致页面渲染不完全。

  • 以Ubuntu/Debian为例,安装依赖:
    sudo apt update && sudo apt install -y libnss3 libatk1.0-0 libatk-bridge2.0-0 libcups2 libdrm2 libxkbcommon0 libxcomposite1 libxdamage1 libxrandr2 libgbm1 libasound2 libpangocairo-1.0-0 libgtk-3-0
    
  • 若问题仍存在,可改用puppeteer-core配合系统已安装的Chrome,减少依赖冲突。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 20:35:07