Puppeteer 调试线上页面:拦截请求替换本地文件debugger
Author:zhoulujun Date:
由于 Puppeteer 可以在请求发出前进行拦截与替换,所以很方便地在本地开发解决线上Bug以及新需求。这样可以减少无谓的提交同时真实地检验其在线上环境中的效果。
setRequestInterception
开启拦截:page.setRequestInterception(true)
官方文档:https://pptr.dev/api/puppeteer.page.setrequestinterception/
注意:启用了拦截,那么就会自动开启无缓存状态。
拦截器案例
https://pptr.dev/guides/network-interception
拦截ajax请求
const page = await browser.newPage(); await page.setRequestInterception(true); page.on('request', async req => { if (req.resourceType() === 'xhr') { console.log(req.url()); await req.respond({ status: 200, headers: { 'Access-Control-Allow-Origin': '*', }, contentType: 'application/json; charset=utf-8', body: JSON.stringify({ code: 0, data: 'hello puppeteer' }), }); // await req.continue(); } else { await req.continue(); } });
根据url拦截
page.on('response', async res => { if (res.url().indexOf('/header') >= 0) { console.log(res.status()); // 原本接口返回的数据 {"code":0,"data":"hello ajanuw"} console.log(await res.text()); // await browser.close(); } });
据此,我们可以替换百度首页的css
const puppeteer = require('puppeteer') const fs = require('fs') const util = require('util') const readFile = util.promisify(fs.readFile) (async function start() { const browser = await puppeteer.launch({ args: ['--disable-infobars', '--no-sandbox', '--disable-setuid-sandbox'], // 因为我们需要直接看到UI效果,所以这里不能使用headless模式 headless: false, // 也可以直接使用本地Chrome查看效果,不使用Puppeteer自带的Chromium浏览器 //executablePath: '/Applications/Google Chrome.app/Contents/MacOS/Google Chrome', }) let page = await browser.newPage() // 读写本地的CSS文件 let customResponse = await readFile('./soutu.css') try { await page.setViewport({width: 1280, height: 620}) // 设置拦截请求 await page.setRequestInterception(true) page.on('request', req => { let addr = req.url() // 根据URL拦截,这里拦截所有以CSS结尾的文件,可以自由修改 if (addr.endsWith('css')) { req.respond({ status: 200, contentType: 'text/css', body: customResponse
参考文章:
Puppeteer 调试线上页面 https://ifun.dev/post/puppeteer-online-debug/
转载本站文章《Puppeteer 调试线上页面:拦截请求替换本地文件debugger》,
请注明出处:https://www.zhoulujun.cn/html/webfront/browser/Puppeteer/9433.html