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());
添加回答
舉報