为了账号安全,请及时绑定邮箱和手机立即绑定

如何在 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 关注
  • 266 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信