亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何在 puppeteer 中通過請求攔截來攔截響應文本?

如何在 puppeteer 中通過請求攔截來攔截響應文本?

慕工程0101907 2023-07-29 13:51:08
我知道如何獲取網址,但是我在頁面響應文本上找不到太多內容。        await page.on('request', request => {                     console.log('INTERCEPTED: ' + request.url());             request.continue();         });我將如何記錄頁面響應文本?
查看完整描述

3 回答

?
慕容3067478

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 的另一個冗余功能,但是上面的方法可以很好地獲取頁面響應,該響應顯然僅在請求完全加載時才出現。我永遠無法理解木偶師的許多功能實際上似乎什么也沒做,哈哈


查看完整回答
反對 回復 2023-07-29
?
手掌心

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();

});


查看完整回答
反對 回復 2023-07-29
?
米琪卡哇伊

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());


查看完整回答
反對 回復 2023-07-29
  • 3 回答
  • 0 關注
  • 356 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號