Files

86 lines
3.5 KiB
Python
Raw Permalink Normal View History

2026-04-17 09:12:38 +08:00
"""
探测元宝页面的生成状态特征
运行后,请在元宝页面发送一条消息,观察输出
"""
import asyncio
from playwright.async_api import async_playwright
from pathlib import Path
YUANBAO_URL = "https://yuanbao.tencent.com/chat"
async def detect():
async with async_playwright() as p:
user_data = str(Path.home() / ".yuanbao_chat_profile")
context = await p.chromium.launch_persistent_context(
user_data, channel="chrome", headless=False,
args=["--start-maximized"], no_viewport=True
)
page = context.pages[0] if context.pages else await context.new_page()
await page.goto(YUANBAO_URL)
print("=" * 60)
print("元宝生成状态探测器")
print("=" * 60)
print("\n1. 请在元宝页面登录并创建新对话")
print("2. 在元宝页面发送一条消息(比如'你好')")
print("3. 观察生成过程中和生成完成后的输出差异")
print("4. 按 Ctrl+C 退出")
print("=" * 60)
input("\n准备好后按回车开始探测...")
# 持续探测
prev_state = None
counter = 0
while True:
try:
# 获取最后一条AI消息的完整信息
result = await page.evaluate("""
() => {
const aiMessages = document.querySelectorAll(
'.agent-chat__list__item--ai, [class*="agent-chat"][class*="ai"], [class*="message"][class*="ai"]'
);
if (aiMessages.length === 0) return null;
const lastMsg = aiMessages[aiMessages.length - 1];
const textEl = lastMsg.querySelector('.agent-chat__speech-text, [class*="text"], [class*="content"]');
return {
className: lastMsg.className,
innerHTML: lastMsg.innerHTML.substring(0, 500),
textContent: textEl ? textEl.innerText.substring(0, 200) : '',
hasCursor: lastMsg.innerHTML.includes('cursor') || lastMsg.innerHTML.includes('blink'),
childElements: Array.from(lastMsg.children).map(c => c.tagName + '.' + c.className).slice(0, 5)
};
}
""")
if result:
state_hash = f"{result['className']}_{result['hasCursor']}"
if state_hash != prev_state:
prev_state = state_hash
counter += 1
print(f"\n--- 探测 #{counter} ---")
print(f"Class: {result['className']}")
print(f"Has Cursor: {result['hasCursor']}")
print(f"Child Elements: {result['childElements']}")
print(f"Text Preview: {result['textContent'][:100]}...")
print(f"HTML Snippet: {result['innerHTML'][:200]}...")
await asyncio.sleep(0.5)
except KeyboardInterrupt:
break
except Exception as e:
print(f"Error: {e}")
await asyncio.sleep(1)
await context.close()
print("\n探测结束")
if __name__ == "__main__":
asyncio.run(detect())