Tengo un script creado con node.js y titiritero que descarga un archivo desde un botón (que no redirige a una URL), así que ahora mismo estoy usando await page.waitForTimeout(1000); esperar a que se complete la descarga, pero tiene algunas fallas, como:
Dependiendo de la conexión, la descarga puede tardar más de 1000 ms en finalizar, así como también puede tardar menos, lo que no tendría sentido esperar más de lo que tardó en finalizar la descarga.
Mi pregunta es, ¿hay alguna forma de esperar a que se complete una descarga usando Node+Puppeteer? Intenté usar waitUntil: 'networkidle0 y networkidle2 pero ambos parecen esperar para siempre.
Código a continuación:
const path = require('path'); const puppeteer = require('puppeteer'); (async () => { /* Initialize some variables */ const browser = await puppeteer.launch(); // Instantiates a new page const page = await browser.newPage(); // Gets current path const downloadPath = path.resolve('./'); // Specifies wether it allows downloading multiple files or not await page._client.send('Page.setDownloadBehavior', {behavior: 'allow', downloadPath: downloadPath}); // Goes to My Website await page.goto('http://localhost:8080/mywebsite'); // Exports to CSV await page.waitForSelector("#W0009EXPORTAXLS > a > i", {visible: true}); await page.tap("#W0009EXPORTAXLS > a > i"); await page.waitForTimeout(1000); // Log console.log('File exported.'); // Closes the browser await browser.close(); })();