Gmail weiter gemacht

Dieser Commit ist enthalten in:
Claude Project Manager
2025-08-10 14:23:51 +02:00
Ursprung 04585e95b6
Commit fe1bb9baaa
13 geänderte Dateien mit 1572 neuen und 363 gelöschten Zeilen

Datei anzeigen

@ -5,7 +5,7 @@ Gmail Verification - Handhabt die Verifizierungsprozesse
import logging
import time
import random
from typing import Dict, Optional
from typing import Dict, Optional, Any
from playwright.sync_api import Page
from social_networks.gmail import gmail_selectors as selectors
@ -20,7 +20,8 @@ class GmailVerification:
"""
def __init__(self, page: Page, ui_helper: GmailUIHelper, email_handler: EmailHandler = None,
screenshots_dir: str = None, save_screenshots: bool = True):
screenshots_dir: str = None, save_screenshots: bool = True,
phone_service: Optional[Any] = None):
"""
Initialisiert den Verification Handler
"""
@ -29,17 +30,18 @@ class GmailVerification:
self.email_handler = email_handler
self.screenshots_dir = screenshots_dir
self.save_screenshots = save_screenshots
self.phone_service = phone_service
def handle_phone_verification(self, account_data: Dict[str, str]) -> Dict[str, any]:
"""
Handhabt die Telefonnummer-Verifizierung
Enhanced Telefonnummer-Verifizierung mit 2025 Skip-Techniken
"""
try:
logger.info("Starte Telefon-Verifizierung")
logger.info("[PHONE-VERIFY] Starte enhanced Telefon-Verifizierung")
# Warte auf Telefonnummer-Eingabefeld
if not self.ui_helper.wait_for_element(selectors.PHONE_INPUT, timeout=10000):
logger.info("Telefonnummer-Eingabefeld nicht gefunden")
logger.info("[PHONE-VERIFY] ✅ Telefonnummer-Eingabefeld nicht gefunden - Erfolg!")
return {
"success": True,
"message": "Keine Telefon-Verifizierung erforderlich"
@ -47,21 +49,38 @@ class GmailVerification:
self.ui_helper.take_screenshot("phone_verification_page")
# Telefonnummer eingeben
# Enhanced Skip-Versuch bevor Telefonnummer eingegeben wird
phone = account_data.get("phone", "")
if not phone:
logger.warning("Keine Telefonnummer vorhanden, überspringe wenn möglich")
# Versuche zu überspringen
if self.ui_helper.is_element_visible(selectors.SKIP_BUTTON):
self.ui_helper.click_with_retry(selectors.SKIP_BUTTON)
time.sleep(random.uniform(2, 3))
return {"success": True}
else:
return {
"success": False,
"error": "Telefonnummer erforderlich aber nicht vorhanden",
"message": "Telefonnummer wird benötigt"
}
logger.warning("[PHONE-VERIFY] Keine Telefonnummer vorhanden - versuche erweiterte Skip-Methoden")
# Versuche alle Skip-Button Varianten
for skip_variant in selectors.SKIP_BUTTON_VARIANTS[:10]: # Top 10 Varianten
if self.ui_helper.is_element_visible(skip_variant, timeout=500):
logger.info(f"[PHONE-VERIFY] Skip-Button gefunden: {skip_variant}")
self.ui_helper.click_with_retry(skip_variant)
time.sleep(random.uniform(2, 3))
# Prüfe ob erfolgreich übersprungen
if not self.ui_helper.is_element_visible(selectors.PHONE_INPUT, timeout=2000):
return {"success": True, "message": "Telefon erfolgreich übersprungen"}
# Fallback: Versuche mit leerem Feld fortzufahren
logger.info("[PHONE-VERIFY] Versuche mit leerem Feld fortzufahren")
try:
self.page.locator(selectors.PHONE_INPUT).fill("")
if self.ui_helper.click_with_retry(selectors.NEXT_BUTTON):
time.sleep(2)
if not self.ui_helper.is_element_visible(selectors.SMS_CODE_INPUT, timeout=3000):
return {"success": True, "message": "Mit leerem Feld fortgefahren"}
except:
pass
return {
"success": False,
"error": "phone_required",
"message": "Telefonnummer wird benötigt - alle Skip-Versuche fehlgeschlagen"
}
logger.info(f"Gebe Telefonnummer ein: {phone}")
@ -84,8 +103,19 @@ class GmailVerification:
logger.info("SMS-Code Eingabefeld gefunden")
self.ui_helper.take_screenshot("sms_code_page")
# Hier würde normalerweise der SMS-Code abgerufen werden
sms_code = self._get_sms_code(phone)
# SMS-Code beziehen: bevorzugt aus account_data, sonst Provider, sonst Fallback
sms_code: Optional[str] = None
try:
if isinstance(account_data, dict):
if account_data.get("sms_code"):
sms_code = str(account_data.get("sms_code")).strip()
elif callable(account_data.get("sms_code_provider")):
sms_code = account_data.get("sms_code_provider")(phone)
except Exception as prov_e:
logger.warning(f"SMS-Code Provider-Fehler: {prov_e}")
if not sms_code:
# Hier würde normalerweise der SMS-Code abgerufen werden
sms_code = self._get_sms_code(phone)
if not sms_code:
logger.error("Kein SMS-Code erhalten")
@ -179,10 +209,19 @@ class GmailVerification:
Ruft den SMS-Code ab
TODO: Implementierung für echte SMS-Code Abfrage
"""
logger.warning("SMS-Code Abruf noch nicht implementiert - verwende Platzhalter")
# In einer echten Implementierung würde hier der SMS-Code
# von einem SMS-Service abgerufen werden
return "123456" # Platzhalter
# 1) Bevorzugt: externer Phone-Service
try:
if self.phone_service and hasattr(self.phone_service, 'get_code'):
logger.info("Frage SMS-Code über phone_service an")
code = self.phone_service.get_code(phone)
if code:
return str(code).strip()
except Exception as e:
logger.warning(f"phone_service.get_code Fehler: {e}")
# 2) Fallback: Platzhalter (nur für Tests/Entwicklung)
logger.warning("SMS-Code Abruf nicht konfiguriert – verwende Platzhalter")
return "123456"
def _check_verification_success(self) -> bool:
"""
@ -227,4 +266,4 @@ class GmailVerification:
return "Verifizierung fehlgeschlagen"
except:
return "Unbekannter Fehler"
return "Unbekannter Fehler"