# social_networks/ok_ru/ok_ru_registration.py """ OK.ru Registration - Klasse für die Registrierung bei OK.ru """ import time from typing import Dict, Any, Optional from .ok_ru_selectors import OkRuSelectors from utils.logger import setup_logger # Konfiguriere Logger logger = setup_logger("ok_ru_registration") class OkRuRegistration: """ Klasse für die Registrierung bei OK.ru. Behandelt den kompletten Registrierungsprozess. """ def __init__(self, automation): """ Initialisiert die OK.ru-Registration-Klasse. Args: automation: Referenz auf die Hauptautomatisierungsklasse """ self.automation = automation self.selectors = OkRuSelectors() logger.debug("OK.ru-Registration initialisiert") def register_account(self, full_name: str, age: int, registration_method: str = "phone", phone_number: str = None, **kwargs) -> Dict[str, Any]: """ Führt den Registrierungsprozess für einen OK.ru-Account durch. Args: full_name: Vollständiger Name age: Alter registration_method: Registrierungsmethode (normalerweise "phone") phone_number: Telefonnummer **kwargs: Weitere optionale Parameter Returns: Dict[str, Any]: Ergebnis der Registrierung mit Status """ logger.info(f"Starte OK.ru-Registrierung für '{full_name}'") try: # 1. Zur OK.ru mobilen Seite navigieren self.automation._emit_customer_log("🌐 Verbinde mit OK.ru...") if not self._navigate_to_homepage(): return { "success": False, "error": "Konnte nicht zur OK.ru-Startseite navigieren", "stage": "navigation" } # 2. Cookie-Banner behandeln (falls vorhanden) self._handle_cookie_banner() # 3. Registrieren-Button klicken self.automation._emit_customer_log("📝 Öffne Registrierungsformular...") if not self._click_register_button(): return { "success": False, "error": "Konnte Registrieren-Button nicht finden oder klicken", "stage": "register_button" } # Weitere Schritte müssen noch implementiert werden return { "success": False, "error": "OK.ru Registrierung in Entwicklung - weitere Schritte folgen", "stage": "in_development" } except Exception as e: error_msg = f"Unerwarteter Fehler bei OK.ru-Registrierung: {str(e)}" logger.error(error_msg, exc_info=True) return { "success": False, "error": error_msg, "stage": "exception" } def _navigate_to_homepage(self) -> bool: """ Navigiert zur OK.ru Startseite. Returns: bool: True bei Erfolg, False bei Fehler """ try: page = self.automation.browser.page logger.info("Navigiere zur OK.ru Startseite") page.goto("https://m.ok.ru/", wait_until="domcontentloaded", timeout=30000) # Warte auf Seitenladung self.automation.human_behavior.random_delay(2, 4) # Screenshot self.automation._take_screenshot("ok_ru_homepage") return True except Exception as e: logger.error(f"Fehler beim Navigieren zur OK.ru Startseite: {e}") return False def _handle_cookie_banner(self): """ Behandelt eventuelle Cookie-Banner. """ try: page = self.automation.browser.page for selector in self.selectors.COOKIE_ACCEPT_BUTTONS: try: if page.is_visible(selector): logger.info(f"Cookie-Banner gefunden: {selector}") page.wait_for_selector(selector, timeout=2000).click() self.automation.human_behavior.random_delay(1, 2) break except: continue except Exception as e: logger.debug(f"Kein Cookie-Banner gefunden oder Fehler: {e}") def _click_register_button(self) -> bool: """ Klickt auf den Registrieren-Button. Returns: bool: True bei Erfolg, False bei Fehler """ try: page = self.automation.browser.page # Warte kurz self.automation.human_behavior.random_delay(1, 2) # Versuche verschiedene Registrieren-Button-Selektoren register_selectors = [ self.selectors.REGISTRATION["register_button"], self.selectors.REGISTRATION["register_button_alt"], self.selectors.REGISTRATION["register_button_data"] ] for selector in register_selectors: try: if page.is_visible(selector, timeout=3000): logger.info(f"Registrieren-Button gefunden: {selector}") self.automation.human_behavior.random_delay(0.5, 1.5) page.click(selector) self.automation.human_behavior.random_delay(2, 3) # Screenshot nach Klick self.automation._take_screenshot("after_register_click") return True except Exception as e: logger.debug(f"Selektor {selector} nicht gefunden: {e}") continue # Screenshot für Debugging self.automation._take_screenshot("register_button_not_found") logger.error("Keinen Registrieren-Button gefunden") return False except Exception as e: logger.error(f"Fehler beim Klicken auf Registrieren-Button: {e}") return False