Tengo un web scrapper que verifica una URL y hace capturas de pantalla de la página para mí, quiero un intervalo entre cada vez que se verifica la URL, ya que el sitio web es sensible a demasiadas solicitudes por minuto. Aquí está mi código. Agradecería cualquier ayuda ya que estoy totalmente atascado con él:
const puppeteer = require('puppeteer'); process.setMaxListeners(Infinity) const fs = require('fs'); const csv = require('csv-parser'); const { setTimeout } = require('timers/promises'); var inputFile = 'app_ids.csv'; fs.createReadStream(inputFile) .pipe(csv()) .on('data', function (data) { try { // console.log(data.app_id); (async () => { let app_id = data.app_id console.log(app_id) const browser = await puppeteer.launch(); const page = await browser.newPage(); await page.goto('https://evisatraveller.mfa.ir/fa/request/state/' + app_id,{ waitUntil: 'load', timeout: 0 }); await page.screenshot({ path: 'output/' + app_id + '.png' }); await browser.close(); })(); } catch (err) { console.log('Error:', err) //error handler } }) .on('end', function () { //some final operation }); y si configuro el tiempo de timeout en cualquier número, no funciona, supongo que usar el intervalo es la única forma, pero no sé dónde implementarlo.
Puede agregar esta función a continuación al final de su código.
function blockingWait(seconds) { var waitTill = new Date(new Date().getTime() + seconds * 1000); while(waitTill > new Date()){} } Luego agregue blockingWait(15); después del bloque try-catch
Por lo tanto, habrá un tiempo de espera 15 segundos antes de que se cierre el navegador o después de que se cierre el navegador.
Cambie el 15 a cualquiera que sea su elección de número.