sidebar found in claude sagt: fix
This commit is contained in:
parent
9145ac2cc0
commit
3984db1e49
|
|
@ -613,35 +613,41 @@ class ClaudeChatInterface:
|
||||||
if not claude_elements:
|
if not claude_elements:
|
||||||
try:
|
try:
|
||||||
# Claude.ai 2024/2025 nutzt oft conversation-turn Divs
|
# Claude.ai 2024/2025 nutzt oft conversation-turn Divs
|
||||||
# WICHTIG: Wir suchen die ÄUSSERSTEN Elemente die "Claude sagt:" enthalten
|
# WICHTIG: Wir suchen die INNERSTEN Elemente die mit "Claude sagt:" BEGINNEN
|
||||||
|
# und NICHT in der Sidebar/Navigation sind
|
||||||
found = self.driver.execute_script("""
|
found = self.driver.execute_script("""
|
||||||
const msgs = [];
|
const msgs = [];
|
||||||
|
|
||||||
// Suche nach Nachrichten die KEINE user-message sind
|
// Suche nach Elementen die mit "Claude sagt:" BEGINNEN
|
||||||
// und einen substantiellen Text-Inhalt haben
|
const allDivs = document.querySelectorAll('div, p, span');
|
||||||
const allDivs = document.querySelectorAll('div');
|
for (const elem of allDivs) {
|
||||||
for (const div of allDivs) {
|
|
||||||
// Überspringe wenn es ein user-message ist
|
// Überspringe wenn es ein user-message ist
|
||||||
if (div.getAttribute('data-testid') === 'user-message') continue;
|
if (elem.getAttribute('data-testid') === 'user-message') continue;
|
||||||
if (div.closest('[data-testid="user-message"]')) continue;
|
if (elem.closest('[data-testid="user-message"]')) continue;
|
||||||
|
|
||||||
// Suche nach Elementen die typische Claude-Antwort-Merkmale haben
|
// Überspringe Sidebar/Navigation Elemente
|
||||||
const text = div.innerText || '';
|
if (elem.closest('nav')) continue;
|
||||||
|
if (elem.closest('[role="navigation"]')) continue;
|
||||||
|
if (elem.closest('[class*="sidebar"]')) continue;
|
||||||
|
if (elem.closest('[class*="Sidebar"]')) continue;
|
||||||
|
|
||||||
// Claude-Antworten müssen "Claude sagt:" enthalten
|
// Hole den direkten Text-Inhalt (nicht von Kindern)
|
||||||
// UND der Text muss lang genug sein (mindestens 20 Zeichen)
|
const text = (elem.innerText || '').trim();
|
||||||
if (text.includes('Claude sagt:') && text.length > 20) {
|
|
||||||
msgs.push(div);
|
// Text muss mit "Claude sagt:" BEGINNEN (nicht irgendwo enthalten)
|
||||||
|
// Das filtert Container-Elemente raus die die ganze Seite enthalten
|
||||||
|
if (text.startsWith('Claude sagt:') && text.length > 20 && text.length < 10000) {
|
||||||
|
msgs.push(elem);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Dedupliziere: Behalte nur die ÄUSSERSTEN Elemente (Container)
|
// Dedupliziere: Behalte nur die INNERSTEN Elemente
|
||||||
// Nicht die innersten - wir wollen den vollständigen Text!
|
// (die den Text direkt enthalten, nicht Container)
|
||||||
const filtered = msgs.filter(div => {
|
const filtered = msgs.filter(div => {
|
||||||
// Behalte dieses Element nur wenn kein anderes Element es enthält
|
// Behalte dieses Element nur wenn es KEIN anderes Element enthält
|
||||||
for (const other of msgs) {
|
for (const other of msgs) {
|
||||||
if (other !== div && other.contains(div)) {
|
if (other !== div && div.contains(other)) {
|
||||||
// Ein anderes Element enthält dieses -> verwerfen
|
// Dieses Element enthält ein anderes -> verwerfen (zu groß)
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -779,9 +785,22 @@ class ClaudeChatInterface:
|
||||||
logger.debug(f"Überspringe User-Befehl (normalized): {text}")
|
logger.debug(f"Überspringe User-Befehl (normalized): {text}")
|
||||||
continue
|
continue
|
||||||
|
|
||||||
# Prüfe ob es wirklich eine Claude-Nachricht ist (muss "Claude sagt:" enthalten)
|
# Prüfe ob es wirklich eine Claude-Nachricht ist (muss mit "Claude sagt:" BEGINNEN)
|
||||||
if "Claude sagt:" not in text:
|
if not text.startswith("Claude sagt:"):
|
||||||
logger.debug(f"Claude-Element {i} übersprungen: Kein 'Claude sagt:' gefunden")
|
# Fallback: Prüfe ob "Claude sagt:" irgendwo am Anfang einer Zeile steht
|
||||||
|
lines = text.split('\n')
|
||||||
|
found_claude_line = False
|
||||||
|
for line in lines[:5]: # Nur erste 5 Zeilen prüfen
|
||||||
|
if line.strip().startswith("Claude sagt:"):
|
||||||
|
found_claude_line = True
|
||||||
|
break
|
||||||
|
if not found_claude_line:
|
||||||
|
logger.debug(f"Claude-Element {i} übersprungen: Beginnt nicht mit 'Claude sagt:'")
|
||||||
|
continue
|
||||||
|
|
||||||
|
# Filtere Sidebar/Navigation Elemente (beginnen oft mit "Neuer Chat")
|
||||||
|
if text.startswith("Neuer Chat") or text.startswith("Chats") or text.startswith("Projekte"):
|
||||||
|
logger.debug(f"Claude-Element {i} übersprungen: Ist Sidebar/Navigation")
|
||||||
continue
|
continue
|
||||||
|
|
||||||
msg_id = elem.get_attribute("data-message-id")
|
msg_id = elem.get_attribute("data-message-id")
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue