playwright-automation

安装量: 44
排名: #16738

安装

npx skills add https://github.com/aaaaqwq/claude-code-skills --skill playwright-automation

Playwright 浏览器自动化 概述 Playwright 是一个强大的浏览器自动化工具,可以模拟真实用户操作,支持: 无头浏览器模式(后台运行) 数据采集和爬虫 表单自动填写 UI 自动化测试 截图和 PDF 生成 为什么需要 Playwright 与 browser tool 的区别 特性 browser tool Playwright 需要用户参与 ✅ 需要手动打开浏览器 ❌ 完全自动 适合定时任务 ❌ ✅ 后台运行 ❌ ✅ 调试友好 ✅ 可视化操作 ⚠️ 需要日志 无需安装 ✅ 已集成 ❌ 需要安装 使用场景 使用 Playwright : ✅ 定时监控(cron 任务) ✅ 大规模数据采集 ✅ 无人值守运行 ✅ 生产环境部署 使用 browser tool : ✅ 交互式调试 ✅ 需要人工决策的操作 ✅ 一次性任务 ✅ 绕过复杂验证码 快速开始 1. 安装 Playwright

安装 Python 包

pip install playwright

安装浏览器(Chromium)

playwright install chromium

验证安装

python3 -c "from playwright.sync_api import sync_playwright; print('✅ 安装成功')" 2. 基本使用 同步 API(简单任务) from playwright . sync_api import sync_playwright with sync_playwright ( ) as p : browser = p . chromium . launch ( headless = True )

headless=False 显示浏览器

page

browser . new_page ( ) page . goto ( 'https://example.com' ) print ( page . title ( ) ) browser . close ( ) 异步 API(推荐,性能更好) import asyncio from playwright . async_api import async_playwright async def main ( ) : async with async_playwright ( ) as p : browser = await p . chromium . launch ( headless = True ) page = await browser . new_page ( ) await page . goto ( 'https://example.com' ) title = await page . title ( ) print ( title ) await browser . close ( ) asyncio . run ( main ( ) ) 常用功能 1. 页面导航

等待加载完成

await page . goto ( 'https://example.com' , wait_until = 'domcontentloaded' )

等待选项:

- 'load' - 页面完全加载

- 'domcontentloaded' - DOM 加载完成(更快)

- 'networkidle' - 网络空闲(最慢但最稳)

  1. 元素定位

CSS 选择器

await page . click ( 'button.submit' ) await page . fill ( 'input[name="username"]' , 'myuser' )

XPath

await page . click ( 'xpath=//button[@type="submit"]' )

文本选择器

await page . click ( 'text=登录' )

组合选择器

await page . click ( 'div.login-form >> text=登录' ) 3. 提取数据

获取文本

text

await page . text_content ( 'h1.title' )

获取属性

href

await page . get_attribute ( 'a.link' , 'href' )

获取多个元素

items

await page . query_selector_all ( 'div.item' ) for item in items : text = await item . text_content ( ) print ( text )

执行 JavaScript

result

await page . evaluate ( '() => document.title' )

获取整个 HTML

html

await page . content ( ) 4. 表单操作

填写表单

await page . fill ( 'input[name="username"]' , 'myuser' ) await page . fill ( 'input[name="password"]' , 'mypass' ) await page . click ( 'button[type="submit"]' )

下拉选择

await page . select_option ( 'select#country' , 'China' )

复选框

await page . check ( 'input#agree' )

上传文件

await page . set_input_files ( 'input[type="file"]' , 'path/to/file.pdf' ) 5. 等待策略

等待元素出现

await page . wait_for_selector ( 'div.result' , timeout = 5000 )

等待导航

async with page . expect_navigation ( ) : await page . click ( 'a.link' )

等待特定条件

await page . wait_for_function ( '() => document.title.includes("加载完成")' )

固定延迟

import asyncio await asyncio . sleep ( 2 )

等待 2 秒

  1. 滚动和交互

滚动到页面底部

await page . evaluate ( 'window.scrollTo(0, document.body.scrollHeight)' )

滚动到元素

await page . locator ( 'div.footer' ) . scroll_into_view_if_needed ( )

鼠标悬停

await page . hover ( 'div.menu' )

拖拽

await page . drag_and_drop ( 'div.draggable' , 'div.dropzone' ) 7. 截图和 PDF

截图

await page . screenshot ( path = 'screenshot.png' )

全页截图

await page . screenshot ( path = 'full.png' , full_page = True )

元素截图

await page . locator ( 'div.content' ) . screenshot ( path = 'element.png' )

生成 PDF

await page . pdf ( path = 'page.pdf' , format = 'A4' ) 8. 处理弹窗

接受 alert

async with page . expect_event ( 'dialog' ) as dialog_info : await page . click ( 'button' ) dialog = await dialog_info . value await dialog . accept ( )

输入 prompt

async with page . expect_event ( 'dialog' ) as dialog_info : await page . click ( 'button' ) dialog = await dialog_info . value await dialog . accept ( 'my input' ) 反爬策略 1. User-Agent 轮换 user_agents = [ 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36' , 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36' , 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36' ] browser = await p . chromium . launch ( user_agent = random . choice ( user_agents ) ) 2. 随机延迟 import random import asyncio

在操作之间添加随机延迟

await asyncio . sleep ( random . uniform ( 2 , 5 ) ) 3. Cookie 保存和加载

第一次登录后保存 Cookie

context

await browser . new_context ( ) await page . goto ( 'https://example.com/login' )

... 登录操作 ...

await context . storage_state ( path = 'cookies.json' )

后续使用保存的 Cookie

context

await browser . new_context ( storage_state = 'cookies.json' ) 4. 代理设置 browser = await p . chromium . launch ( proxy = { 'server' : 'http://proxy.example.com:8080' , 'username' : 'user' , 'password' : 'pass' } ) 5. 浏览器上下文隔离

创建独立的上下文(相当于无痕模式)

context

await browser . new_context ( viewport = { 'width' : 1920 , 'height' : 1080 } , user_agent = 'Custom UA' , locale = 'zh-CN' ) page = await context . new_page ( ) 调试技巧 1. 显示浏览器

开启有头模式,可以看到操作过程

browser

await p . chromium . launch ( headless = False , slow_mo = 1000 )

slow_mo=1000 会在每个操作间延迟 1 秒

  1. 截图调试

在关键步骤截图

await page . goto ( 'https://example.com' ) await page . screenshot ( path = 'step1.png' ) await page . click ( 'button' ) await page . screenshot ( path = 'step2.png' ) 3. 查看日志

监听控制台消息

page . on ( 'console' , lambda msg : print ( f'Console: { msg . text } ' ) )

监听网络请求

page . on ( 'request' , lambda request : print ( f'Request: { request . url } ' ) ) page . on ( 'response' , lambda response : print ( f'Response: { response . status } ' ) ) 4. Playwright Inspector

启动 Inspector 模式

PWDEBUG

1
python3 your_script.py
常见问题
Q: 如何处理验证码?
A
几种方案 使用打码平台(超级鹰、若快打码) 手动处理:暂停等待用户输入 降级:用 browser tool 让用户手动操作

方案 2: 手动处理

input ( "遇到验证码,请在浏览器中完成,然后按回车继续..." ) await asyncio . sleep ( 2 )

等待验证通过

Q: 元素找不到怎么办?
A
检查以下几点 是否在 iframe 中(需要切换) 是否动态加载(需要等待) 选择器是否正确

切换到 iframe

frame

page . frame ( 'iframe-id' ) await frame . click ( 'button' )

等待动态加载

await page . wait_for_selector ( 'div.dynamic-content' ) Q: 如何提高性能? A : 使用异步 API 并发多个页面 减少不必要的等待

并发多个页面

async def fetch ( url ) : page = await browser . new_page ( ) await page . goto ( url )

...

tasks

[ fetch ( url ) for url in urls ] await asyncio . gather ( * tasks ) 与 OpenClaw 集成 在 healthcare-monitor 中的使用

scraper_free.py

from playwright . async_api import async_playwright async with async_playwright ( ) as p : browser = await p . chromium . launch ( headless = True ) context = await browser . new_context ( user_agent = "Mozilla/5.0 ..." ) page = await context . new_page ( ) await page . goto ( url )

... 采集数据 ...

await browser . close ( ) 与 browser tool 配合 Playwright → 日常自动监控 browser tool → 调试和异常处理 资源 官方文档: https://playwright.dev/python/ API 参考: https://playwright.dev/python/docs/api/class-playwright 示例代码: ~/clawd/skills/playwright-automation/examples/ 快速命令

安装

pip install playwright && playwright install chromium

运行脚本

python3 script.py

调试模式

PWDEBUG

1 python3 script.py

查看版本

playwright
--version
记住
Playwright 让你的自动化任务完全无人值守!🚀
返回排行榜