text einfügen mittels javascript funktion

This commit is contained in:
duffyduck 2025-12-27 03:08:24 +01:00
parent 38e653361e
commit 37f89ca76f
1 changed files with 51 additions and 3 deletions

View File

@ -306,7 +306,7 @@ class ClaudeChatInterface:
Zwischenablage/das Eingabefeld Zeit braucht um den Text zu verarbeiten.
Ablauf:
1. Text ins Eingabefeld einfügen
1. Text via JavaScript ins Eingabefeld einfügen (vermeidet Tastaturlayout-Probleme!)
2. Warte delay_before_send Sekunden
3. Send-Button klicken (mit Retry)
@ -329,9 +329,9 @@ class ClaudeChatInterface:
input_field.click()
time.sleep(0.2)
# Text eingeben
# Text via JavaScript einfügen (vermeidet QWERTY/QWERTZ Probleme!)
logger.info(f"Füge Text ein ({len(text)} Zeichen)...")
input_field.send_keys(text)
self._insert_text_via_js(input_field, text)
# WARTEN - große Texte brauchen Zeit!
if delay_before_send > 0:
@ -431,6 +431,54 @@ class ClaudeChatInterface:
return None
def _insert_text_via_js(self, element, text: str):
"""
Fügt Text via JavaScript ein (vermeidet Tastaturlayout-Probleme).
Bei send_keys() werden physische Tasten gedrückt, was bei
unterschiedlichen Tastaturlayouts (QWERTY vs QWERTZ) zu
falschen Zeichen führt (z.B. yz vertauscht).
Diese Methode fügt den Text direkt als String ein.
"""
# Escape für JavaScript
escaped_text = text.replace('\\', '\\\\').replace('`', '\\`').replace('${', '\\${')
# Für contenteditable divs (ProseMirror)
self.driver.execute_script("""
const element = arguments[0];
const text = arguments[1];
// Fokussieren
element.focus();
// Methode 1: Für contenteditable (ProseMirror)
if (element.contentEditable === 'true') {
// Text als HTML einfügen (respektiert Zeilenumbrüche)
const htmlText = text.replace(/\\n/g, '<br>');
element.innerHTML = htmlText;
// Input-Event triggern damit React/Vue es mitbekommt
element.dispatchEvent(new Event('input', { bubbles: true }));
// Cursor ans Ende setzen
const range = document.createRange();
range.selectNodeContents(element);
range.collapse(false);
const sel = window.getSelection();
sel.removeAllRanges();
sel.addRange(range);
}
// Methode 2: Für textarea/input
else {
element.value = text;
element.dispatchEvent(new Event('input', { bubbles: true }));
element.dispatchEvent(new Event('change', { bubbles: true }));
}
""", element, text)
logger.debug(f"Text via JavaScript eingefügt ({len(text)} Zeichen)")
def _wait_for_response(self, timeout: int = 60):
"""Wartet bis Claude fertig getippt hat"""
logger.debug("Warte auf Claudes Antwort...")