""" VK Registrierung - Handhabt den Registrierungsprozess """ import logging import time import random from typing import Dict from playwright.sync_api import Page from social_networks.vk import vk_selectors as selectors from social_networks.vk.vk_ui_helper import VKUIHelper logger = logging.getLogger("vk_registration") class VKRegistration: """ Handhabt den VK Registrierungsprozess """ def __init__(self, page: Page, ui_helper: VKUIHelper, screenshots_dir: str = None, save_screenshots: bool = True): """ Initialisiert die Registrierung """ self.page = page self.ui_helper = ui_helper self.screenshots_dir = screenshots_dir self.save_screenshots = save_screenshots def fill_registration_form(self, account_data: Dict[str, str]) -> Dict[str, any]: """ Füllt das Registrierungsformular aus """ try: logger.info("Fülle VK Registrierungsformular aus") # Warte auf Registrierungsseite time.sleep(random.uniform(2, 3)) self.ui_helper.take_screenshot("registration_form") # Vorname eingeben if self.ui_helper.wait_for_element(selectors.REGISTRATION_FIRST_NAME, timeout=10000): first_name = account_data.get("first_name", "") logger.info(f"Gebe Vorname ein: {first_name}") self.ui_helper.type_with_delay(selectors.REGISTRATION_FIRST_NAME, first_name) time.sleep(random.uniform(0.5, 1)) # Nachname eingeben if self.ui_helper.wait_for_element(selectors.REGISTRATION_LAST_NAME, timeout=5000): last_name = account_data.get("last_name", "") logger.info(f"Gebe Nachname ein: {last_name}") self.ui_helper.type_with_delay(selectors.REGISTRATION_LAST_NAME, last_name) time.sleep(random.uniform(0.5, 1)) # Geburtstag auswählen self._select_birthday(account_data) # Geschlecht auswählen self._select_gender(account_data) # Screenshot vor dem Fortfahren self.ui_helper.take_screenshot("registration_form_filled") # Fortfahren Button klicken if self.ui_helper.wait_for_element(selectors.REGISTRATION_CONTINUE_BUTTON, timeout=5000): logger.info("Klicke auf Fortfahren") self.ui_helper.click_with_retry(selectors.REGISTRATION_CONTINUE_BUTTON) time.sleep(random.uniform(2, 3)) return { "success": True, "message": "Registrierungsformular ausgefüllt" } except Exception as e: logger.error(f"Fehler beim Ausfüllen des Registrierungsformulars: {e}") self.ui_helper.take_screenshot("registration_form_error") return { "success": False, "error": str(e), "message": f"Fehler beim Ausfüllen des Formulars: {str(e)}" } def _select_birthday(self, account_data: Dict[str, str]): """ Wählt das Geburtsdatum aus """ try: birthday = account_data.get("birthday", "1990-01-15") year, month, day = birthday.split("-") # Tag auswählen if self.ui_helper.wait_for_element(selectors.REGISTRATION_BIRTHDAY_DAY, timeout=5000): logger.info(f"Wähle Geburtstag: {day}") self.ui_helper.select_dropdown_option(selectors.REGISTRATION_BIRTHDAY_DAY, day.lstrip("0")) time.sleep(random.uniform(0.3, 0.6)) # Monat auswählen if self.ui_helper.wait_for_element(selectors.REGISTRATION_BIRTHDAY_MONTH, timeout=5000): logger.info(f"Wähle Geburtsmonat: {month}") self.ui_helper.select_dropdown_option(selectors.REGISTRATION_BIRTHDAY_MONTH, month.lstrip("0")) time.sleep(random.uniform(0.3, 0.6)) # Jahr auswählen if self.ui_helper.wait_for_element(selectors.REGISTRATION_BIRTHDAY_YEAR, timeout=5000): logger.info(f"Wähle Geburtsjahr: {year}") self.ui_helper.select_dropdown_option(selectors.REGISTRATION_BIRTHDAY_YEAR, year) time.sleep(random.uniform(0.3, 0.6)) except Exception as e: logger.warning(f"Fehler bei der Geburtsdatum-Auswahl: {e}") def _select_gender(self, account_data: Dict[str, str]): """ Wählt das Geschlecht aus """ try: gender = account_data.get("gender", "male").lower() if gender == "female": if self.ui_helper.wait_for_element(selectors.REGISTRATION_GENDER_FEMALE, timeout=5000): logger.info("Wähle Geschlecht: Weiblich") self.ui_helper.check_radio_button(selectors.REGISTRATION_GENDER_FEMALE) else: if self.ui_helper.wait_for_element(selectors.REGISTRATION_GENDER_MALE, timeout=5000): logger.info("Wähle Geschlecht: Männlich") self.ui_helper.check_radio_button(selectors.REGISTRATION_GENDER_MALE) time.sleep(random.uniform(0.3, 0.6)) except Exception as e: logger.warning(f"Fehler bei der Geschlechtsauswahl: {e}")