TikTok - PW Problem zur Haelfte gefixt
Dieser Commit ist enthalten in:
@ -1042,14 +1042,23 @@ class TikTokRegistration:
|
||||
# Nach Code-Eingabe erscheint ein neues Passwort-Feld
|
||||
# Verschiedene Selektoren für das Passwort-Feld nach Code-Eingabe
|
||||
password_selectors = [
|
||||
# Aktueller Selektor basierend auf Console-Output
|
||||
"input[type='password'][placeholder='Passwort']",
|
||||
"input.css-wv3bkt-InputContainer.etcs7ny1",
|
||||
"input.css-wv3bkt-InputContainer",
|
||||
"input.etcs7ny1[type='password']",
|
||||
# Original Selektor
|
||||
# Neue TikTok CSS-Klassen (2025)
|
||||
"input.css-15uxi3b-5e6d46e3--InputContainer", # Neue spezifische Klasse
|
||||
"input.epfb2861[type='password']", # Neue zusätzliche Klasse
|
||||
"input[class*='InputContainer'][type='password']", # Partial class match
|
||||
|
||||
# Generische Selektoren (stabiler)
|
||||
"input[type='password'][placeholder='Passwort']", # Type + Placeholder
|
||||
"input[type='password'][autocomplete='new-password']", # Type + Autocomplete
|
||||
"input[placeholder='Passwort']", # Nur Placeholder
|
||||
|
||||
# Alte Selektoren (Fallback)
|
||||
"input.css-wv3bkt-InputContainer.etcs7ny1", # Alt TikTok-Klasse
|
||||
"input.css-wv3bkt-InputContainer", # Alt TikTok-Klasse
|
||||
"input.etcs7ny1[type='password']", # Alt TikTok-Klasse
|
||||
|
||||
# Original und weitere Fallbacks
|
||||
self.selectors.PASSWORD_FIELD,
|
||||
# Fallback-Selektoren
|
||||
"input[type='password']",
|
||||
"input[placeholder*='Passwort']",
|
||||
"input[placeholder*='Password']",
|
||||
@ -1057,23 +1066,26 @@ class TikTokRegistration:
|
||||
]
|
||||
|
||||
password_success = False
|
||||
for selector in password_selectors:
|
||||
if self.automation.browser.is_element_visible(selector, timeout=2000):
|
||||
logger.info(f"Passwort-Feld gefunden: {selector}")
|
||||
# Verwende Character-by-Character Eingabe für Passwort-Feld
|
||||
password_success = self._fill_password_field_character_by_character(selector, account_data["password"])
|
||||
if password_success:
|
||||
# VALIDATION: Prüfe ob Passwort tatsächlich im Feld steht
|
||||
self.automation.human_behavior.random_delay(0.5, 1.0)
|
||||
actual_value = self._get_input_field_value(selector)
|
||||
if actual_value == account_data["password"]:
|
||||
logger.info("Passwort erfolgreich eingegeben und validiert")
|
||||
break
|
||||
else:
|
||||
logger.warning(f"Passwort-Validierung fehlgeschlagen: erwartet='{account_data['password']}', erhalten='{actual_value}'")
|
||||
password_success = False
|
||||
else:
|
||||
logger.debug(f"Passwort-Eingabe mit Selektor {selector} fehlgeschlagen")
|
||||
for i, selector in enumerate(password_selectors):
|
||||
logger.debug(f"Versuche Passwort-Selektor {i+1}/{len(password_selectors)}: {selector}")
|
||||
try:
|
||||
if self.automation.browser.is_element_visible(selector, timeout=1000):
|
||||
logger.info(f"✓ Passwort-Feld gefunden mit Selektor {i+1}: {selector}")
|
||||
# Verwende Character-by-Character Eingabe für Passwort-Feld
|
||||
password_success = self._fill_password_field_character_by_character(selector, account_data["password"])
|
||||
if password_success:
|
||||
# VALIDATION: Prüfe ob Passwort tatsächlich im Feld steht
|
||||
self.automation.human_behavior.random_delay(0.5, 1.0)
|
||||
actual_value = self._get_input_field_value(selector)
|
||||
if actual_value == account_data["password"]:
|
||||
logger.info("Passwort erfolgreich eingegeben und validiert")
|
||||
break
|
||||
else:
|
||||
logger.warning(f"Passwort-Validierung fehlgeschlagen: erwartet='{account_data['password']}', erhalten='{actual_value}'")
|
||||
password_success = False
|
||||
except Exception as e:
|
||||
logger.debug(f"Passwort-Selektor {i+1} fehlgeschlagen: {e}")
|
||||
continue
|
||||
|
||||
if not password_success:
|
||||
logger.warning("Fallback 1: Versuche UI Helper für Passwort-Eingabe")
|
||||
|
||||
In neuem Issue referenzieren
Einen Benutzer sperren