diagnose_cdp.py 2.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. #!/usr/bin/env python3
  2. """
  3. CDP连接诊断脚本
  4. """
  5. import asyncio
  6. import sys
  7. from pathlib import Path
  8. # 添加项目根目录到路径
  9. sys.path.insert(0, str(Path(__file__).parent.parent.parent))
  10. from agent.tools.builtin.browser.baseClass import init_browser_session, cleanup_browser_session
  11. async def diagnose():
  12. """诊断browser-use的CDP连接问题"""
  13. print("=" * 60)
  14. print("Browser-Use CDP 连接诊断")
  15. print("=" * 60)
  16. try:
  17. print("\n步骤1: 初始化浏览器会话...")
  18. print(" - 浏览器类型: local")
  19. print(" - Headless: False")
  20. session, tools = await init_browser_session(
  21. browser_type="local",
  22. headless=False
  23. )
  24. print("✅ 浏览器会话初始化成功")
  25. print("\n步骤2: 测试基本导航...")
  26. result = await tools.navigate(
  27. url="https://www.baidu.com",
  28. browser_session=session
  29. )
  30. print(f"✅ 导航成功")
  31. print(f" - 结果: {result.extracted_content[:100] if result.extracted_content else 'N/A'}")
  32. print("\n步骤3: 获取页面URL...")
  33. current_url = await session.get_current_page_url()
  34. print(f"✅ 当前URL: {current_url}")
  35. print("\n步骤4: 清理浏览器会话...")
  36. await cleanup_browser_session()
  37. print("✅ 清理完成")
  38. print("\n" + "=" * 60)
  39. print("✅ 所有测试通过!browser-use工作正常")
  40. print("=" * 60)
  41. return True
  42. except Exception as e:
  43. print(f"\n❌ 错误: {type(e).__name__}")
  44. print(f" 消息: {str(e)}")
  45. import traceback
  46. print("\n完整堆栈:")
  47. traceback.print_exc()
  48. print("\n" + "=" * 60)
  49. print("诊断建议:")
  50. print("=" * 60)
  51. error_msg = str(e).lower()
  52. if "json" in error_msg or "expecting value" in error_msg:
  53. print("1. CDP endpoint返回空响应")
  54. print(" - 可能Chrome启动失败")
  55. print(" - 尝试: 手动启动Chrome并检查是否正常")
  56. print(" - 尝试: 使用headless=True模式")
  57. elif "connection" in error_msg or "websocket" in error_msg:
  58. print("1. WebSocket连接失败")
  59. print(" - 可能防火墙阻止了连接")
  60. print(" - 尝试: 检查防火墙设置")
  61. elif "timeout" in error_msg:
  62. print("1. 连接超时")
  63. print(" - Chrome启动太慢")
  64. print(" - 尝试: 增加超时时间")
  65. else:
  66. print("1. 未知错误")
  67. print(" - 查看上面的完整堆栈信息")
  68. return False
  69. if __name__ == "__main__":
  70. success = asyncio.run(diagnose())
  71. sys.exit(0 if success else 1)