diff --git a/clis/doubao/utils.js b/clis/doubao/utils.js index 344cbb154..98bf7450d 100644 --- a/clis/doubao/utils.js +++ b/clis/doubao/utils.js @@ -166,11 +166,13 @@ function getTurnsScript() { // 2026-05 Doubao DOM refactor: no more receive-message / bg-g-receive-msg-bubble // markers on assistant turns. Wrappers are now [class*="inner-item-"] / // [class*="top-item-"] and the only reliable assistant signal is the - // .flow-markdown-body content container WITHOUT any send-bubble marker. + // .flow-markdown-body / .md-box-root content container WITHOUT any + // send-bubble marker. if ( (root.matches('[class*="inner-item-"], [class*="top-item-"]') || root.closest('[class*="inner-item-"], [class*="top-item-"]')) - && (root.matches('.flow-markdown-body') || root.querySelector('.flow-markdown-body')) + && (root.matches('.flow-markdown-body, .md-box-root, [class*="md-box-root"]') + || root.querySelector('.flow-markdown-body, .md-box-root, [class*="md-box-root"]')) && !root.matches('[class*="bg-g-send-msg-bubble"]') && !root.querySelector('[class*="bg-g-send-msg-bubble"]') ) { @@ -189,6 +191,8 @@ function getTurnsScript() { '[class*="bg-g-send-msg-bubble"]', '[class*="bg-g-receive-msg-bubble"]', '.flow-markdown-body', + '.md-box-root', + '[class*="md-box-root"]', '[class*="bubble"]', ]; const messageImageSelector = messageTextSelectors.map((s) => s + ' img').join(', '); @@ -232,7 +236,7 @@ function getTurnsScript() { return text ? text + '\\n' + imageLines.join('\\n') : imageLines.join('\\n'); }; - const messageList = document.querySelector('[class*="message-list-S2Fv2S"], .container-PvPoAn, .scroll-view-OEiNXD, [data-testid="message-list"]'); + const messageList = document.querySelector('[class*="message-list-"], .container-PvPoAn, .scroll-view-OEiNXD, [data-testid="message-list"]'); if (!messageList) return []; const itemSelectors = [ diff --git a/clis/doubao/utils.test.js b/clis/doubao/utils.test.js index b66ebc484..b18f09edc 100644 --- a/clis/doubao/utils.test.js +++ b/clis/doubao/utils.test.js @@ -170,7 +170,7 @@ describe('doubao receive strategy', () => { it('keeps both the new skin selectors and the older structural fallbacks in the turns script', () => { const turnsScript = __test__.getTurnsScript(); - expect(turnsScript).toContain('[class*="message-list-S2Fv2S"]'); + expect(turnsScript).toContain('[class*="message-list-"]'); expect(turnsScript).toContain('.container-PvPoAn'); expect(turnsScript).toContain('[data-testid="message-list"]'); expect(turnsScript).toContain('[class*="bg-g-receive-msg-bubble"]'); @@ -191,6 +191,7 @@ describe('doubao receive strategy', () => { // bg-g-receive-msg-bubble markup. Only signal is .flow-markdown-body content // container without send-bubble. expect(turnsScript).toContain('.flow-markdown-body'); + expect(turnsScript).toContain('.md-box-root'); }); it('extracts clean assistant turns from the 2026-05 wrapper DOM without using whole-page chrome', () => { @@ -218,6 +219,32 @@ describe('doubao receive strategy', () => { ]); }); + it('extracts turns from the current hashed message list and markdown box DOM', () => { + const turns = runTurnsScript(` +
+ +
+
+
+
+
请联网查找太原红星天铂
+
+
+
+
+

太原红星天铂公开信息整理

项目位于南内环东街与东中环交汇处东北角。

+
+
+
+
+ `); + + expect(turns).toEqual([ + { Role: 'User', Text: '请联网查找太原红星天铂' }, + { Role: 'Assistant', Text: '太原红星天铂公开信息整理项目位于南内环东街与东中环交汇处东北角。' }, + ]); + }); + it('extends transcript-noise cleanup for the current zh-CN chrome copy', () => { const transcriptScript = __test__.getTranscriptLinesScript(); expect(transcriptScript).toContain('请仔细甄别');