Rollbackpoint - Overlay kein Emoji
Dieser Commit ist enthalten in:
@ -17,6 +17,28 @@ from utils.text_similarity import TextSimilarity, fuzzy_find_element, click_fuzz
|
||||
# Konfiguriere Logger
|
||||
logger = logging.getLogger("base_automation")
|
||||
|
||||
|
||||
def _clean_message(message: str) -> str:
|
||||
"""
|
||||
Entfernt Emojis und normalisiert Leerzeichen aus Log-Nachrichten.
|
||||
|
||||
Diese zentrale Funktion filtert alle Emojis und Sonderzeichen aus Display-Nachrichten,
|
||||
um eine konsistente und saubere Anzeige im ForgeAnimationDialog zu gewährleisten.
|
||||
|
||||
Args:
|
||||
message: Die zu bereinigende Nachricht
|
||||
|
||||
Returns:
|
||||
str: Bereinigte Nachricht ohne Emojis und normalisierte Leerzeichen
|
||||
"""
|
||||
import re
|
||||
# Entferne alle Zeichen außer: Buchstaben, Zahlen, Leerzeichen, Satzzeichen, Umlaute
|
||||
clean = re.sub(r'[^\w\s\-.,!?äöüÄÖÜß():/@]', '', message)
|
||||
# Normalisiere mehrfache Leerzeichen zu einem
|
||||
clean = ' '.join(clean.split())
|
||||
return clean
|
||||
|
||||
|
||||
class BaseAutomation(ABC):
|
||||
"""
|
||||
Abstrakte Basisklasse für die Automatisierung von sozialen Netzwerken.
|
||||
@ -108,11 +130,15 @@ class BaseAutomation(ABC):
|
||||
def set_customer_log_callback(self, callback):
|
||||
"""Setzt den Callback für kundenfreundliche Log-Nachrichten."""
|
||||
self.customer_log_callback = callback
|
||||
|
||||
|
||||
def _emit_customer_log(self, message: str):
|
||||
"""Sendet eine kundenfreundliche Log-Nachricht."""
|
||||
"""
|
||||
Sendet eine kundenfreundliche Log-Nachricht.
|
||||
Filtert automatisch Emojis für saubere Anzeige.
|
||||
"""
|
||||
clean_message = _clean_message(message)
|
||||
if self.customer_log_callback:
|
||||
self.customer_log_callback(message)
|
||||
self.customer_log_callback(clean_message)
|
||||
|
||||
def _initialize_browser(self) -> bool:
|
||||
"""
|
||||
@ -240,33 +266,37 @@ class BaseAutomation(ABC):
|
||||
def _send_status_update(self, status: str) -> None:
|
||||
"""
|
||||
Sendet ein Status-Update über den Callback.
|
||||
|
||||
Filtert automatisch Emojis für saubere Anzeige.
|
||||
|
||||
Args:
|
||||
status: Status-Nachricht
|
||||
"""
|
||||
clean_status = _clean_message(status)
|
||||
if self.status_update_callback:
|
||||
try:
|
||||
self.status_update_callback(status)
|
||||
self.status_update_callback(clean_status)
|
||||
except Exception as e:
|
||||
logger.error(f"Fehler beim Senden des Status-Updates: {e}")
|
||||
|
||||
def _send_log_update(self, message: str) -> None:
|
||||
"""
|
||||
Sendet ein Log-Update über den Callback.
|
||||
|
||||
Filtert automatisch Emojis für saubere Anzeige.
|
||||
|
||||
Args:
|
||||
message: Log-Nachricht
|
||||
"""
|
||||
clean_message = _clean_message(message)
|
||||
|
||||
if self.log_update_callback:
|
||||
try:
|
||||
self.log_update_callback(message)
|
||||
self.log_update_callback(clean_message)
|
||||
except Exception as e:
|
||||
logger.error(f"Fehler beim Senden des Log-Updates: {e}")
|
||||
|
||||
# Auch über customer_log_callback senden für Kompatibilität
|
||||
if self.customer_log_callback:
|
||||
elif self.customer_log_callback:
|
||||
# Fallback für Plattformen, die nur customer_log_callback setzen
|
||||
try:
|
||||
self.customer_log_callback(message)
|
||||
self.customer_log_callback(clean_message)
|
||||
except Exception as e:
|
||||
logger.error(f"Fehler beim Senden des Customer-Log-Updates: {e}")
|
||||
|
||||
|
||||
@ -235,31 +235,53 @@ class FacebookAutomation(BaseAutomation):
|
||||
except Exception as e:
|
||||
logger.warning(f"Fehler beim Anwenden Facebook-spezifischer Einstellungen: {e}")
|
||||
|
||||
def register_account(self,
|
||||
first_name: str,
|
||||
last_name: str,
|
||||
birth_date: Dict[str, int],
|
||||
gender: str,
|
||||
def register_account(self,
|
||||
full_name: str = None,
|
||||
age: int = None,
|
||||
first_name: str = None,
|
||||
last_name: str = None,
|
||||
birth_date: Dict[str, int] = None,
|
||||
gender: str = None,
|
||||
registration_method: str = "email",
|
||||
email: str = None,
|
||||
phone_number: str = None,
|
||||
password: str = None,
|
||||
**kwargs) -> Dict[str, Any]:
|
||||
"""
|
||||
Registriert einen neuen Facebook-Account.
|
||||
|
||||
Unterstützt beide Aufrufmuster: Base-Pattern (full_name, age) und Legacy (first_name, last_name, birth_date).
|
||||
|
||||
Args:
|
||||
first_name: Vorname
|
||||
last_name: Nachname
|
||||
birth_date: Geburtsdatum als Dict mit 'day', 'month', 'year'
|
||||
full_name: Vollständiger Name (für Base-Pattern)
|
||||
age: Alter (für Base-Pattern)
|
||||
first_name: Vorname (Legacy, wird aus full_name extrahiert wenn nicht gegeben)
|
||||
last_name: Nachname (Legacy, wird aus full_name extrahiert wenn nicht gegeben)
|
||||
birth_date: Geburtsdatum als Dict (Legacy, wird aus age generiert wenn nicht gegeben)
|
||||
gender: Geschlecht ('male', 'female', 'custom')
|
||||
registration_method: Registrierungsmethode (für Kompatibilität, immer 'email' bei Facebook)
|
||||
email: E-Mail-Adresse (optional, wird generiert wenn nicht angegeben)
|
||||
phone_number: Telefonnummer (optional, alternativ zu E-Mail)
|
||||
password: Passwort (optional, wird generiert wenn nicht angegeben)
|
||||
**kwargs: Weitere optionale Parameter
|
||||
|
||||
|
||||
Returns:
|
||||
Dict[str, Any]: Ergebnis der Registrierung
|
||||
"""
|
||||
# Parameter-Konvertierung: Base-Pattern → Facebook-Format
|
||||
if full_name and not (first_name and last_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"
|
||||
logger.debug(f"Namen aus full_name extrahiert: {first_name} {last_name}")
|
||||
|
||||
if age and not birth_date:
|
||||
birth_date = self.birthday_generator.generate_birthday_components("facebook", age)
|
||||
logger.debug(f"Geburtsdatum aus Alter generiert: {birth_date}")
|
||||
|
||||
if not gender:
|
||||
gender = random.choice(["male", "female"])
|
||||
logger.debug(f"Zufälliges Geschlecht gewählt: {gender}")
|
||||
|
||||
logger.info(f"Starte Facebook-Registrierung für {first_name} {last_name}")
|
||||
|
||||
try:
|
||||
|
||||
In neuem Issue referenzieren
Einen Benutzer sperren