我知道如何获取网址,但是我在页面响应文本上找不到很多。
await page.on('request', request => {
console.log('INTERCEPTED: ' + request.url());
request.continue();
});
我如何记录页面响应文本?
答案 0 :(得分:0)
绑定到请求之前,您必须先致电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();
});
答案 1 :(得分:0)
您可以找到有关response.text()
here的信息。可以这样使用:
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();
然后,您无法确定带有“脚本”的网址将在脚本结尾之前到达。如果没有,您将在控制台中看不到任何内容。
如果您要等待特定的响应并对其文本进行处理,最好键入:
const res = await page.waitForResponse(response => response.url().includes('scripts'));
console.log(await res.text());
答案 2 :(得分:0)
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的另一个冗余功能,但是上述方法可以很好地获得页面响应,而页面响应显然仅在请求完全加载时才存在。永远都无法摆脱木偶戏的多少功能,它们似乎什么也没做