Javascript 当快速连续浏览多个页面时,木偶演员会冻结整个电脑

Javascript 当快速连续浏览多个页面时,木偶演员会冻结整个电脑,javascript,node.js,puppeteer,Javascript,Node.js,Puppeteer,我正在用Puppeter制作一个应用程序,它给出一个UPC代码列表,从一个网站上抓取图像。但是,当我运行计算机时,我的代码会冻结它。我正在处理大约700个代码,所以我希望我的代码需要一段时间,但我不希望我的计算机冻结。唯一的输出是 (node:5837) MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 11 exit listeners added to [process]. Use emitter

我正在用Puppeter制作一个应用程序,它给出一个UPC代码列表,从一个网站上抓取图像。但是,当我运行计算机时,我的代码会冻结它。我正在处理大约700个代码,所以我希望我的代码需要一段时间,但我不希望我的计算机冻结。唯一的输出是

(node:5837) MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 11 exit listeners added to [process]. Use emitter.setMaxListeners() to increase limit
(node:5837) MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 11 SIGINT listeners added to [process]. Use emitter.setMaxListeners() to increase limit
(node:5837) MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 11 SIGTERM listeners added to [process]. Use emitter.setMaxListeners() to increase limit
(node:5837) MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 11 SIGHUP listeners added to [process]. Use emitter.setMaxListeners() to increase limit
我的代码是

import puppeteer from 'puppeteer';
import parse from 'csv-parse';
import { promises as fs } from "fs";

const parseCsv = async (filename: string): Promise<parse.Parser> => {
    let contents: Buffer = await fs.readFile(filename);
    const parser = parse(contents);

    return parser;
}

const processRow = async (row) => {
    const browser = await puppeteer.launch();
    const page = await browser.newPage();
    await page.goto(`https://www.example.com/search/?q=${row[5]}`);

    await browser.close();
}

(async () => {
    console.log('Reading file');
    const parser = await parseCsv(process.argv[process.argv.length - 1]);

    let i = 0;

    let results = []

    console.log('Extracting data');
    for await (let row of parser) {
        if (/\d/.test(row[5])) {
            results.push(row);
        }
    }

    console.log('Scraping');
    results.map(processRow);
})();
从“木偶师”导入木偶师;
从“csv解析”导入解析;
从“fs”导入{promises as fs};
const parseCsv=async(文件名:string):Promise=>{
let contents:Buffer=wait fs.readFile(文件名);
const parser=parse(内容);
返回解析器;
}
const processRow=异步(行)=>{
const browser=wait puppeter.launch();
const page=wait browser.newPage();
等待page.goto(`https://www.example.com/search/?q=${row[5]}`);
等待浏览器关闭();
}
(异步()=>{
log(“读取文件”);
const parser=await parseCsv(process.argv[process.argv.length-1]);
设i=0;
让结果=[]
log(“提取数据”);
对于等待(让解析器的行){
if(/\d/.test(第[5]行))){
结果:推动(世界其他地区);
}
}
控制台日志(“刮取”);
结果:map(processRow);
})();
我有16GB的内存,我在POP上!OS20.10,如果这有帮助的话。

似乎
results.map(processRow)并行打开700页。尝试按顺序处理这些页面。它将更慢,但更安全:

从“木偶师”导入木偶师;
从“csv解析”导入解析;
从“fs”导入{promises as fs};
(异步()=>{
const browser=wait puppeter.launch();
const page=wait browser.newPage();
const parseCsv=async(文件名:string):Promise=>{
let contents:Buffer=wait fs.readFile(文件名);
const parser=parse(内容);
返回解析器;
}
log(“读取文件”);
const parser=await parseCsv(process.argv[process.argv.length-1]);
设i=0;
让结果=[]
log(“提取数据”);
对于等待(让解析器的行){
if(/\d/.test(第[5]行))){
结果:推动(世界其他地区);
}
}
控制台日志(“刮取”);
用于(结果的常量行){
等待page.goto(`https://www.example.com/search/?q=${row[5]}`);
//处理页面
}
等待浏览器关闭();
})();

如果您需要速度和安全,请尝试使用。

尝试使用
const browser=wait puppeter.launch()超出
processRow
。也就是说,只启动一个浏览器,使用不同的页面。@vsemozhebut如果不起作用,它仍然会冻结我的计算机。然后,可能不会并行打开700个页面,连续或以小组的形式进行刮取。我该怎么做?我的委托人需要把700页全部删掉