Initial commit
Dieser Commit ist enthalten in:
132
social_networks/vk/vk_registration.py
Normale Datei
132
social_networks/vk/vk_registration.py
Normale Datei
@ -0,0 +1,132 @@
|
||||
"""
|
||||
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}")
|
||||
In neuem Issue referenzieren
Einen Benutzer sperren