126 lines
4.6 KiB
Python
126 lines
4.6 KiB
Python
#!/usr/bin/env python3
|
|
"""
|
|
测试脚本:使用代理访问 Google
|
|
"""
|
|
|
|
import sys
|
|
sys.path.insert(0, '/Users/guchen/.openclaw/workspace/skills/browser-automation')
|
|
|
|
from playwright.sync_api import sync_playwright
|
|
import os
|
|
|
|
# 代理配置
|
|
PROXY = {"server": "http://127.0.0.1:7897"}
|
|
|
|
def test_google_with_proxy():
|
|
"""测试使用代理访问 Google"""
|
|
|
|
print("=" * 60)
|
|
print("开始测试:使用代理访问 Google")
|
|
print(f"代理配置: {PROXY}")
|
|
print("=" * 60)
|
|
|
|
try:
|
|
with sync_playwright() as p:
|
|
# 启动浏览器
|
|
print("\n[1/5] 启动 Chrome 浏览器...")
|
|
browser = p.chromium.launch(
|
|
executable_path="/Applications/Google Chrome.app/Contents/MacOS/Google Chrome",
|
|
headless=False, # 设置为 True 可以无头运行
|
|
args=[
|
|
"--disable-blink-features=AutomationControlled",
|
|
"--disable-web-security",
|
|
"--window-size=1280,720",
|
|
]
|
|
)
|
|
|
|
# 创建带有代理的上下文
|
|
print("[2/5] 创建带有代理的浏览器上下文...")
|
|
context = browser.new_context(
|
|
viewport={"width": 1280, "height": 720},
|
|
user_agent="Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36",
|
|
proxy=PROXY # 关键:传入代理配置
|
|
)
|
|
|
|
# 注入反检测脚本
|
|
context.add_init_script("""
|
|
Object.defineProperty(navigator, 'webdriver', { get: () => undefined });
|
|
window.chrome = { runtime: {} };
|
|
""")
|
|
|
|
# 创建新页面
|
|
page = context.new_page()
|
|
|
|
# 访问 Google
|
|
print("[3/5] 访问 https://www.google.com ...")
|
|
page.goto("https://www.google.com", wait_until="networkidle")
|
|
page.wait_for_timeout(2000) # 等待页面完全加载
|
|
|
|
# 获取页面信息
|
|
print("[4/5] 获取页面信息...")
|
|
title = page.title()
|
|
url = page.url
|
|
|
|
# 获取页面文本内容(前500字符)
|
|
text_content = page.inner_text("body")
|
|
text_preview = text_content[:500].replace("\n", " ")
|
|
|
|
# 获取可交互元素
|
|
elements = page.query_selector_all('a, button, input, textarea, select')
|
|
element_count = len(elements)
|
|
|
|
# 截图
|
|
print("[5/5] 保存页面截图...")
|
|
screenshot_path = "/tmp/google_test.png"
|
|
page.screenshot(path=screenshot_path, full_page=True)
|
|
|
|
# 获取截图文件大小
|
|
screenshot_size = os.path.getsize(screenshot_path)
|
|
|
|
# 关闭浏览器
|
|
browser.close()
|
|
|
|
# 输出结果
|
|
print("\n" + "=" * 60)
|
|
print("测试结果: ✅ 成功")
|
|
print("=" * 60)
|
|
print(f"页面标题: {title}")
|
|
print(f"页面URL: {url}")
|
|
print(f"交互元素数量: {element_count}")
|
|
print(f"截图文件: {screenshot_path}")
|
|
print(f"截图大小: {screenshot_size / 1024:.2f} KB")
|
|
print("\n页面内容摘要 (前500字符):")
|
|
print("-" * 60)
|
|
print(text_preview)
|
|
print("-" * 60)
|
|
|
|
# 验证关键元素
|
|
has_google = "Google" in text_content or "google" in text_content.lower()
|
|
has_search = "search" in text_content.lower() or "搜索" in text_content
|
|
|
|
print("\n验证结果:")
|
|
print(f" - 包含 'Google' 文本: {'✅' if has_google else '❌'}")
|
|
print(f" - 包含搜索相关元素: {'✅' if has_search else '❌'}")
|
|
|
|
if has_google and screenshot_size > 1000:
|
|
print("\n✅ 测试通过:代理配置工作正常!")
|
|
return True
|
|
else:
|
|
print("\n⚠️ 测试部分通过:页面加载但可能不完全")
|
|
return False
|
|
|
|
except Exception as e:
|
|
print("\n" + "=" * 60)
|
|
print("测试结果: ❌ 失败")
|
|
print("=" * 60)
|
|
print(f"错误类型: {type(e).__name__}")
|
|
print(f"错误信息: {str(e)}")
|
|
print("\n详细堆栈:")
|
|
import traceback
|
|
traceback.print_exc()
|
|
return False
|
|
|
|
if __name__ == "__main__":
|
|
success = test_google_with_proxy()
|
|
sys.exit(0 if success else 1)
|