3 回答

TA貢獻(xiàn)1773條經(jīng)驗(yàn) 獲得超3個(gè)贊
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 的另一個(gè)冗余功能,但是上面的方法可以很好地獲取頁(yè)面響應(yīng),該響應(yīng)顯然僅在請(qǐng)求完全加載時(shí)才出現(xiàn)。我永遠(yuǎn)無(wú)法理解木偶師的許多功能實(shí)際上似乎什么也沒(méi)做,哈哈

TA貢獻(xiàn)1942條經(jīng)驗(yàn) 獲得超3個(gè)贊
您必須setRequestInterception在綁定請(qǐng)求之前調(diào)用
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貢獻(xiàn)1998條經(jīng)驗(yàn) 獲得超6個(gè)贊
response.text()
?它可以像這樣使用:
page.on('response', async (response) => {? ??
? ? console.log(await response.text());
});
但問(wèn)題也可能出在腳本的終止上。您正在尋找的響應(yīng)可能不會(huì)在腳本結(jié)束之前到達(dá)。想象一下你有這樣的東西:
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();
那么你就無(wú)法確定帶有“scripts”的 url 會(huì)在腳本結(jié)束之前到達(dá)。如果沒(méi)有,您將在控制臺(tái)中看不到任何內(nèi)容。
如果您想等待特定響應(yīng)并對(duì)其文本執(zhí)行某些操作,最好輸入:
const res = await page.waitForResponse(response => response.url().includes('scripts'));
console.log(await res.text());
添加回答
舉報(bào)