Automatización de Compra de Entradas para Damai.cn con Python: Una Guía Técnica

Arquitectura Técnica y Enfoque

Una evolución clave en el desarrollo de estas herramientas es el paso de un enfoque basado únicamente en Selenium para controlar un navegador, a una arquitectura híbrida más eficiente:

  1. Fase de Inicio de Sesión: Se emplea Selenium para manejar procesos de autenticación complejos que puedan involucrar captchas o flujos dinámicos.
  2. Fase de Compra: Se cambia al uso directo de la librería requests para interactuar con las APIs de la plataforma, evitando la sobrecarga de renderizar una interfaz gráfica.
  3. Obtención de Datos: Los datos sobre disponibilidad de entradas se obtienen mediante peticiones HTTP.

Este enfoque puede mejorar el rendimiento en órdenes de magnitud.

Implementación del Flujo de Compra

1. Sistema de Autenticación

El script debe soportar múltiples métodos de inicio de sesión para adaptarse a diferentes escenarios. La lógica principle puede estructurarse en una clase.

class DamaiTicketBot:
    def autenticar(self, metodo='qr'):
        """Maneja el proceso de inicio de sesión."""
        if metodo == 'qr':
            return self._iniciar_sesion_qr()
        elif metodo == 'credenciales':
            return self._iniciar_sesion_credenciales()
        elif metodo == 'sms':
            return self._iniciar_sesion_sms()
        else:
            raise ValueError(f"Método '{metodo}' no soportado.")

    def _iniciar_sesion_qr(self):
        # Lógica para escanear código QR (Recomendado para producción)
        pass
    def _iniciar_sesion_credenciales(self):
        # Lógica para usuario/contraseña (Para pruebas)
        pass

2. Configuración y Obtención de Información

Cada evento en Damai.cn tiene un identificador único (item_id), que se extrae de la URL de la página del evento. Esta es la configuración central.

class ConfiguracionCompra:
    def __init__(self):
        self.id_evento = 610820299671   # ID único del concierto/evento
        self.lista_asistentes = ['Nombre Apellido']  # Nombres de los asistentes registrados en la cuenta
        self.cantidad_entradas = 1      # Debe coincidir con el número de asistentes
        self.precio_objetivo = 180      # Precio de la categoría deseada (en RMB)
        self.frecuencia_consulta = 0.3  # Segundos entre chequeos de disponibilidad

3. Monitorización y Ejecución de la Compra

El núcleo del proceso reside en monitorizar la disponibilidad y ejecutar la compra automáticamente cuando se cumplan las condiciones.

class EjecutorCompra:
    def monitorear_y_comprar(self, config):
        """Bucle principal que verifica disponibilidad y realiza la compra."""
        while True:
            estado = self._consultar_disponibilidad(config.id_evento)
            if estado['disponible'] and estado['precio'] == config.precio_objetivo:
                exito = self._realizar_compra_rapida(config)
                if exito:
                    print("¡Compra exitosa!")
                    break
            time.sleep(config.frecuencia_consulta)

    def _realizar_compra_rapida(self, config):
        """Orquesta los pasos finales de la compra."""
        # 1. Obtener detalles del pedido para el evento y precio
        info_pedido = self._obtener_info_pedido(config.id_evento, config.precio_objetivo)
        # 2. Seleccionar la entrada (automáticamente)
        # 3. Asignar los asistentes predefinidos
        # 4. Enviar y confirmar el pedido
        # 5. Retornar True/False según el resultado
        pass

Guía de Configuración y Ejecución

  1. Preparar el Entorno:
    • Instalar Python 3.8 o superior.
    • Instalar dependencias: pip install selenium requests.
    • Descargar el controlador (chromedriver) compatible con tu versión de Chrome y colocarlo en el PATH.
  2. Configurar los Parámetros:
    • Obtener el id_evento de la URL del evento en Damai.cn.
    • Verificar que los nombres en lista_asistentes coincidan exactamente con los registrados en tu cuenta de Damai.
  3. Ejecutar el Script: Iniciar el script unos minutos antes de que comience la venta general.

Estrategias Avanzadas y Optimiazción

  • Múltiples Cuentas: Utilizar varias cuentas (cada una con sus propios asistentes registrados) puede aumentar las posibilidades. Un script modificado puede rotar entre ellas.
  • Estabilidad de Red: Usar una conexión por cable (Ethernet) en lugar de WiFi reduce la latencia. En entornos profesionales, se podría desplegar en un servidor con conexión de baja latencia.
  • Manejo de Errores y Límites: El código debe incluir reintentos inteligentes para errores de red, respuestas inesperadas de la API, y manejar casos donde un artículo se agote durante el proceso de checkout.

Código de Ejemplo para Monitorización

Una función independiente para verificar disponibilidad podría verse así:

import requests
import time

def verificar_entradas_disponibles(id_evento, precio_deseado, intervalo=0.5):
    """
    Monitorea la disponibilidad de entradas para un evento y precio específicos.
    """
    url_api = f"https://api.damai.cn/alipay/performance/detail?itemId={id_evento}" # URL de ejemplo
    headers = {'User-Agent': 'Mozilla/5.0'}

    print(f"Monitoreando evento {id_evento} para precio {precio_deseado}...")
    while True:
        try:
            respuesta = requests.get(url_api, headers=headers, timeout=5)
            datos = respuesta.json()
            # Suponiendo que la API retorna una lista de categorías de precios
            for categoria in datos.get('priceList', []):
                if categoria.get('price') == precio_deseado and categoria.get('sellable', False):
                    print(f"¡Entradas a {precio_deseado} disponibles!")
                    return True # Señal para que el proceso principal proceda a comprar
        except requests.exceptions.RequestException as e:
            print(f"Error de red: {e}. Reintentando...")
        except KeyError as e:
            print(f"Estructura de datos inesperada: {e}")

        time.sleep(intervalo) # Espera antes del siguiente intento

Nota: La URL y estructura de la API real pueden diferir y requieren investigación.

Consideraciones Finales

Este tipo de automatización es una aplicación práctica de Python para web scraping e interacción con APIs. La ética y el cumplimiento de los términos de servicio de la plataforma son responsabilidad del usuario. Es crucial utilizar tales scripts para aprendizaje personal y pruebas, respetando los límites de solicitudes para no sobrecargar los servidores. Las estrategias más efectivas a menudo combinan una herramienta técnica bien configurada con el conocimiento de los patrones de venta específicos del evento.

Etiquetas: Python Selenium requests Web Scraping Damai.cn

Publicado el 10-9 06:24