Files
val-blog/skills/browser-automation/test_google.py
T

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)