我试图编写一个伪造的代码,以从多个银行获取我的银行交易并将其保存在我的数据库中
我大约有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秒后关闭浏览器...但是可能会有更好的选择方式