import { chromium } from "playwright"; import fs from "fs"; import path from "path"; import { fileURLToPath } from "url"; const __dirname = path.dirname(fileURLToPath(import.meta.url)); const SESSION_FILE = path.join(__dirname, "session.json"); const FALTANTES = [ { url: "https://voley.onlineeducation.center/es/campus/student/training/e/14197/m/19096/s/34868/study-resources/50320/show?me=140219", dest: "descargas/secciones/Modulo_1_Planificacion/Planificacion/recurso_50320.pdf" }, { url: "https://voley.onlineeducation.center/es/campus/student/training/e/14197/m/19096/s/34868/study-resources/46541/show?me=140221", dest: "descargas/secciones/Modulo_1_Planificacion/Planificacion/recurso_46541.pdf" }, { url: "https://voley.onlineeducation.center/es/campus/student/training/e/14197/m/19096/s/34868/study-resources/50142/show?me=140224", dest: "descargas/secciones/Modulo_1_Planificacion/Planificacion/recurso_50142.pdf" }, { url: "https://voley.onlineeducation.center/es/campus/student/training/e/14197/m/19096/s/34868/study-resources/50145/show?me=140225", dest: "descargas/secciones/Modulo_1_Planificacion/Planificacion/recurso_50145.pdf" }, { url: "https://voley.onlineeducation.center/es/campus/student/training/e/14197/m/19096/s/34868/study-resources/50144/show?me=140226", dest: "descargas/secciones/Modulo_1_Planificacion/Planificacion/recurso_50144.pdf" }, { url: "https://voley.onlineeducation.center/es/campus/student/training/e/14197/m/19096/s/34869/study-resources/50139/show?me=140234", dest: "descargas/secciones/Modulo_1_Planificacion/Preparacion_Atletica/recurso_50139.pdf" }, { url: "https://voley.onlineeducation.center/es/campus/student/training/e/14197/m/19096/s/34869/study-resources/50140/show?me=140236", dest: "descargas/secciones/Modulo_1_Planificacion/Preparacion_Atletica/recurso_50140.pdf" }, { url: "https://voley.onlineeducation.center/es/campus/student/training/e/14197/m/19096/s/34869/study-resources/50143/show?me=140237", dest: "descargas/secciones/Modulo_1_Planificacion/Preparacion_Atletica/recurso_50143.pdf" }, { url: "https://voley.onlineeducation.center/es/campus/student/training/e/14197/m/19096/s/34869/study-resources/50141/show?me=140238", dest: "descargas/secciones/Modulo_1_Planificacion/Preparacion_Atletica/recurso_50141.pdf" }, ]; (async () => { const browser = await chromium.launch({ headless: true }); const context = await browser.newContext({ storageState: fs.existsSync(SESSION_FILE) ? SESSION_FILE : undefined, acceptDownloads: true }); const page = await context.newPage(); console.log("Chequeando sesión..."); await page.goto("https://voley.onlineeducation.center/es/campus/student/training/e/14197"); if (page.url().includes("login")) { console.log("Sesion expirada, iniciando login..."); await page.waitForSelector("#login-email", { timeout: 15000 }); await page.fill("#login-email", "saldis_karina@hotmail.com"); await page.fill("#login-password", "Martes13#"); await page.click("#btn-login"); await page.waitForURL("**/es/campus/**", { timeout: 30000 }); console.log("Login exitoso, guardando sesión..."); await context.storageState({ path: SESSION_FILE }); } for (const f of FALTANTES) { const fullDest = path.join(__dirname, f.dest); if (fs.existsSync(fullDest)) { console.log("Ya existe:", f.dest); continue; } console.log("Navegando a", f.url); try { const [download] = await Promise.all([ page.waitForEvent('download', { timeout: 10000 }), page.goto(f.url).catch(e => {}) // catch the 'download is starting' navigation error ]); await download.saveAs(fullDest); console.log("Guardado como descarga:", fullDest); } catch (e) { // No disparó descarga, debe ser una página try { await page.goto(f.url, { waitUntil: 'networkidle', timeout: 10000 }); } catch (e2) {} await page.pdf({ path: fullDest, format: 'A4' }); console.log("Guardado como PDF renderizado:", fullDest); } } await browser.close(); })();