Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save wandersonsousa/ecc4cb63f45a8f4c65b3425edfe6ae1a to your computer and use it in GitHub Desktop.
Save wandersonsousa/ecc4cb63f45a8f4c65b3425edfe6ae1a to your computer and use it in GitHub Desktop.
import { chunk } from 'lodash'
import Crowler from '.Crowler'
import puppeteer from 'puppeteer'
const browser = puppeteer.launch()
const page = await (await this._browser.pages())[0])
// Lista contendo links para as páginas dos produtos
const urls = ['https://produto1.com','https://produto2.com',
'https://produto3.com', 'https://produto4.com',
'https://produto5.com', 'https://produto6.com']
const chunkedUrls = chunk(urls, 5)
/*
chunkedUrls = [ ['https://produto1.com','https://produto2.com', 'https://produto3.com', 'https://produto4.com', 'https://produto5.com'], 'https://produto6.com']
*/
// Váriavel onde será salvo o resultado de cada página
const DATA = []
for await (const urlsChunk of chunkedUrls) {
// Usamos o map para transformar cada url de produto em uma promise que vai retornar os dados do crowler aplicados na mesma
const urlsToPromises = urls.map(url => new Promise(
// Cria uma nova página para cada url, e finaliza a página ao final de cada execução
const newPage = await browserCrowlerManager.newPage()
(resolve) => {
Crowler(url, newPage)
.then( crowlerResponse => resolve(crowlerResponse) )
.catch(err => reject(err))
.finally(()=> newPage.close())
}
))
// Executamos todas as promises deste conjuto de urls, que contém 5 promises
const promisesResponses = await Promise.allSettled(crowlPools);
//Buscamos os dados de cada resposta e salvamos na váriavel "DATA"
const responseDataList = await promisesResponses.filter(responsePromise => responsePromise.status === "fulfilled").map((response: any) => response.value);
DATA.push(...responseDataList)
}
// Enfim, retorna os dados dos produtos
console.log(DATA)
// FIM
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment