Playwright 安装与实战踩坑记录
最近想搭建一套基于 Playwright 的自动化数据抓取工作流,从安装到验证踩了不少坑,也积累了一些实战经验。这篇文章记录完整的安装过程、常见问题以及实际测试结论,供后续查阅。
1. 安装 Playwright CLI
Playwright 是微软开源的浏览器自动化工具,支持 Chromium、Firefox、WebKit 三大内核。安装方式有两种:
全局安装(适合直接调用 playwright 命令):
1 | npm i -g playwright |
本地安装(推荐用于具体项目):
1 | npm install -D playwright |
我两种都装了:全局用于快速命令,本地用于项目脚本。
2. 安装浏览器内核
装完 CLI 后必须下载浏览器:
1 | playwright install |
如果想一并安装系统依赖(Ubuntu 推荐):
1 | playwright install --with-deps |
踩坑点:我在 Ubuntu 上执行 --with-deps 时,Playwright 需要 sudo 权限来安装系统库,但自动化环境无法输入密码,这一步卡住了。解决方式是:
- 先执行
playwright install下载浏览器(不需要 sudo) - 系统依赖部分后续手动执行:
1
sudo npx playwright install-deps
验证浏览器是否装好:
1 | playwright install --list |
输出应包含 chromium、firefox、webkit 和 ffmpeg。
3. 环境验证
在项目中验证 Playwright 是否能正常启动浏览器:
1 | const { chromium } = require('playwright'); |
运行结果:Example Domain,说明浏览器能正常启动、导航、提取 DOM。
4. 实战测试
4.1 Hacker News(低难度)
抓取首页 Top Stories 和第一条帖子的评论:
- 页面结构简单,无反爬
- Playwright 轻松提取标题、分数、作者、评论数
- 共抓到 107 条评论
结论:✅ 非常顺畅
4.2 GitHub Trending(中高难度)
抓取 GitHub Trending 首页 Top 10 项目,并进一步获取每个仓库的详细描述、Topics、Stars、Forks:
- Playwright 阶段:抓取 Trending 页的项目名、描述、语言、今日新增 stars
- GitHub API 阶段:批量调用
api.github.com/repos/{name}获取 Topics、官网链接、详细描述 - 补抓阶段:遇到 API 限流时,用 Playwright 单独访问仓库首页提取 README 第一段作为简介
最终输出:一份包含 10 个热门项目的完整 Markdown 简报。
结论:✅ Playwright + API 混合方案效果最佳
4.3 反爬强站的边界(高难度/失败)
测试了几个防护较强的站点:
| 站点 | 结果 | 原因 |
|---|---|---|
| 淘宝商品评价 | ❌ 未尝试 | 涉及用户隐私与平台 ToS |
| 高校人才网 | ❌ 404/被拦截 | 企业级反爬,搜索页直接返回 404 |
| Academic Positions | ❌ Cloudflare | 直接进 “Attention Required” 拦截页 |
结论:⚠️ Playwright 不是万能钥匙。对于 Cloudflare、企业级 WAF、需要登录态的评价系统,普通 headless 浏览器难以绕过。
5. 定时任务化
将整个流程封装成一个 Node 脚本后,可以用 OpenClaw cron 设置为定时任务:
1 | # 每周六早上 9 点自动抓取并发送报告 |
我最终配置了一个每周六 9:00 自动执行的 GitHub Trending 周报任务。
6. 经验总结
- 全局 vs 本地:CLI 全局装方便,
require('playwright')需要在项目本地装,否则 Node.js 找不到模块 - 系统依赖:Ubuntu 上
install-deps需要 sudo,无密码环境建议拆成两步 - 反爬现实:公开信息站点(Hacker News、GitHub)可以顺利抓取;电商和招聘类站点防护严密,需换策略(API、RSS、RSSHub 等)
- 混合方案最佳:Playwright 负责页面渲染,REST API 负责结构化数据,互相补位
本文记录了 2026-04-13 的一次完整 Playwright 安装与验证过程。