puppeteer:检查是否关闭了所有选项卡以关闭浏览器

时间:2018-08-08 20:46:23

标签: javascript node.js puppeteer

我试图编写一个伪造的代码,以从多个银行获取我的银行交易并将其保存在我的数据库中

我大约有10个银行帐户,我必须每分钟检查一次以进行新的交易.....这是问题

木偶实例非常昂贵,并且使用大量RAM,并且我确定我的服务器将崩溃很多,因此我想使用单个实例并循环打开选项卡

所以我在想这样的事情

    var global_banks = {

        1 : {func_ : function(b,s){ bank_1(b,s)} ,  url : 'https://example1.com/login'  } ,
        2 : {func_ : function(b,s){ bank_2(b,s)} ,  url : 'https://example2.com/login'  } ,
    };




function read_accounts_data_from_db(){

    connect_to_mysql( function(err,conn) {
        if(!err)
        {
            conn.query("SELECT * FROM accounts", function (err, result, fields) {
                if (err) throw err;
                init_puppeteer(result);
            });
        }
    });
}

async function init_puppeteer  ( db_data ) {

    const browser = await puppeteer.launch();    

    for(i = 0  ; i < db_data.length ; i++ )
    {
        var setting = db_data[i];
        global_banks[setting.bank_id].func_(browser  , setting );
    }

    browser.close();

}



async function bank_1(browser , setting ){

    const page    = await browser.newPage();
    await page.goto( global_banks[setting.bank_id].url );
    // do the scraping and store them in db 
    page.close();

}

async function bank_2(browser , setting ){

    const page    = await browser.newPage();
    await page.goto( global_banks[setting.bank_id].url );
    // do the scraping and store them in db 
    page.close();
}

首先,使用选项卡是否会显着减少资源使用?

second,这是问题

如何检查所有选项卡是否都已完成,以便可以在browser.close();中调用init_puppeteer? 现在,如果我使用browser.close();运行代码,则会收到错误消息:

nhandledPromiseRejectionWarning: Error: Protocol error (Target.createTarget): Target closed.

基本上,它会在制表符完成之前关闭浏览器,因此我认为制表符会生成此错误...。我想我可以使用setTimeout并在x秒后关闭浏览器...但是可能会有更好的选择方式

0 个答案:

没有答案