es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Cómo cambiar el nombre de un archivo antes de descargarlo en Puppeteer?

Necesito descargar varios archivos .csv de una página web y guardarlos con diferentes nombres. Sin embargo, todos se descargan con el mismo nombre. Y por lo tanto, continúan sobrescribiéndose entre sí, dejándome solo con un archivo al final. Aquí está mi código:


for(let i = 0; i <= 10; i++){
await page._client.send("Page.setDownloadBehavior", {
behavior: "allow",
downloadPath: ./csvFiles/,
});
await page.click("button_selector");
}

La descarga comienza después de que Puppeteer hace clic en el botón de descarga, y como todo este código está en un bucle, no puedo cambiar el nombre de los archivos porque solo se crean después de que el bucle termina, momento en el que solo tengo un archivo descargado.

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Para descargar varios archivos .csv con diferentes nombres, puedes añadir una marca de tiempo al nombre del archivo. Aquí te mostramos cómo modificar el código para lograr esto:

    const timestamp = Date.now();
    for(let i = 0; i <= 10; i++){
        await page._client.send("Page.setDownloadBehavior", {
            behavior: "allow",
            downloadPath: `./csvFiles/`,
        });
        await page.click("button_selector");
        await page.waitForTimeout(5000); // Esperar a que termine la descarga
        const oldFileName = `./csvFiles/filename.csv`;
        const newFileName = `./csvFiles/filename_${i}_${timestamp}.csv`;
        await fs.rename(oldFileName, newFileName); // Renombrar el archivo
    }
    

    Este código añade una marca de tiempo al nombre del archivo utilizando Date.now(). Cada archivo tendrá también un índice único (i) en el bucle. El método fs.rename se utiliza para renombrar el archivo. Ten en cuenta que este código asume que estás utilizando el módulo fs para interactuar con el sistema de archivos. Puedes importarlo así:

    const fs = require('fs').promises;
    

    Con esta modificación, cada archivo tendrá un nombre único y no sobrescribirá el anterior.

Comments are closed.