Rollbackpoint - Overlay kein Emoji
Dieser Commit ist enthalten in:
@ -1,3 +1,4 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
"""
|
||||
Basis-Klasse für alle Platform Worker Threads zur Eliminierung von Code-Duplikation
|
||||
"""
|
||||
@ -91,17 +92,24 @@ class BaseAccountCreationWorkerThread(QThread):
|
||||
automation_params["window_position"] = self.params.get("window_position")
|
||||
|
||||
automation = AutomationClass(**automation_params)
|
||||
|
||||
|
||||
# Setze Callback für kundenfreundliche Logs
|
||||
automation.set_customer_log_callback(lambda msg: self.log_signal.emit(msg))
|
||||
|
||||
|
||||
# Setze zusätzliche Callbacks für Facebook-Kompatibilität
|
||||
# Facebook verwendet _send_status_update und _send_log_update
|
||||
if hasattr(automation, 'status_update_callback'):
|
||||
automation.status_update_callback = lambda msg: self.update_signal.emit(msg)
|
||||
if hasattr(automation, 'log_update_callback'):
|
||||
automation.log_update_callback = lambda msg: self.log_signal.emit(msg)
|
||||
|
||||
self.update_signal.emit(f"{self.platform_name}-Automation initialisiert")
|
||||
self.progress_signal.emit(20)
|
||||
|
||||
# Browser-Schutz wird jetzt direkt in base_automation.py nach Browser-Start angewendet
|
||||
|
||||
# Account registrieren
|
||||
self.log_signal.emit(f"Registriere Account für: {self.params['full_name']}")
|
||||
self.log_signal.emit(f"Registriere Account: {self.params['full_name']}")
|
||||
|
||||
# Account registrieren mit allen Original-Parametern
|
||||
# Erstelle saubere Parameter für register_account
|
||||
@ -111,10 +119,14 @@ class BaseAccountCreationWorkerThread(QThread):
|
||||
"registration_method": self.params.get("registration_method", "email"),
|
||||
"email_domain": self.params.get("email_domain", "z5m7q9dk3ah2v1plx6ju.com")
|
||||
}
|
||||
|
||||
|
||||
# Füge optionale Parameter hinzu wenn vorhanden
|
||||
if "phone_number" in self.params:
|
||||
register_params["phone_number"] = self.params["phone_number"]
|
||||
|
||||
# Gender für Facebook (optional)
|
||||
if "gender" in self.params:
|
||||
register_params["gender"] = self.params["gender"]
|
||||
|
||||
# Additional params separat behandeln
|
||||
if "additional_params" in self.params:
|
||||
|
||||
@ -1,3 +1,4 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
"""
|
||||
Controller für Facebook-spezifische Funktionalität.
|
||||
Mit Fingerprint-Protection und Anti-Bot Features.
|
||||
@ -21,16 +22,16 @@ from utils.logger import setup_logger
|
||||
logger = setup_logger("facebook_controller")
|
||||
|
||||
class FacebookWorkerThread(BaseAccountCreationWorkerThread):
|
||||
"""Worker-Thread für die Facebook-Account-Erstellung."""
|
||||
"""Worker-Thread für die Facebook-Account-Erstellung."""
|
||||
|
||||
def __init__(self, params, session_controller=None, generator_tab=None):
|
||||
super().__init__(params, "Facebook", session_controller, generator_tab)
|
||||
self.birthday_generator = BirthdayGenerator()
|
||||
|
||||
|
||||
def get_automation_class(self):
|
||||
"""Gibt die Facebook Automation Klasse zurück"""
|
||||
return FacebookAutomation
|
||||
|
||||
|
||||
def get_error_interpretations(self) -> Dict[str, str]:
|
||||
"""Facebook-spezifische Fehlerinterpretationen"""
|
||||
return {
|
||||
@ -40,73 +41,10 @@ class FacebookWorkerThread(BaseAccountCreationWorkerThread):
|
||||
"account suspended": "Account wurde gesperrt",
|
||||
"verification required": "Verifizierung erforderlich"
|
||||
}
|
||||
|
||||
def run(self):
|
||||
"""Führt die Account-Erstellung aus."""
|
||||
try:
|
||||
self.log_signal.emit("Facebook-Account-Erstellung gestartet...")
|
||||
self.progress_signal.emit(10)
|
||||
|
||||
# Facebook-Automation initialisieren (mit Anti-Bot Features wie Instagram)
|
||||
automation = FacebookAutomation(
|
||||
headless=self.params.get("headless", False),
|
||||
use_proxy=self.params.get("use_proxy", False),
|
||||
proxy_type=self.params.get("proxy_type"),
|
||||
save_screenshots=True,
|
||||
debug=self.params.get("debug", False),
|
||||
email_domain=self.params.get("email_domain", "z5m7q9dk3ah2v1plx6ju.com"),
|
||||
enhanced_stealth=True, # Anti-Bot Features aktivieren
|
||||
fingerprint_noise=0.5, # Fingerprint-Verschleierung
|
||||
language="de" # Deutsche Version
|
||||
)
|
||||
|
||||
self.update_signal.emit("Browser wird vorbereitet...")
|
||||
self.progress_signal.emit(20)
|
||||
|
||||
# Namen aufteilen (falls zusammen übergeben)
|
||||
full_name = self.params.get("full_name", "")
|
||||
name_parts = full_name.split(" ", 1)
|
||||
first_name = name_parts[0] if name_parts else "Test"
|
||||
last_name = name_parts[1] if len(name_parts) > 1 else "User"
|
||||
|
||||
# Geburtsdatum aus Alter generieren
|
||||
age = self.params.get("age", random.randint(18, 65))
|
||||
birth_date_components = self.birthday_generator.generate_birthday_components("facebook", age)
|
||||
|
||||
# Geschlecht aus den Parametern oder default
|
||||
gender = self.params.get("gender", random.choice(["male", "female"]))
|
||||
logger.info(f"Geschlecht: {gender}")
|
||||
|
||||
self.log_signal.emit(f"Registriere Account für: {first_name} {last_name} (Alter: {age})")
|
||||
|
||||
# Account registrieren
|
||||
result = automation.register_account(
|
||||
first_name=first_name,
|
||||
last_name=last_name,
|
||||
birth_date=birth_date_components,
|
||||
gender=gender,
|
||||
email=self.params.get("email"), # Wird generiert wenn nicht vorhanden
|
||||
phone_number=self.params.get("phone_number"),
|
||||
password=self.params.get("password"), # Wird generiert wenn nicht vorhanden
|
||||
**self.params.get("additional_params", {})
|
||||
)
|
||||
|
||||
self.progress_signal.emit(100)
|
||||
|
||||
if result["success"]:
|
||||
self.log_signal.emit("Account erfolgreich erstellt!")
|
||||
self.finished_signal.emit(result)
|
||||
else:
|
||||
error_msg = result.get("error", "Unbekannter Fehler")
|
||||
self.log_signal.emit(f"Fehler bei der Account-Erstellung: {error_msg}")
|
||||
self.error_signal.emit(error_msg)
|
||||
|
||||
except Exception as e:
|
||||
logger.error(f"Fehler im Worker-Thread: {e}")
|
||||
self.log_signal.emit(f"Schwerwiegender Fehler: {str(e)}")
|
||||
self.error_signal.emit(str(e))
|
||||
finally:
|
||||
self.running = False
|
||||
|
||||
# WICHTIG: Keine eigene run() Methode mehr!
|
||||
# Facebook nutzt jetzt die zentrale run() aus BaseAccountCreationWorkerThread
|
||||
# Dies ermöglicht zentrale Callback-Verwaltung und konsistentes Verhalten
|
||||
|
||||
class FacebookController(BasePlatformController):
|
||||
"""Controller für die Facebook-Plattform."""
|
||||
|
||||
In neuem Issue referenzieren
Einen Benutzer sperren