Initial commit
Dieser Commit ist enthalten in:
178
social_networks/ok_ru/ok_ru_registration.py
Normale Datei
178
social_networks/ok_ru/ok_ru_registration.py
Normale Datei
@ -0,0 +1,178 @@
|
||||
# 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
|
||||
In neuem Issue referenzieren
Einen Benutzer sperren