fix extractrating claude sagt:
This commit is contained in:
parent
992f6f9d05
commit
9145ac2cc0
|
|
@ -613,6 +613,7 @@ 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
|
||||||
found = self.driver.execute_script("""
|
found = self.driver.execute_script("""
|
||||||
const msgs = [];
|
const msgs = [];
|
||||||
|
|
||||||
|
|
@ -627,29 +628,20 @@ class ClaudeChatInterface:
|
||||||
// Suche nach Elementen die typische Claude-Antwort-Merkmale haben
|
// Suche nach Elementen die typische Claude-Antwort-Merkmale haben
|
||||||
const text = div.innerText || '';
|
const text = div.innerText || '';
|
||||||
|
|
||||||
// Claude-Antworten haben oft "Claude sagt:" oder sind länger als TICKs
|
// Claude-Antworten müssen "Claude sagt:" enthalten
|
||||||
if (text.includes('Claude sagt:') ||
|
// UND der Text muss lang genug sein (mindestens 20 Zeichen)
|
||||||
(text.length > 50 && !text.startsWith('[TICK]') && !text.startsWith('[START]'))) {
|
if (text.includes('Claude sagt:') && text.length > 20) {
|
||||||
|
|
||||||
// Prüfe ob dieses Element nicht schon ein Elternteil eines gefundenen ist
|
|
||||||
let dominated = false;
|
|
||||||
for (const existing of msgs) {
|
|
||||||
if (existing.contains(div) || div.contains(existing)) {
|
|
||||||
dominated = true;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (!dominated && !msgs.includes(div)) {
|
|
||||||
// Nimm das kleinste Element das den Text enthält
|
|
||||||
msgs.push(div);
|
msgs.push(div);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
// Dedupliziere: Behalte nur die innersten Elemente
|
// Dedupliziere: Behalte nur die ÄUSSERSTEN Elemente (Container)
|
||||||
|
// Nicht die innersten - wir wollen den vollständigen Text!
|
||||||
const filtered = msgs.filter(div => {
|
const filtered = msgs.filter(div => {
|
||||||
|
// Behalte dieses Element nur wenn kein anderes Element es enthält
|
||||||
for (const other of msgs) {
|
for (const other of msgs) {
|
||||||
if (other !== div && div.contains(other)) {
|
if (other !== div && other.contains(div)) {
|
||||||
|
// Ein anderes Element enthält dieses -> verwerfen
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -766,8 +758,14 @@ class ClaudeChatInterface:
|
||||||
|
|
||||||
for i, elem in enumerate(claude_elements):
|
for i, elem in enumerate(claude_elements):
|
||||||
try:
|
try:
|
||||||
|
# Versuche zuerst innerText via JavaScript zu bekommen (zuverlässiger)
|
||||||
|
try:
|
||||||
|
text = self.driver.execute_script("return arguments[0].innerText || '';", elem).strip()
|
||||||
|
except:
|
||||||
text = elem.text.strip()
|
text = elem.text.strip()
|
||||||
|
|
||||||
if not text or len(text) < 5:
|
if not text or len(text) < 5:
|
||||||
|
logger.debug(f"Claude-Element {i} übersprungen: Text zu kurz ({len(text) if text else 0} Zeichen)")
|
||||||
continue
|
continue
|
||||||
|
|
||||||
# Filtere User-Befehle (diese sind KEINE Claude-Nachrichten)
|
# Filtere User-Befehle (diese sind KEINE Claude-Nachrichten)
|
||||||
|
|
@ -781,6 +779,11 @@ 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)
|
||||||
|
if "Claude sagt:" not in text:
|
||||||
|
logger.debug(f"Claude-Element {i} übersprungen: Kein 'Claude sagt:' gefunden")
|
||||||
|
continue
|
||||||
|
|
||||||
msg_id = elem.get_attribute("data-message-id")
|
msg_id = elem.get_attribute("data-message-id")
|
||||||
if not msg_id:
|
if not msg_id:
|
||||||
msg_id = f"claude_{i}_{hash(text[:100])}"
|
msg_id = f"claude_{i}_{hash(text[:100])}"
|
||||||
|
|
@ -791,7 +794,7 @@ class ClaudeChatInterface:
|
||||||
is_from_assistant=True,
|
is_from_assistant=True,
|
||||||
timestamp=time.time()
|
timestamp=time.time()
|
||||||
))
|
))
|
||||||
logger.debug(f"Claude-Nachricht {i}: '{text[:50]}...'")
|
logger.debug(f"Claude-Nachricht {i}: '{text[:80]}...' ({len(text)} Zeichen)")
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
logger.debug(f"Fehler bei Claude-Nachricht {i}: {e}")
|
logger.debug(f"Fehler bei Claude-Nachricht {i}: {e}")
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue