| name | playwright_browser |
| description | 基于Playwright的高级浏览器自动化技能。支持动态网页抓取、点击/输入模拟、百度搜索、页面快照、数据提取和批量图片下载。当需要处理JavaScript渲染的页面、模拟用户交互或自动化网页操作时使用此技能。 |
Playwright 浏览器自动化技能
此技能提供基于 Playwright 的完整浏览器自动化能力,支持在无头模式下执行复杂的网页交互任务。
核心功能
1. 基础浏览 (browser_tool.py)
访问网页、截图、读取 HTML 内容。
- 支持等待特定元素加载完成
- 支持全页截图和 HTML 内容预览
- 自动处理容器环境的 sandbox 限制
2. 数据抓取 (scraper.py)
使用 CSS 选择器精确提取网页数据。
- 支持单个和多个元素提取
- 支持提取文本或属性值
- JSON 格式输出,便于后续处理
3. 搜索功能 (search.py)
使用百度搜索引擎并返回结构化结果。
- 自动填充关键词并提交搜索
- 提取标题、链接、描述
- 支持自定义结果数量
4. 自动化交互 (automator.py)
执行复杂的操作链,模拟真实用户行为。
- 点击、输入、下拉选择
- 滚动、等待、执行 JavaScript
- 支持在关键步骤截图
5. 页面快照 (snapshot.py)
高质量页面截图和 PDF 导出。
- 全页或可视区域截图
- PDF 格式导出
- 自动生成缩略图
6. 图片批量下载 (download_images.py)
自动提取并下载网页中的所有图片。
- 智能提取所有 img 标签
- 根据 alt 或 title 生成文件名
- 支持自定义下载数量和输出目录
- 高质量原始图片下载
使用方法
基础浏览
访问网页并截图: ```bash python skills/playwright_browser/browser_tool.py --url https://example.com --screenshot --output example.png ```
读取页面 HTML 内容: ```bash python skills/playwright_browser/browser_tool.py --url https://example.com --read ```
等待特定元素加载: ```bash python skills/playwright_browser/browser_tool.py --url https://example.com --screenshot --wait .main-content ```
数据抓取
提取单个元素文本: ```bash python skills/playwright_browser/scraper.py https://example.com --selector title:h1:text ```
提取多个元素(如所有链接): ```bash python skills/playwright_browser/scraper.py https://example.com --selector links:a:href:multiple --json ```
提取特定属性: ```bash python skills/playwright_browser/scraper.py https://example.com --selector img_url:img:src ```
百度搜索
搜索关键词: ```bash python skills/playwright_browser/search.py "搜索关键词" --max 10 ```
JSON 格式输出: ```bash python skills/playwright_browser/search.py "搜索关键词" --json > results.json ```
自动化交互
使用 JSON 配置文件: ```bash python skills/playwright_browser/automator.py https://example.com --file actions.json ```
直接传入操作链: ```bash python skills/playwright_browser/automator.py https://example.com --actions '[{"type":"fill","selector":"#input","value":"test"},{"type":"click","selector":"#submit"}]' ```
actions.json 示例: ```json [ {"type": "wait", "delay": 2000}, {"type": "fill", "selector": "#username", "value": "alice"}, {"type": "fill", "selector": "#password", "value": "password"}, {"type": "click", "selector": "#login"}, {"type": "wait_for", "selector": ".dashboard"}, {"type": "screenshot", "filename": "dashboard.png"} ] ```
页面快照
全页截图: ```bash python skills/playwright_browser/snapshot.py https://example.com --output fullpage --full-page ```
导出为 PDF: ```bash python skills/playwright_browser/snapshot.py https://example.com --output report --format pdf ```
批量下载图片
下载网页中的所有图片: ```bash python skills/playwright_browser/download_images.py https://example.com --output-dir downloaded_images --max 10 ```
参数说明:
--output-dir: 输出目录(相对于 alice_output/),默认为 "images"--max: 最大下载数量,默认为 20
示例: ```bash
从 NVIDIA 官网下载最多 5 张图片
python skills/playwright_browser/download_images.py https://www.nvidia.cn --output-dir nvidia_images --max 5 ```
技术细节
- 浏览器引擎: Chromium (无头模式)
- 视口设置: 默认 1280x800 (可根据需要调整)
- 容器优化: 自动添加
--no-sandbox和--disable-setuid-sandbox参数 - 异步执行: 使用 asyncio 实现高效并发
- 输出目录: 所有文件默认保存至
alice_output/
支持的操作类型 (automator.py)
| 类型 | 参数 | 说明 |
|---|---|---|
click |
selector | 点击指定元素 |
fill |
selector, value | 输入文本 |
select |
selector, value | 下拉选择 |
wait |
delay | 等待指定毫秒数 |
scroll |
selector 或 position | 滚动到元素或页面顶部/底部 |
screenshot |
filename | 保存截图 |
evaluate |
script | 执行 JavaScript |
wait_for |
selector | 等待元素出现 |
选择器配置格式 (scraper.py)
选择器参数格式:name:css_selector:attribute[:multiple]
name: 提取结果的键名css_selector: CSS 选择器attribute: 要提取的属性,默认text(文本内容)multiple: 可选,设为true时提取所有匹配项
示例:
title:h1:text- 提取 h1 标签的文本images:img:src:multiple- 提取所有 img 的 src 属性links:a:href- 提取第一个 a 标签的 href
注意事项
- 容器限制: 在容器环境中运行时,必须使用
--no-sandbox参数(已自动处理) - 超时设置: 默认超时时间为 30 秒,可根据任务复杂度调整
- 动态内容: 如需等待 JavaScript 渲染,使用
--wait参数或wait_for操作 - 反爬策略: 某些网站可能有反爬虫机制,建议适当添加延迟
- 内存使用: 处理大量页面时注意内存占用,可分批处理
- 依赖要求: 需要已安装
playwright包及浏览器二进制文件 - 图片下载: 某些网站可能有防盗链机制,导致部分图片无法下载
依赖安装
```bash pip install playwright playwright install chromium ```
常见问题
Q: 如何处理需要登录的页面? A: 使用 automator.py 的操作链,按顺序执行 fill (用户名) → fill (密码) → click (登录按钮) → wait_for (登录后元素)
Q: 如何提取 JavaScript 动态生成的内容?
A: 使用 browser_tool.py 的 --wait 参数或 scraper.py 的 --wait 参数等待元素加载
Q: 如何处理弹出框?
A: 使用 automator.py 的 evaluate 操作执行 JavaScript 关闭,或在页面上下文中提前禁用
Q: 为什么某些网站无法访问? A: 可能是反爬虫限制,可以尝试设置 user-agent 或使用代理(需修改代码添加 context 配置)
Q: 为什么只下载了部分图片? A: 某些图片可能有加载延迟、防盗链或 base64 编码。脚本会自动跳过无法访问的图片
Q: 下载的图片文件名如何确定? A: 脚本会优先使用 img 标签的 alt 属性,其次是 title 属性。如果没有则使用 "image_N" 格式