From 28d2bfe7d1b09b649652ef77c04cccacde5bc13d Mon Sep 17 00:00:00 2001 From: duffyduck Date: Sat, 27 Dec 2025 02:03:00 +0100 Subject: [PATCH] send button with delay --- python_bridge/chat_audio_bridge.py | 12 +++++ python_bridge/chat_web_interface.py | 84 +++++++++++------------------ 2 files changed, 42 insertions(+), 54 deletions(-) diff --git a/python_bridge/chat_audio_bridge.py b/python_bridge/chat_audio_bridge.py index 3ab5110..4d25f97 100755 --- a/python_bridge/chat_audio_bridge.py +++ b/python_bridge/chat_audio_bridge.py @@ -31,6 +31,15 @@ from pathlib import Path from typing import Optional from dataclasses import dataclass +# ALSA/JACK Fehlermeldungen unterdrücken (harmlose Audio-Backend Warnungen) +# Muss VOR dem Import von Audio-Modulen passieren +from ctypes import CDLL, c_char_p, c_int +try: + asound = CDLL("libasound.so.2") + asound.snd_lib_error_set_handler(lambda *args: None) +except: + pass # Kein ALSA - kein Problem + import yaml import click from rich.console import Console @@ -54,6 +63,9 @@ logging.basicConfig( ) logger = logging.getLogger(__name__) +# urllib3 Connection Pool Warnungen unterdrücken (Selenium-intern, harmlos) +logging.getLogger("urllib3.connectionpool").setLevel(logging.ERROR) + # Rich Console für schöne Ausgabe console = Console() diff --git a/python_bridge/chat_web_interface.py b/python_bridge/chat_web_interface.py index 107487c..70ffe97 100644 --- a/python_bridge/chat_web_interface.py +++ b/python_bridge/chat_web_interface.py @@ -191,47 +191,13 @@ class ClaudeChatInterface: Returns: True wenn erfolgreich gesendet """ - try: - # Finde Eingabefeld - input_field = self._find_input_field() + # Nutze send_message_with_delay mit delay=0 (hat Retry-Logik eingebaut) + result = self.send_message_with_delay(text, delay_before_send=0) - if not input_field: - logger.error("Eingabefeld nicht gefunden!") - return False + if result and wait_for_response: + self._wait_for_response() - # Feld fokussieren und leeren - input_field.click() - time.sleep(0.2) - - # Text eingeben - input_field.send_keys(text) - time.sleep(0.5) # Warte bis Text vollständig eingegeben - - # Versuche Send-Button zu klicken (zuverlässiger als Enter) - send_button = self._find_send_button() - if send_button: - try: - send_button.click() - logger.debug("Nachricht via Send-Button gesendet") - except Exception as e: - logger.debug(f"Send-Button Klick fehlgeschlagen: {e}, versuche Enter") - input_field.send_keys(Keys.RETURN) - else: - # Fallback: Enter-Taste - logger.debug("Kein Send-Button gefunden, nutze Enter") - input_field.send_keys(Keys.RETURN) - - time.sleep(0.3) - logger.debug(f"Nachricht gesendet: {text[:50]}...") - - if wait_for_response: - self._wait_for_response() - - return True - - except Exception as e: - logger.error(f"Fehler beim Senden: {e}") - return False + return result def send_message_with_delay(self, text: str, delay_before_send: int = 15) -> bool: """ @@ -243,7 +209,7 @@ class ClaudeChatInterface: Ablauf: 1. Text ins Eingabefeld einfügen 2. Warte delay_before_send Sekunden - 3. Send-Button klicken + 3. Send-Button klicken (mit Retry) Args: text: Die zu sendende Nachricht @@ -269,21 +235,31 @@ class ClaudeChatInterface: input_field.send_keys(text) # WARTEN - große Texte brauchen Zeit! - logger.info(f"Warte {delay_before_send}s vor dem Absenden (große Texte brauchen Zeit)...") - time.sleep(delay_before_send) - - # Jetzt absenden - send_button = self._find_send_button() - if send_button: - try: - send_button.click() - logger.info("Nachricht via Send-Button gesendet") - except Exception as e: - logger.debug(f"Send-Button Klick fehlgeschlagen: {e}, versuche Enter") - input_field.send_keys(Keys.RETURN) + if delay_before_send > 0: + logger.info(f"Warte {delay_before_send}s vor dem Absenden (große Texte brauchen Zeit)...") + time.sleep(delay_before_send) else: - # Fallback: Enter-Taste - logger.debug("Kein Send-Button gefunden, nutze Enter") + time.sleep(1.0) # Mindestens 1s warten + + # Jetzt absenden (mit Retry-Logik) + send_success = False + for attempt in range(3): + send_button = self._find_send_button() + if send_button: + try: + if send_button.is_enabled() and send_button.is_displayed(): + send_button.click() + logger.info(f"Nachricht via Send-Button gesendet (Versuch {attempt + 1})") + send_success = True + break + except Exception as e: + logger.debug(f"Send-Button Klick Versuch {attempt + 1} fehlgeschlagen: {e}") + + time.sleep(0.5) + + # Fallback: Enter-Taste + if not send_success: + logger.debug("Send-Button nicht gefunden/klickbar, nutze Enter") input_field.send_keys(Keys.RETURN) time.sleep(0.3)