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

如何用Python捕获浏览器新标签页的网页响应?

如何用伪浏览器捕获Instagram私密故事工具的新标签页JSON响应

我正在开发一款脚本,用于下载已关注的Instagram私密账号故事。目前使用的工具会利用浏览器会话获取内容,输入目标故事链接后,会在新标签页打开JSON格式的故事数据(示例结构如下)。现在希望替换手动处理HTML的方式,用伪浏览器模块直接捕获这个新标签页的JSON响应,实现自动化流程。

{
  "data": {
    "reels_media": [
      {
        "__typename": "GraphHighlightReel",
        "id": "some_id",
        "latest_reel_media": null,
        "owner": {
          "__typename": "GraphUser",
          "id": "some_id",
          "profile_pic_url": "some_url",
          "username": "some_username"
        },
        "items": [
          {
            "__typename": "GraphStoryVideo",
            "id": "some_id",
            "dimensions": { "height": 1136, "width": 640 },
            "display_resources": [
              {
                "src": "some_url",
                "config_width": 640,
                "config_height": 1136
              },
              {
                "src": "some_url",
                "config_width": 750,
                "config_height": 1331
              }
            ]
          }
        ]
      }
    ]
  }
}

解决方案:用Puppeteer/Playwright捕获新标签页响应

推荐使用Puppeteer(基于Chrome/Chromium)或Playwright(支持多浏览器)这类伪浏览器工具,它们可以监听新标签页创建事件,并捕获页面的网络响应。以下是基于Puppeteer的实现示例:

步骤1:安装依赖

npm install puppeteer

步骤2:核心代码实现

const puppeteer = require('puppeteer');

async function captureStoryJSON(storyLink) {
  // 启动浏览器,headless: false可开启可视化调试
  const browser = await puppeteer.launch({ headless: false });
  const mainPage = await browser.newPage();

  // 导入已登录的Instagram会话cookie(需提前登录后导出)
  // const cookies = require('./instagram-cookies.json');
  // await mainPage.setCookie(...cookies);

  // 导航到私密故事下载工具页面
  await mainPage.goto('instafinsta私密下载器页面地址');

  // 在输入框填入目标故事链接(需根据页面实际元素调整选择器)
  await mainPage.type('input[type="text"]', storyLink);

  // 监听新标签页创建事件
  const newPagePromise = new Promise(resolve => {
    browser.once('targetcreated', target => resolve(target.page()));
  });

  // 触发下载操作(点击提交按钮,选择器需适配页面)
  await mainPage.click('button[type="submit"]');

  // 获取新打开的标签页
  const jsonPage = await newPagePromise;

  // 捕获新标签页的JSON响应
  let storyJSON = null;
  jsonPage.on('response', async (response) => {
    // 判断响应是否为JSON类型且请求成功
    if (response.headers()['content-type']?.includes('application/json') && response.ok()) {
      storyJSON = await response.json();
      console.log('成功捕获JSON数据');
      // 直接处理媒体下载
      downloadStoryMedia(storyJSON);
    }
  });

  // 等待新标签页加载完成
  await jsonPage.waitForNavigation();

  // 清理资源
  await jsonPage.close();
  await browser.close();

  return storyJSON;
}

// 处理JSON中的媒体链接,实现下载逻辑
function downloadStoryMedia(jsonData) {
  const reelItems = jsonData.data.reels_media[0].items;
  
  reelItems.forEach(item => {
    // 获取最高分辨率的媒体链接
    const highestResSource = item.display_resources[item.display_resources.length - 1];
    
    if (item.__typename === 'GraphStoryVideo') {
      console.log(`视频下载链接: ${highestResSource.src}`);
      // 这里可添加下载逻辑,比如用axios/fs模块保存文件
    } else if (item.__typename === 'GraphStoryImage') {
      console.log(`图片下载链接: ${highestResSource.src}`);
    }
  });
}

// 调用示例
captureStoryJSON('https://www.instagram.com/stories/highlights/1234567890/');

关键注意事项

  • 会话保持:必须确保伪浏览器处于已登录Instagram的状态,可通过导入本地cookie实现(避免重复登录触发反爬)。
  • 选择器适配:工具页面的输入框、按钮选择器可能会更新,需通过浏览器开发者工具确认最新选择器。
  • 反爬规避:添加请求延迟、随机User-Agent,避免频繁操作被限制。
  • 优化方案:若能分析工具调用的Instagram API接口,可直接模拟API请求,跳过工具页面,提升效率。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 12:54:18