如何在 puppeteer 中通过请求拦截来拦截响应文本?

我知道如何获取网址,但是我在页面响应文本上找不到太多内容。

        await page.on('request', request => {
                    console.log('INTERCEPTED: ' + request.url());
            request.continue();
        });

我将如何记录页面响应文本?



慕工程0101907
浏览 267回答 3
3回答

慕容3067478

   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 的另一个冗余功能,但是上面的方法可以很好地获取页面响应,该响应显然仅在请求完全加载时才出现。我永远无法理解木偶师的许多功能实际上似乎什么也没做,哈哈

手掌心

您必须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();});

米琪卡哇伊

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());
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript