Распараллелить соскоб с Puppeteer: открыть несколько ссылок на нескольких страницах - PullRequest
0 голосов
/ 15 мая 2018

Я использую Puppeteer для очистки нескольких веб-страниц.

Моя идея состоит в том, чтобы открыть несколько вкладок (используя команду browser.newPage ()), а затем передать несколько X ссылок на эти страницы, чтобы распараллелить работу.

Проблема в том, что иногда программа работает правильно, а иногда нет (программа зависает и время ожидания ошибки страницы сбрасывается).

Моя идея состоит в том, что, вероятно, я что-то не так делаю, выполняя обещания, но я не могу понять, в чем проблема. Я следую примеру кода, который я нашел по этой ссылке .

const promises=[];
let totBrowserInstances = 3;
//instancesLinksMatrix[totBrowserInstances][linksToScrape] 
// matrix where all the links to scrape are stored, it is created in previous part of the code; 

for(let i=0; i<totBrowserInstances; i++){
    console.log('Page ID Spawned', i);
    promises.push(browser.newPage()
    .then(async (page) => {
        for(let j=0; j<instancesLinksMatrix[i].length; j++){
            await page.goto(instancesLinksMatrix[i][j], {waitUntil: 'domcontentloaded'}); // start as soon as the DOM is ready

            await page.evaluate(() => {
                return document.querySelector('.competizione .pagina h3').innerText;
            }).then((result) => {
                console.log('response: ' + result);
            });
        }
    }));
}
await Promise.all(promises);
...