在 Puppeteer 中拦截页面请求可以使用 waitForRequest
和 waitForResponse
方法来实现。
以下是一个示例:
const puppeteer = require('puppeteer');
(async () => {
const browser = await puppeteer.launch();
const page = await browser.newPage();
// 拦截请求
await page.setRequestInterception(true);
page.on('request', (request) => {
// 可以根据请求的 URL、类型等进行拦截处理
if (request.url().endsWith('.png') || request.url().endsWith('.jpg')) {
request.abort(); // 终止请求
} else {
request.continue(); // 继续请求
}
});
await page.goto('https://www.example.com');
await browser.close();
})();
在上述示例中,page.setRequestInterception(true)
用于启用请求拦截。然后通过 page.on('request', (request) => { ... })
来监听请求事件,并在回调函数中进行相应的处理。使用 request.abort()
终止请求,request.continue()
继续请求。
使用 waitForRequest
和 waitForResponse
方法更为灵活,可以根据请求的 URL、类型等进行具体的拦截判断。例如:
const puppeteer = require('puppeteer');
(async () => {
const browser = await puppeteer.launch();
const page = await browser.newPage();
// 拦截请求
await page.setRequestInterception(true);
page.on('request', async (request) => {
// 等待请求的 URL 包含特定关键字
if (request.url().includes('example')) {
const response = await request.waitForResponse(); // 等待响应
console.log(`Received response for '${response.url()}'`);
}
request.continue(); // 继续请求
});
await page.goto('https://www.example.com');
await browser.close();
})();
在上述示例中,使用 request.url().includes('example')
来判断请求的 URL 是否包含关键字 'example'
,如果包含,则使用 request.waitForResponse()
等待响应,并打印响应的 URL。
这样可以根据具体的需求,来灵活地拦截和处理页面请求。