test_browser_v2.py 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158
  1. """
  2. 浏览器工具测试脚本 V2
  3. 测试不同的配置和workaround
  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 browser_use import BrowserSession
  11. import httpx
  12. async def test_direct_browser_use():
  13. """直接使用 browser-use,不通过框架封装"""
  14. print("\n" + "="*60)
  15. print("测试: 直接使用 browser-use (headless=True)")
  16. print("="*60)
  17. try:
  18. # 方案1: 增加启动延迟
  19. session = BrowserSession(
  20. headless=True,
  21. is_local=True,
  22. executable_path="/Applications/Google Chrome.app/Contents/MacOS/Google Chrome"
  23. )
  24. print("等待 Chrome 启动...")
  25. await asyncio.sleep(3) # 增加等待时间
  26. print("启动会话...")
  27. await session.start()
  28. print("✅ 成功启动")
  29. # 测试导航
  30. from browser_use.tools.service import Tools
  31. tools = Tools()
  32. await tools.navigate(url="https://www.example.com", browser_session=session)
  33. print("✅ 导航成功")
  34. await session.close()
  35. return True
  36. except Exception as e:
  37. print(f"❌ 失败: {e}")
  38. import traceback
  39. traceback.print_exc()
  40. return False
  41. async def test_with_custom_timeout():
  42. """测试:使用自定义超时设置"""
  43. print("\n" + "="*60)
  44. print("测试: 自定义 HTTP 超时 (headless=True)")
  45. print("="*60)
  46. try:
  47. # 创建自定义 HTTP 客户端
  48. http_client = httpx.AsyncClient(timeout=30.0)
  49. session = BrowserSession(
  50. headless=True,
  51. is_local=True,
  52. executable_path="/Applications/Google Chrome.app/Contents/MacOS/Google Chrome"
  53. )
  54. # 尝试替换内部 HTTP 客户端
  55. if hasattr(session, '_http_client'):
  56. session._http_client = http_client
  57. print("等待 Chrome 启动...")
  58. await asyncio.sleep(3)
  59. print("启动会话...")
  60. await session.start()
  61. print("✅ 成功启动")
  62. await session.close()
  63. await http_client.aclose()
  64. return True
  65. except Exception as e:
  66. print(f"❌ 失败: {e}")
  67. import traceback
  68. traceback.print_exc()
  69. return False
  70. async def test_headless_false_simple():
  71. """测试:headless=False 简单模式"""
  72. print("\n" + "="*60)
  73. print("测试: headless=False (简单模式)")
  74. print("="*60)
  75. try:
  76. session = BrowserSession(
  77. headless=False,
  78. is_local=True,
  79. executable_path="/Applications/Google Chrome.app/Contents/MacOS/Google Chrome"
  80. )
  81. print("等待 Chrome 启动...")
  82. await asyncio.sleep(3)
  83. print("启动会话...")
  84. await session.start()
  85. print("✅ 成功启动")
  86. # 测试导航
  87. from browser_use.tools.service import Tools
  88. tools = Tools()
  89. await tools.navigate(url="https://www.example.com", browser_session=session)
  90. print("✅ 导航成功")
  91. await session.close()
  92. return True
  93. except Exception as e:
  94. print(f"❌ 失败: {e}")
  95. import traceback
  96. traceback.print_exc()
  97. return False
  98. async def main():
  99. print("浏览器工具诊断测试 V2")
  100. print("="*60)
  101. results = {}
  102. # 测试1: 直接使用 browser-use
  103. results['direct'] = await test_direct_browser_use()
  104. await asyncio.sleep(2)
  105. # 测试2: 自定义超时
  106. results['custom_timeout'] = await test_with_custom_timeout()
  107. await asyncio.sleep(2)
  108. # 测试3: headless=False
  109. results['headless_false'] = await test_headless_false_simple()
  110. # 总结
  111. print("\n" + "="*60)
  112. print("测试总结")
  113. print("="*60)
  114. for name, result in results.items():
  115. status = '✅ 通过' if result else '❌ 失败'
  116. print(f"{name:20s}: {status}")
  117. print("="*60)
  118. if __name__ == "__main__":
  119. asyncio.run(main())