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.automation._emit_customer_log("⚙️ Einstellungen werden vorbereitet...")
|
||||||
self._handle_cookie_banner()
|
self._handle_cookie_banner()
|
||||||
|
|
||||||
|
# 2b. Interessen-Dialog behandeln (falls vorhanden)
|
||||||
|
self._handle_interests_dialog()
|
||||||
|
|
||||||
# 3. Anmelden-Button klicken
|
# 3. Anmelden-Button klicken
|
||||||
self.automation._emit_customer_log("📋 Registrierungsformular wird geöffnet...")
|
self.automation._emit_customer_log("📋 Registrierungsformular wird geöffnet...")
|
||||||
if not self._click_login_button():
|
if not self._click_login_button():
|
||||||
@ -317,6 +320,89 @@ class TikTokRegistration:
|
|||||||
logger.error(f"Fehler beim Navigieren zur TikTok-Startseite: {e}")
|
logger.error(f"Fehler beim Navigieren zur TikTok-Startseite: {e}")
|
||||||
return False
|
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:
|
def _handle_cookie_banner(self) -> bool:
|
||||||
"""
|
"""
|
||||||
Behandelt den Cookie-Banner, falls angezeigt.
|
Behandelt den Cookie-Banner, falls angezeigt.
|
||||||
|
|||||||
In neuem Issue referenzieren
Einen Benutzer sperren