send button with delay
This commit is contained in:
parent
90707055ce
commit
28d2bfe7d1
|
|
@ -31,6 +31,15 @@ from pathlib import Path
|
||||||
from typing import Optional
|
from typing import Optional
|
||||||
from dataclasses import dataclass
|
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 yaml
|
||||||
import click
|
import click
|
||||||
from rich.console import Console
|
from rich.console import Console
|
||||||
|
|
@ -54,6 +63,9 @@ logging.basicConfig(
|
||||||
)
|
)
|
||||||
logger = logging.getLogger(__name__)
|
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
|
# Rich Console für schöne Ausgabe
|
||||||
console = Console()
|
console = Console()
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -191,47 +191,13 @@ class ClaudeChatInterface:
|
||||||
Returns:
|
Returns:
|
||||||
True wenn erfolgreich gesendet
|
True wenn erfolgreich gesendet
|
||||||
"""
|
"""
|
||||||
try:
|
# Nutze send_message_with_delay mit delay=0 (hat Retry-Logik eingebaut)
|
||||||
# Finde Eingabefeld
|
result = self.send_message_with_delay(text, delay_before_send=0)
|
||||||
input_field = self._find_input_field()
|
|
||||||
|
|
||||||
if not input_field:
|
if result and wait_for_response:
|
||||||
logger.error("Eingabefeld nicht gefunden!")
|
|
||||||
return False
|
|
||||||
|
|
||||||
# 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()
|
self._wait_for_response()
|
||||||
|
|
||||||
return True
|
return result
|
||||||
|
|
||||||
except Exception as e:
|
|
||||||
logger.error(f"Fehler beim Senden: {e}")
|
|
||||||
return False
|
|
||||||
|
|
||||||
def send_message_with_delay(self, text: str, delay_before_send: int = 15) -> bool:
|
def send_message_with_delay(self, text: str, delay_before_send: int = 15) -> bool:
|
||||||
"""
|
"""
|
||||||
|
|
@ -243,7 +209,7 @@ class ClaudeChatInterface:
|
||||||
Ablauf:
|
Ablauf:
|
||||||
1. Text ins Eingabefeld einfügen
|
1. Text ins Eingabefeld einfügen
|
||||||
2. Warte delay_before_send Sekunden
|
2. Warte delay_before_send Sekunden
|
||||||
3. Send-Button klicken
|
3. Send-Button klicken (mit Retry)
|
||||||
|
|
||||||
Args:
|
Args:
|
||||||
text: Die zu sendende Nachricht
|
text: Die zu sendende Nachricht
|
||||||
|
|
@ -269,21 +235,31 @@ class ClaudeChatInterface:
|
||||||
input_field.send_keys(text)
|
input_field.send_keys(text)
|
||||||
|
|
||||||
# WARTEN - große Texte brauchen Zeit!
|
# WARTEN - große Texte brauchen Zeit!
|
||||||
|
if delay_before_send > 0:
|
||||||
logger.info(f"Warte {delay_before_send}s vor dem Absenden (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)
|
time.sleep(delay_before_send)
|
||||||
|
else:
|
||||||
|
time.sleep(1.0) # Mindestens 1s warten
|
||||||
|
|
||||||
# Jetzt absenden
|
# Jetzt absenden (mit Retry-Logik)
|
||||||
|
send_success = False
|
||||||
|
for attempt in range(3):
|
||||||
send_button = self._find_send_button()
|
send_button = self._find_send_button()
|
||||||
if send_button:
|
if send_button:
|
||||||
try:
|
try:
|
||||||
|
if send_button.is_enabled() and send_button.is_displayed():
|
||||||
send_button.click()
|
send_button.click()
|
||||||
logger.info("Nachricht via Send-Button gesendet")
|
logger.info(f"Nachricht via Send-Button gesendet (Versuch {attempt + 1})")
|
||||||
|
send_success = True
|
||||||
|
break
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
logger.debug(f"Send-Button Klick fehlgeschlagen: {e}, versuche Enter")
|
logger.debug(f"Send-Button Klick Versuch {attempt + 1} fehlgeschlagen: {e}")
|
||||||
input_field.send_keys(Keys.RETURN)
|
|
||||||
else:
|
time.sleep(0.5)
|
||||||
|
|
||||||
# Fallback: Enter-Taste
|
# Fallback: Enter-Taste
|
||||||
logger.debug("Kein Send-Button gefunden, nutze Enter")
|
if not send_success:
|
||||||
|
logger.debug("Send-Button nicht gefunden/klickbar, nutze Enter")
|
||||||
input_field.send_keys(Keys.RETURN)
|
input_field.send_keys(Keys.RETURN)
|
||||||
|
|
||||||
time.sleep(0.3)
|
time.sleep(0.3)
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue