编程 使用 Puppeteer 模拟浏览器捕获请求和响应

2024-11-19 08:28:21 +0800 CST views 631

Puppeteer 是一个用于控制 Chrome 或 Chromium 浏览器的 Node.js 库,它可以帮助你在浏览器中自动执行操作,包括捕获 HTTP 请求和响应。以下是如何使用 Puppeteer 来捕获页面加载时的请求和响应信息。

代码示例

const puppeteer = require('puppeteer');

async function captureRequests() {
    const browser = await puppeteer.launch({ headless: true }); // 启动浏览器
    const page = await browser.newPage();

    // 启用请求拦截
    await page.setRequestInterception(true);

    const capturedRequests = []; // 存储捕获的请求信息

    // 监听并捕获请求信息
    page.on('request', request => {
        capturedRequests.push({
            url: request.url(),
            method: request.method(),
            type: 'request'
        });
        request.continue(); // 继续请求
    });

    // 监听并捕获响应信息
    page.on('response', response => {
        capturedRequests.push({
            url: response.url(),
            method: response.request().method(),
            type: 'response',
            status: response.status()
        });
    });

    // 打开目标页面,并捕获请求和响应
    await Promise.all([
        page.goto('https://jx.jsonplayer.com/player/?url=https://v.qq.com/x/cover/mzc00200vmd652y/j0043z8gwe0.html'),
        page.waitForNavigation({ waitUntil: 'networkidle0' }) // 确保页面完全加载
    ]);

    // 继续保持页面处于运行状态,捕获后续的请求和响应
    await page.waitForTimeout(3000); // 等待3秒,捕获更多请求

    // 控制台打印捕获的请求信息
    console.log(capturedRequests);

    await browser.close(); // 关闭浏览器
}

captureRequests();

代码说明

  • puppeteer.launch({ headless: true }): 启动无头浏览器。将 headless 设置为 false 可以在可视化窗口中看到浏览器的操作。
  • setRequestInterception(true): 启用请求拦截,以便捕获并处理每个请求。
  • request.continue(): 继续被拦截的请求。
  • page.on('request', request => {...}): 监听并捕获请求信息。
  • page.on('response', response => {...}): 监听并捕获响应信息。
  • page.goto(url): 打开目标 URL。
  • page.waitForNavigation({ waitUntil: 'networkidle0' }): 等待页面完全加载,networkidle0 表示没有任何网络连接超过 500ms 时认为页面加载完毕。
  • page.waitForTimeout(3000): 继续运行程序 3 秒以捕获更多请求。

使用场景

此脚本适用于需要监控页面请求、分析网络请求或自动化测试的场景。通过 Puppeteer,可以轻松获取浏览器发送的所有请求和响应信息。


通过以上示例,你可以使用 Puppeteer 在 Node.js 环境下模拟浏览器并捕获页面请求和响应信息。

复制全文 生成海报 浏览器自动化 网络请求 开发工具

推荐文章

#免密码登录服务器
2024-11-19 04:29:52 +0800 CST
nginx反向代理
2024-11-18 20:44:14 +0800 CST
PHP 唯一卡号生成
2024-11-18 21:24:12 +0800 CST
SQL常用优化的技巧
2024-11-18 15:56:06 +0800 CST
黑客帝国代码雨效果
2024-11-19 01:49:31 +0800 CST
go发送邮件代码
2024-11-18 18:30:31 +0800 CST
前端代码规范 - 图片相关
2024-11-19 08:34:48 +0800 CST
html流光登陆页面
2024-11-18 15:36:18 +0800 CST
微信小程序热更新
2024-11-18 15:08:49 +0800 CST
Golang实现的交互Shell
2024-11-19 04:05:20 +0800 CST
向满屏的 Import 语句说再见!
2024-11-18 12:20:51 +0800 CST
Gin 与 Layui 分页 HTML 生成工具
2024-11-19 09:20:21 +0800 CST
Golang Sync.Once 使用与原理
2024-11-17 03:53:42 +0800 CST
H5抖音商城小黄车购物系统
2024-11-19 08:04:29 +0800 CST
Vue3中的自定义指令有哪些变化?
2024-11-18 07:48:06 +0800 CST
mysql int bigint 自增索引范围
2024-11-18 07:29:12 +0800 CST
Linux 常用进程命令介绍
2024-11-19 05:06:44 +0800 CST
Nginx 跨域处理配置
2024-11-18 16:51:51 +0800 CST
前端开发中常用的设计模式
2024-11-19 07:38:07 +0800 CST
jQuery中向DOM添加元素的多种方法
2024-11-18 23:19:46 +0800 CST
12个非常有用的JavaScript技巧
2024-11-19 05:36:14 +0800 CST
程序员茄子在线接单