3 回答
TA贡献1773条经验 获得超3个赞
await page.setRequestInterception(true);
await page.on('requestfinished', async (request) => {
var response = await request.response();
try {
if (request.redirectChain().length === 0) {
var responseBody = await response.buffer();
console.log(responseBody.toString());
}
}catch (err) { console.log(err); }
});
await page.on('request', request => {
request.continue();
});
response.text() 字面上总是返回 null,这是 puppeteer 的另一个冗余功能,但是上面的方法可以很好地获取页面响应,该响应显然仅在请求完全加载时才出现。我永远无法理解木偶师的许多功能实际上似乎什么也没做,哈哈
TA贡献1942条经验 获得超3个赞
您必须setRequestInterception在绑定请求之前调用
await page.setRequestInterception(true);
page.on('response', (response) => {
console.log('RESPONSE RECEIVED');
console.log(response.status + ' ' + response.url);
});
page.on('request', request => {
console.log('INTERCEPTED: ' + request.url());
request.continue();
});
TA贡献1998条经验 获得超6个赞
response.text()
它可以像这样使用:
page.on('response', async (response) => {
console.log(await response.text());
});
但问题也可能出在脚本的终止上。您正在寻找的响应可能不会在脚本结束之前到达。想象一下你有这样的东西:
await page.setRequestInterception(true);
page.on('request', request => {
request.continue();
});
page.on('response', response => {
if (response.url().includes('scripts'))
console.log(response.url());
});
await page.type('#search', 'foo');
await page.click('#send-search');
await context.close();
await browser.close();
那么你就无法确定带有“scripts”的 url 会在脚本结束之前到达。如果没有,您将在控制台中看不到任何内容。
如果您想等待特定响应并对其文本执行某些操作,最好输入:
const res = await page.waitForResponse(response => response.url().includes('scripts'));
console.log(await res.text());
添加回答
举报