Este proyecto es un bot automatizado que busca trenes en tu abono de Renfe y los selecciona por ti. El bot se encarga de refrescar la página y seleccionar el tren deseado, ahorrándote tiempo y esfuerzo.
El bot está diseñado para ayudarte a encontrar y reservar trenes en tu abono de Renfe sin tener que estar constantemente refrescando la página. Una vez que inicias sesión y seleccionas el abono, podrás seleccionar una fecha y un trayecto (ida o vuelta) y los viajes (horas) que mejor te convengan. El bot intentará cogerlos indefinidamente hasta que consiga uno de ellos.
Tener Playwright junto con sus navegadores.
Para ejecutar este proyecto, necesitas tener instaladas las siguientes librerías de Python:
PyQt6playwright
Puedes instalar todas las dependencias utilizando el archivo requirements.txt:
pip install -r requirements.txtDespués de instalar las dependencias, debes instalar los navegadores de Playwright:
playwright install chromiumpython main.pypython login.pyNota: Este método mostrará una advertencia de deprecación pero seguirá funcionando correctamente.
Simplemente sigue las instrucciones en la interfaz gráfica.
Renfe posiblemente solicite un captcha al iniciar sesión, por lo que se recomienda usar el inicio de sesión manual.
El proyecto ha sido refactorizado desde un archivo monolítico (login.py con 1144 líneas) a una arquitectura modular:
botRenfe/
├── constants.py # URLs, selectores CSS, timeouts, mensajes
├── config.py # Gestión de credenciales (carga/guarda)
├── models/
│ └── abono.py # Clase AbonoInfo (datos de abonos)
├── browser/
│ ├── worker.py # BrowserWorker (automatización con Playwright)
│ └── thread.py # BrowserThread (gestión del event loop asyncio)
├── ui/
│ ├── dialogs.py # LoginDialog (diálogo de inicio de sesión manual)
│ └── main_window.py # RenfeBot (ventana principal)
├── main.py # Punto de entrada de la aplicación
└── login.py # Punto de entrada legacy (redirige a main.py)
- Mantenibilidad: Cada módulo tiene una responsabilidad clara
- Testabilidad: Componentes aislados, fácil de probar
- Reutilización: BrowserWorker puede usarse sin la UI
- Escalabilidad: Fácil añadir nuevas funcionalidades en los módulos apropiados
- Organización: De 1 archivo → 12 archivos bien estructurados