javascript - Node Puppeteer,page.on( "request") 抛出 "Request is already handled!"

标签 javascript node.js puppeteer

我正在使用 puppeteer-extra 和 node.js 遍历多个 url。
我试图拦截一些资源类型以在每次迭代时加载,并得到以下错误。

PS C:\Users\someuser\Desktop\Project> node temp.js
-- running
C:\Users\someuser\node_modules\puppeteer\lib\cjs\puppeteer\common\assert.js:26
        throw new Error(message);
              ^

Error: Request is already handled!
    at Object.exports.assert (C:\Users\someuser\node_modules\puppeteer\lib\cjs\puppeteer\common\assert.js:26:15)
    at HTTPRequest.continue (C:\Users\someuser\node_modules\puppeteer\lib\cjs\puppeteer\common\HTTPRequest.js:217:21)
    at PuppeteerBlocker.onRequest (C:\Users\someuser\node_modules\@cliqz\adblocker-puppeteer\dist\cjs\adblocker.js:225:33)
    at BlockingContext.onRequest (C:\Users\someuser\node_modules\@cliqz\adblocker-puppeteer\dist\cjs\adblocker.js:64:47)
    at C:\Users\someuser\node_modules\puppeteer\lib\cjs\vendor\mitt\src\index.js:51:62
    at Array.map (<anonymous>)
    at Object.emit (C:\Users\someuser\node_modules\puppeteer\lib\cjs\vendor\mitt\src\index.js:51:43)
    at Page.emit (C:\Users\someuser\node_modules\puppeteer\lib\cjs\puppeteer\common\EventEmitter.js:72:22)
    at C:\Users\someuser\node_modules\puppeteer\lib\cjs\puppeteer\common\Page.js:143:100
    at C:\Users\someuser\node_modules\puppeteer\lib\cjs\vendor\mitt\src\index.js:51:62
我无法理解为什么该请求已作为实际请求处理 page.gotofor 中完成环形。有人会有任何提示吗?
这是完整的项目
const puppeteer = require( 'puppeteer-extra' );

const StealthPlugin = require( 'puppeteer-extra-plugin-stealth' );
puppeteer.use( StealthPlugin() );

const AdblockerPlugin = require( 'puppeteer-extra-plugin-adblocker' );
puppeteer.use( AdblockerPlugin( { blockTrackers: true } ) );

puppeteer.launch( { headless: true } ).then( async browser => {

    console.log( '--\xa0running' );

    console.time( '--\xa0process' );

    const page = await browser.newPage();

    await page.setRequestInterception( true );
    
    page.on( 'request', ( request ) => {
        if ( [ 'image', 'stylesheet', 'font', 'script' ].indexOf( request.resourceType() ) ) {
            request.abort();
        } else {
            request.continue();
        };
    } );

    for ( var i = 1; i <= 20; i++ ) {

        console.time( '--\xa0iteration\xa0' + i ); // ... timer start 
    
        await page.goto( 'https://www.someurl.it/shop/s%2D' + i, { waitUntil: 'load' } );
    
        const title = await page.title();
    
        console.log( title.includes( '404' ) ? false : title );
    
        console.timeEnd( '--\xa0iteration\xa0' + i ); // ... timer end 
    
    };

    await browser.close();

    console.timeEnd( '--\xa0process' );
  
    console.log( '--\xa0ending' );

} );

最佳答案

添加退货声明解决了我的问题。

page.on( 'request', ( request ) => {
        if ([ 'image', 'stylesheet', 'font', 'script' ].indexOf( request.resourceType() ) !== -1 ) {
           return request.abort();
        }
        request.continue();
} );

关于javascript - Node Puppeteer,page.on( "request") 抛出 "Request is already handled!",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65922416/

相关文章:

javascript - React Js Axios Post 请求未从 Web api 接收返回正文

javascript - 如何创建类似 Google Closure 的继承结构

javascript - jQuery AJAX get请求无法正常工作且返回值无法在控制台显示

javascript - 如何在 Amcharts 股票柱形图中设置单独的柱形颜色?

javascript - 如何在 PuppeteerJS 中迭代所有 <li> 以从 <ul> 句柄获取文本内容?

node.js - 无法在 Gitlab.com 上的共享运行器上以 headless 模式运行 Puppeteer

javascript - 使用 Express 查询 MongoDB 服务器(Node.js 项目)

javascript - Node.js代码中回调参数的含义

node.js - amqp vs amqplib - 哪个 Node.js amqp 客户端库更好?

javascript - 图像显示一件事,但查询数据在加载网站时显示另一件事