Tengo urls de archivo pdf. ex:
const filesUrl= ["http://example.com/animal.pdf", "https://example.com/fruit.pdf", "http://example.com/stars.pdf"]Quiero descargar esos archivos y guardarlos en la carpeta de mi servidor usando titiritero.
Lo que estoy haciendo es:
Pero tengo un error: [ERR_INVALID_CALLBACK]: la devolución de llamada debe ser una función. Recibido indefinido
Si miro el navegador, el bucle no espera hasta que la página esté completamente cargada.
este es mi código:
const filesUrl = await page.$$eval("li.b_algo h2 a", urls => { return urls.map(url => url.href) }) // filesUrl = ["http://example.com/animal.pdf", "https://example.com/fruit.pdf", "http://example.com/stars.pdf"] for (const fileUrl of filesUrl) { try { const filepage = await page.goto(fileUrl) await fs.writeFile(Math.random() + ".pdf", await filepage.buffer()) } catch (error) { console.log('errorsadasd:', error); } } await browser.close()El error no está relacionado con el puppeteer , sino con fs.writeFile , que requiere una devolución de llamada como argumento, que falta, es decir, no está undefined , de ahí el error.
Intenta agregar la devolución de llamada:
await fs.writeFile(Math.random() + ".pdf", await filepage.buffer(), () => { console.log('done writing file'); });Intente usar writeFile, pero envuelto en una promesa:
import fs from 'fs'; const fsPromises = fs.promises; const writeFilePromise = fsPromises.writeFile; await writeFilePromise(Math.random() + ".pdf", await filepage.buffer());