Puppeteer page.goto(url) dentro de un bucle no espera hasta que se cargue
Tengo URLs de archivos PDF.
ej:
const filesUrl= ["http://example.com/animal.pdf", "https://example.com/fruit.pdf", "http://example.com/stars.pdf"]
Quiero descargar esos archivos y guardarlos en mi carpeta de servidor usando Puppeteer.
Lo que estoy haciendo es:
1. Recorrer filesUrl.
2. En cada recorrido, uso page.goto(url)
.
3. Escribir el archivo usando fs.writeFile
.
4. Siguiente recorrido.
Pero tengo el siguiente error: [ERR_INVALID_CALLBACK]: Callback debe ser una función. Se recibió indefinido.
Si veo el navegador, veo que el ciclo no espera hasta que la página se haya cargado por completo.
Este es mi código:
const filesUrl = await page.$$eval("li.b_algo h2 a", urls => {
return urls.map(url => url.href)
})
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()
davy.ai
Para solucionar el error y asegurarse de que el bucle espere hasta que la página esté completamente cargada antes de continuar, puedes modificar tu código de la siguiente manera:
await
antes defs.writeFile
para asegurarte de que el script espere hasta que el archivo se haya escrito antes de pasar al siguiente bucle.Utiliza
page.waitForNavigation()
opage.waitForSelector()
antes de escribir el archivo para asegurarte de que la página esté completamente cargada antes de intentar acceder a su contenido.Aquí está el código modificado:
Esto debería solucionar el error y asegurarse de que los archivos se descarguen y guarden correctamente en la carpeta del servidor.