| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788 |
- #!/usr/bin/env python3
- """
- CDP连接诊断脚本
- """
- import asyncio
- import sys
- from pathlib import Path
- # 添加项目根目录到路径
- sys.path.insert(0, str(Path(__file__).parent.parent.parent))
- from agent.tools.builtin.browser.baseClass import init_browser_session, cleanup_browser_session
- async def diagnose():
- """诊断browser-use的CDP连接问题"""
- print("=" * 60)
- print("Browser-Use CDP 连接诊断")
- print("=" * 60)
- try:
- print("\n步骤1: 初始化浏览器会话...")
- print(" - 浏览器类型: local")
- print(" - Headless: False")
- session, tools = await init_browser_session(
- browser_type="local",
- headless=False
- )
- print("✅ 浏览器会话初始化成功")
- print("\n步骤2: 测试基本导航...")
- result = await tools.navigate(
- url="https://www.baidu.com",
- browser_session=session
- )
- print(f"✅ 导航成功")
- print(f" - 结果: {result.extracted_content[:100] if result.extracted_content else 'N/A'}")
- print("\n步骤3: 获取页面URL...")
- current_url = await session.get_current_page_url()
- print(f"✅ 当前URL: {current_url}")
- print("\n步骤4: 清理浏览器会话...")
- await cleanup_browser_session()
- print("✅ 清理完成")
- print("\n" + "=" * 60)
- print("✅ 所有测试通过!browser-use工作正常")
- print("=" * 60)
- return True
- except Exception as e:
- print(f"\n❌ 错误: {type(e).__name__}")
- print(f" 消息: {str(e)}")
- import traceback
- print("\n完整堆栈:")
- traceback.print_exc()
- print("\n" + "=" * 60)
- print("诊断建议:")
- print("=" * 60)
- error_msg = str(e).lower()
- if "json" in error_msg or "expecting value" in error_msg:
- print("1. CDP endpoint返回空响应")
- print(" - 可能Chrome启动失败")
- print(" - 尝试: 手动启动Chrome并检查是否正常")
- print(" - 尝试: 使用headless=True模式")
- elif "connection" in error_msg or "websocket" in error_msg:
- print("1. WebSocket连接失败")
- print(" - 可能防火墙阻止了连接")
- print(" - 尝试: 检查防火墙设置")
- elif "timeout" in error_msg:
- print("1. 连接超时")
- print(" - Chrome启动太慢")
- print(" - 尝试: 增加超时时间")
- else:
- print("1. 未知错误")
- print(" - 查看上面的完整堆栈信息")
- return False
- if __name__ == "__main__":
- success = asyncio.run(diagnose())
- sys.exit(0 if success else 1)
|