TikTok Bug 1 von 2 gefixt
Dieser Commit ist enthalten in:
@ -82,6 +82,9 @@ class TikTokRegistration:
|
||||
self.automation._emit_customer_log("⚙️ Einstellungen werden vorbereitet...")
|
||||
self._handle_cookie_banner()
|
||||
|
||||
# 2b. Interessen-Dialog behandeln (falls vorhanden)
|
||||
self._handle_interests_dialog()
|
||||
|
||||
# 3. Anmelden-Button klicken
|
||||
self.automation._emit_customer_log("📋 Registrierungsformular wird geöffnet...")
|
||||
if not self._click_login_button():
|
||||
@ -317,6 +320,89 @@ class TikTokRegistration:
|
||||
logger.error(f"Fehler beim Navigieren zur TikTok-Startseite: {e}")
|
||||
return False
|
||||
|
||||
def _handle_interests_dialog(self) -> bool:
|
||||
"""
|
||||
Behandelt den "Wähle deine Interessen aus" Dialog, falls angezeigt.
|
||||
Dieser Dialog erscheint oft beim ersten Besuch der TikTok-Seite.
|
||||
|
||||
Returns:
|
||||
bool: True wenn Dialog behandelt wurde oder nicht existiert, False bei Fehler
|
||||
"""
|
||||
try:
|
||||
# Prüfe ob der Interessen-Dialog vorhanden ist
|
||||
# Suche nach verschiedenen möglichen Selektoren für den Dialog
|
||||
interests_dialog_selectors = [
|
||||
"button:has-text('Überspringen')",
|
||||
"button:has-text('Skip')",
|
||||
"button.TUXButton--secondary:has-text('Überspringen')",
|
||||
"button.TUXButton--secondary:has-text('Skip')",
|
||||
"button[type='button']:has-text('Überspringen')",
|
||||
"button[type='button']:has-text('Skip')"
|
||||
]
|
||||
|
||||
# Warte kurz und prüfe ob der Dialog erscheint
|
||||
dialog_found = False
|
||||
for selector in interests_dialog_selectors:
|
||||
if self.automation.browser.is_element_visible(selector, timeout=2000):
|
||||
dialog_found = True
|
||||
logger.info(f"Interessen-Dialog erkannt mit Selector: {selector}")
|
||||
break
|
||||
|
||||
if dialog_found:
|
||||
self.automation._emit_customer_log("⏭️ Überspringe Interessen-Auswahl...")
|
||||
|
||||
# Versuche verschiedene Methoden den Überspringen-Button zu klicken
|
||||
skip_clicked = False
|
||||
|
||||
# Methode 1: Direkter Click auf Button mit Text
|
||||
for selector in interests_dialog_selectors:
|
||||
try:
|
||||
if self.automation.browser.click_element(selector, timeout=1000):
|
||||
logger.info(f"Interessen-Dialog übersprungen mit: {selector}")
|
||||
skip_clicked = True
|
||||
break
|
||||
except:
|
||||
continue
|
||||
|
||||
# Methode 2: Falls direkter Click nicht funktioniert, versuche mit JavaScript
|
||||
if not skip_clicked:
|
||||
try:
|
||||
# JavaScript-Click auf Button mit "Überspringen" Text
|
||||
js_code = """
|
||||
const buttons = document.querySelectorAll('button');
|
||||
for (let button of buttons) {
|
||||
if (button.textContent.includes('Überspringen') ||
|
||||
button.textContent.includes('Skip')) {
|
||||
button.click();
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
"""
|
||||
result = self.automation.browser.page.evaluate(js_code)
|
||||
if result:
|
||||
logger.info("Interessen-Dialog mit JavaScript übersprungen")
|
||||
skip_clicked = True
|
||||
except Exception as e:
|
||||
logger.warning(f"JavaScript-Click fehlgeschlagen: {e}")
|
||||
|
||||
if skip_clicked:
|
||||
# Warte kurz nach dem Überspringen
|
||||
self.automation.human_behavior.random_delay(1.0, 2.0)
|
||||
logger.info("Interessen-Dialog erfolgreich übersprungen")
|
||||
return True
|
||||
else:
|
||||
logger.warning("Konnte Interessen-Dialog nicht überspringen - versuche trotzdem fortzufahren")
|
||||
return True # Trotzdem fortfahren
|
||||
|
||||
logger.debug("Kein Interessen-Dialog gefunden - fahre normal fort")
|
||||
return True
|
||||
|
||||
except Exception as e:
|
||||
logger.error(f"Fehler beim Behandeln des Interessen-Dialogs: {e}")
|
||||
# Nicht als kritischer Fehler behandeln - versuche fortzufahren
|
||||
return True
|
||||
|
||||
def _handle_cookie_banner(self) -> bool:
|
||||
"""
|
||||
Behandelt den Cookie-Banner, falls angezeigt.
|
||||
|
||||
In neuem Issue referenzieren
Einen Benutzer sperren