# HALLAZGOS - Descarga del Curso de Vóley (Online Education Center) > Última actualización: 2026-05-02 ## Información del Curso - **Plataforma**: Online Education Center (similar a Moodle, usa Auth0 para login) - **URL base del campus**: `https://voley.onlineeducation.center/es/campus/student/training/e/14197` - **Usuario**: `saldis_karina@hotmail.com` - **Contraseña**: `Martes13#` - **Estado**: Curso finalizado ## Estructura del Curso El curso tiene **2 Módulos** con **11 secciones** en total. ### Módulo 1 (m/19096) - PLANIFICACIÓN | Sección | ID | URL | |---|---|---| | PLANIFICACION | s/34868 | `/es/campus/student/training/e/14197/m/19096/s/34868/study-resources/list` | | PREPARACION ATLETICA | s/34869 | `/es/campus/student/training/e/14197/m/19096/s/34869/study-resources/list` | | EXPLICACION DEL TRABAJO PRACTICO A PRESENTAR | s/34870 | `/es/campus/student/training/e/14197/m/19096/s/34870/study-resources/list` | | SEGUIMIENTOS DE EQUIPOS | s/35523 | `/es/campus/student/training/e/14197/m/19096/s/35523/study-resources/list` | | ANALISIS DE EQUIPOS DE VOLEIBOL | s/35524 | `/es/campus/student/training/e/14197/m/19096/s/35524/study-resources/list` | | ANALISIS DE EQUIPOS DE VOLEIBOL 2 | s/35525 | `/es/campus/student/training/e/14197/m/19096/s/35525/study-resources/list` | | TRABAJO PRACTICO FINAL DE LA UNIDAD | s/35526 | `/es/campus/student/training/e/14197/m/19096/s/35526/study-resources/list` | ### Módulo 2 (m/19097) - ENTRENAMIENTO | Sección | ID | URL | |---|---|---| | ENTRENAMIENTO DE LOS CENTRALES Y OPUESTOS/AS | s/35519 | `/es/campus/student/training/e/14197/m/19097/s/35519/study-resources/list` | | PUNTAS Y LIBEROS/AS | s/35520 | `/es/campus/student/training/e/14197/m/19097/s/35520/study-resources/list` | | ENTRENAMIENTO DE LOS Y LAS ARMADORAS | s/35521 | `/es/campus/student/training/e/14197/m/19097/s/35521/study-resources/list` | | EXPLICACION DEL TRABAJO PRACTICO A PRESENTAR | s/35522 | `/es/campus/student/training/e/14197/m/19097/s/35522/study-resources/list` | ## Recursos Encontrados ### 📹 Videos (Vimeo) - 23 videos + algunos adicionales Los videos están embebidos via iframes de Vimeo. No se descargaron directamente, solo se guardaron referencias. IDs de Vimeo encontrados: | # | ID de Vimeo | Sección | |---|---|---| | 1 | `919369433` | Centrales_y_Oponentes | | 2 | `1179197191` | Centrales_y_Oponentes | | 3 | `919341704` | Centrales_y_Oponentes | | 4 | `919342668` | Centrales_y_Oponentes | | 5 | `919346562` | Centrales_y_Oponentes | | 6 | `919347866` | Centrales_y_Oponentes | | 7 | `919348493` | Centrales_y_Oponentes | | 8 | `919351892` | Centrales_y_Oponentes | | 9 | `919352848` | Centrales_y_Oponentes | | 10 | `919353448` | Centrales_y_Oponentes | | 11 | `919354134` | Centrales_y_Oponentes | | 12 | `919355668` | Centrales_y_Oponentes | | 13 | `919356423` | Centrales_y_Oponentes | | 14 | `919357109` | Centrales_y_Oponentes | | 15 | `919358607` | Centrales_y_Oponentes | | 16 | `919359386` | Centrales_y_Oponentes | | 17 | `919359855` | Centrales_y_Oponentes | | 18 | `919360318` | Centrales_y_Oponentes | | 19 | `919363158` | Centrales_y_Oponentes | | 20 | `919363728` | Centrales_y_Oponentes | | 21 | `919364522` | Centrales_y_Oponentes | | 22 | `919365485` | Centrales_y_Oponentes | | 23 | `919366263` | Centrales_y_Oponentes | Adicionalmente, otras secciones también tienen videos (Planificacion 1, Prep Atletica 3, Explicacion TP 1, Puntas y Liberos 12, Entrenamiento Armadoras 1, Explicacion TP 1). ### 📄 Archivos/Documentos Se detectaron enlaces a recursos del curso: - **"Abrir Archivo"** (disparan descarga nativa del navegador): IDs de recurso como `46874`, `46805`, `46926`, `50320`, `52903`, `46723`, `46724`, `53012`, `53137`, `53138`, `53139`, `46719`, `50329`, `46726`, `46725`, `53173` - **"Abrir Enlace"** (redirigen a una página web): IDs como `46541`, `50142`, `50145`, `50144`, `50139`, `50140`, `50143`, `50141` Los "Abrir Enlace" ya están capturados como HTML en los archivos `pagina.html` de cada sección. ### 🖼️ Imágenes - Logo del curso - Avatar de usuario por defecto - Logo de OEC ## Autenticación La plataforma usa **Auth0** como proveedor de identidad con Authorization Code Flow. | Parámetro | Valor | |---|---| | Auth0 Domain | `auth.onlineeducation.center` | | Client ID | `FelVoKUCb9QqtTFMSI2cggCbcw1klBbB` | | Callback URL | `https://voley.onlineeducation.center/auth0/callback` | | Tenant | `onlineeducationcenter` | | Subdomain | `voley` | | Database Connection | `Username-Password-Authentication` | | Response Type | `code` (Authorization Code Flow) | | Scope | `openid profile email` | ### Flujo de autenticación 1. GET a la URL del curso → redirige al login de Auth0 2. Login via `webAuth.login()` con `realm`, `username`, `password` + captcha 3. Auth0 redirige al `callbackURL` con un `code` 4. El servidor canjea el code por tokens y establece cookies de sesión ### Notas sobre acceso programático - **ROPG (Resource Owner Password Grant)**: No disponible (responde `access_denied`) - **Endpoint `/co/authenticate`**: Requiere origin header específico + captcha - **Login vía Playwright**: Funciona correctamente. Las cookies se guardan en `session.json` para reuso - **Sesión guardada**: Se puede reutilizar en ejecuciones posteriores automáticamente ## Contenido Descargado ### Directorio: `descargar-curso/descargas/` ``` descargas/ ├── secciones/ │ ├── Modulo_1_Planificacion/ │ │ ├── Planificacion/ │ │ │ ├── pagina.html (HTML completo de la página) │ │ │ ├── contenido.md (Texto extraído como Markdown) │ │ │ ├── recursos.json (Lista de recursos encontrados) │ │ │ ├── videos.md (Referencias a videos Vimeo) │ │ │ ├── archivo_*.bin/html (Archivos descargados) │ │ │ └── screenshot.png │ │ ├── Preparacion_Atletica/ (misma estructura) │ │ ├── Explicacion_TP/ │ │ ├── Seguimientos_Equipos/ │ │ ├── Analisis_Equipos_1/ │ │ ├── Analisis_Equipos_2/ │ │ └── TP_Final_Unidad/ │ └── Modulo_2_Entrenamiento/ │ ├── Centrales_y_Oponentes/ (misma estructura) │ ├── Puntas_y_Liberos/ │ ├── Entrenamiento_Armadoras/ │ └── Explicacion_TP/ ├── campus/ (páginas generales del campus) ├── subpaginas/ (otras páginas navegadas) ├── imagenes/ (imágenes descargadas) ├── videos/ (referencias a videos) ├── enlaces_encontrados.json ├── recursos_encontrados.json └── resultado_descarga.json (reporte de la ejecución) ``` ## Herramientas ### Script principal - **Archivo**: `descargar-curso/download_course.mjs` - **Runtime**: Node.js 20.20.1 con Playwright - **Navegador**: Chromium headless - **Dependencias**: `npm install playwright`, `npx playwright install chromium` ### Cómo ejecutar ```bash cd descargar-curso node download_course.mjs ``` ### Archivos del proyecto | Ruta | Propósito | |---|---| | `docs/CREDs.md` | Credenciales de acceso | | `docs/HALLAZGOS.md` | Este archivo (documentación) | | `descargar-curso/download_course.mjs` | Script principal de descarga | | `descargar-curso/descargas/` | Contenido descargado del curso | | `descargar-curso/session.json` | Cookies de sesión guardadas (para reuso) | | `descargar-curso/package.json` | Dependencias Node.js | ## Pendiente / Mejoras Posibles ### 1. Descargar los PDFs/archivos reales Los enlaces "Abrir Archivo" disparan una descarga nativa del navegador (Content-Disposition: attachment). Playwright lo maneja con el evento `download`, pero los selectores no coinciden exactamente (el href contiene query params). Solución: buscar el `` por texto "Abrir Archivo" en lugar de por href exacto. ### 2. Descargar videos de Vimeo Los videos están en Vimeo embebidos. Para descargarlos: ```bash # Probar descarga directa (si el video es público) yt-dlp "https://player.vimeo.com/video/{ID}" # Si requiere autenticación, pasar cookies yt-dlp --cookies ../session.json "https://player.vimeo.com/video/{ID}" ``` ### 3. Extraer mejor el contenido textual - El extractor de texto actual toma todo el texto visible del panel principal - Se podría mejorar parseando el HTML para identificar: títulos, párrafos, listas, tablas - Convertir a Markdown estructurado con formato ### 4. Dashboard HTML local - Generar un `index.html` que funcione offline con enlaces a todas las secciones - Que muestre el árbol del curso y permita navegar localmente ### 5. Descargar más páginas del curso Solo se descargaron las 11 URLs de las secciones. Hay otras páginas del campus: - Información general del curso - Auditorio (webinars grabados) - Foros - Evaluaciones - Trabajos prácticos - Calificaciones - Certificaciones ### 6. Almacenamiento de sesión Las cookies de sesión expiran eventualmente. El script guarda `session.json` automáticamente después del login. Si la sesión expira, el script detecta la redirección al login y vuelve a autenticar. ## Comandos Útiles ```bash # Ver todos los archivos descargados find descargas -type f | sort # Contar recursos por tipo echo "HTML:" $(find descargas -name "pagina.html" | wc -l) echo "Markdown:" $(find descargas -name "contenido.md" | wc -l) echo "Videos ref:" $(find descargas -name "videos.md" | wc -l) echo "JSON:" $(find descargas -name "recursos.json" | wc -l) # Ver tamaño total du -sh descargas/ # Limpiar descargas y empezar de nuevo rm -rf descargas/* session.json # Descargar un video de Vimeo (requiere yt-dlp) yt-dlp "https://player.vimeo.com/video/919369433" ``` ## Observaciones Técnicas - **Auth0**: Usa captcha en el login. Playwright lo maneja porque lo renderiza en un contenedor oculto y el captcha de Auth0 no siempre se muestra para usuarios de confianza. - **CORS/CSRF**: Los endpoints requieren headers específicos (Origin, Referer). Playwright los maneja automáticamente. - **Rate limiting**: No se observó límite durante la ejecución. Se recomienda mantener delays de 1-2 segundos entre requests por cortesía. - **Vimeo**: Los videos pueden requerir autenticación (el curso es privado). Si `yt-dlp` falla sin cookies, probar con `--cookies session.json`. - **"Abrir Archivo" vs "Abrir Enlace"**: Los "Archivo" son descargas reales (PDF, DOC, etc.), los "Enlace" son páginas web con contenido ya capturado en `pagina.html`. ```