text einfügen mittels javascript funktion
This commit is contained in:
parent
38e653361e
commit
37f89ca76f
|
|
@ -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. y↔z 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...")
|
||||
|
|
|
|||
Loading…
Reference in New Issue