Closed pavansai1122 closed 5 years ago
There is puppeteer-cluster: Puppeteer Pool, run a cluster of instances in parallel .
This library spawns a pool of Chromium instances via Puppeteer and helps to keep track of jobs and errors. This is helpful if you want to crawl multiple pages or run tests in parallel.
thank you i tried above puppeteer-cluster worked for me. And I'm solved earlier problem using npm "Generic pool" by placing some puppeteer arguments const factory = { create: async function () { const browser = await puppeteer.launch({ headless: true, args: ['--no-sandbox', '--disable-setuid-sandbox'] }); const page = await browser.newPage(); await page.setViewport({ width: 1200, height: 400 });
Thank you @LeMoussel
I'm using this package to run Puppeteer by default and its working good on my local machine. But after deployed on server it was not working and not throwing any error. Here is My code `import puppeteer from 'puppeteer'; const genericPool = require('generic-pool');
class BrowserPool { constructor() { const factory = { create: async function () { const browser = await puppeteer.launch(); const page = await browser.newPage(); await page.setViewport({ width: 1200, height: 400 }); return page; }, destroy: function (browserInstance) { browserInstance.close(); }, }; this.browserPagePool = genericPool.createPool(factory, { max: 3, min: 1, maxWaitingClients: 50, }); this.browserPagePool.on("factoryCreateError", err => { console.log(err); }); this.browserPagePool.on("factoryDestroyError", err => { console.log(err); }); // console.log(this.browserPagePool) } async openPage(html, format, quality = 100) { try { const page = await this.browserPagePool.acquire(); await page.goBack(); await page.goto(
data:text/html,${html}
, { waitUntil: ['networkidle0', 'domcontentloaded'] }); let replyData; if (format == 'image') { replyData = await page.screenshot({ type: 'jpeg', quality: quality, printBackground: true, encoding: "base64", waitUntil: 'networkidle0' }); } else if (format == 'pdf') { replyData = await page.pdf({ printBackground: true, format: 'A3' }); } await this.browserPagePool.release(page); return replyData; } catch (err) { console.log('error in browser pooling class', err); return ''; } }; } export default new BrowserPool();`