Install
openclaw skills install playwright-han使用 Playwright 库实现快速、可靠的多浏览器页面自动化,支持截图、网络拦截和元素智能等待操作。
openclaw skills install playwright-hanPlaywright 是微软开发的现代化浏览器自动化库,比 Selenium 更快、更可靠。
| 特性 | Playwright | Selenium |
|---|---|---|
| 速度 | ⚡ 快 | 🐢 较慢 |
| 自动等待 | ✅ 内置 | ❌ 需要手动 |
| 多浏览器 | ✅ Chromium/Firefox/WebKit | ✅ 所有主流浏览器 |
| 网络拦截 | ✅ 支持 | ❌ 有限 |
| 截图 | ✅ 全页截图 | ❌ 仅视口 |
| API 设计 | ✅ 现代化 | ⚠️ 传统 |
# 安装 Python 库
pip3 install playwright --break-system-packages
# 安装浏览器
python3 -m playwright install chromium
from playwright.sync_api import sync_playwright
with sync_playwright() as p:
# 启动浏览器
browser = p.chromium.launch(headless=True)
page = browser.new_page()
# 访问网页
page.goto('https://www.baidu.com')
# 截图
page.screenshot(path='example.png')
browser.close()
from playwright.sync_api import sync_playwright
with sync_playwright() as p:
browser = p.chromium.launch(headless=True)
page = browser.new_page()
# 直接访问搜索 URL
page.goto('https://www.baidu.com/s?wd=Python', wait_until='networkidle')
# 获取搜索结果
results = page.query_selector_all('.result h3')
for i, r in enumerate(results[:5], 1):
print(f"{i}. {r.inner_text()}")
browser.close()
page.screenshot(path='full.png', full_page=True)
# 阻止图片加载
def block_images(route):
if route.request.resource_type == "image":
route.abort()
else:
route.continue_()
page.route("**/*", block_images)
page.goto("https://example.com")
# 自动等待元素可见
page.wait_for_selector('#my-element')
# 等待特定状态
page.wait_for_selector('.loaded', state='visible')
# 填写表单
page.fill('#username', 'user123')
page.fill('#password', 'pass456')
page.click('#login-btn')
# 等待跳转
page.wait_for_url('**/dashboard')
# 创建新标签
page = browser.new_page()
# 切换标签
pages = browser.pages
pages[0].bring_to_front()
page.goto('https://example.com')
page.reload()
page.go_back()
page.go_forward()
# 点击
page.click('#button')
# 输入
page.fill('#input', 'text')
page.type('#input', 'text', delay=100) # 模拟键盘
# 选择
page.select_option('#select', 'value')
page.check('#checkbox')
page.uncheck('#checkbox')
# 文本
text = page.inner_text('#element')
html = page.inner_html('#element')
# 属性
href = page.get_attribute('a', 'href')
value = page.input_value('#input')
# 数量
count = page.count('.items')
# 截图
page.screenshot(path='page.png')
page.screenshot(path='full.png', full_page=True)
# PDF (仅 Chromium)
page.pdf(path='page.pdf')
解决: 使用 wait_for_selector
page.wait_for_selector('#element', state='visible')
page.click('#element')
解决: 使用 networkidle
page.goto('https://example.com', wait_until='networkidle')
解决: 设置 User-Agent 和隐藏自动化特征
browser = p.chromium.launch(
headless=True,
args=['--disable-blink-features=AutomationControlled']
)
page.set_extra_http_headers({
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) ...'
})
with 语句: 自动清理资源networkidle: 确保页面完全加载sleeptry-exceptplaywright>=1.40.0
如果你之前使用 Selenium,迁移非常简单:
# Selenium 代码
from selenium import webdriver
driver = webdriver.Chrome()
driver.get('https://example.com')
element = driver.find_element(By.ID, 'my-element')
# Playwright 等价代码
from playwright.sync_api import sync_playwright
with sync_playwright() as p:
browser = p.chromium.launch()
page = browser.new_page()
page.goto('https://example.com')
element = page.locator('#my-element')
主要差异:
page 而不是 driverWebDriverWaitlocator 替代 find_element版本: v1.1
创建时间: 2026-03-14 02:00 AM
更新: 2026-03-14 08:07 AM (添加迁移指南)
作者: Han's AI Assistant