Playwright 安装与实战踩坑记录
最近想做一些网页自动化抓取的工作,选来选去最后用了 Playwright。安装过程整体还算顺利,但也踩了几个坑,记录一下。
安装
前提是你得有 Node.js(v18+ 就行)和 npm,这两个不展开了。
Playwright 可以全局装也可以项目本地装。我个人建议两个都装——全局装方便在命令行直接跑命令,项目本地装保证代码里 require('playwright') 能找到模块:
1 | # 全局 |
然后装浏览器内核:
1 | playwright install |
在 Ubuntu 上的话,推荐加上 --with-deps 一起把系统依赖也装了:
1 | playwright install --with-deps |
这里有个坑:如果你的环境没有 sudo 权限(比如某些自动化服务器),--with-deps 会卡住,因为它需要 sudo 装系统库。我的解决办法是先跑 playwright install(不需要 sudo),然后单独用 sudo npx playwright install-deps 装系统依赖。
装完可以用这个命令确认一下:
1 | playwright install --list |
看到 chromium、firefox、webkit、ffmpeg 这几个就说明没问题了。
最小可运行测试
装完之后先跑个最简单的例子,确认环境没问题:
1 | const { chromium } = require('playwright'); |
保存成 test-playwright.js,然后 node test-playwright.js。如果输出 页面标题: Example Domain 并且没有报错,就说明环境 OK 了。
第一次跑的时候如果遇到 Executable not found 之类的错误,一般是浏览器内核没装好,重新跑一下 playwright install 就行。
实际抓取测试
环境通了之后,试了几个不同类型的站点,结果差异挺大的。
公开信息站点——直接上
Hacker News 首页作为测试目标,反爬为零,直接写选择器就行:
1 | const { chromium } = require('playwright'); |
跑一下就能输出前十条新闻标题,没什么问题。
半结构化站点——Playwright + API 混合用
试了 GitHub Trending,这个稍微复杂一点。Trending 页面本身结构不太规整,只靠 Playwright 拿到的信息有限。我的做法是用 Playwright 抓项目列表(名称、描述、语言、今日新增 stars),然后调用 GitHub REST API 补全 Topics 和详细描述。
如果 API 被限流了,就回退到 Playwright 单独访问仓库首页提取 README 第一段。这样混合用效果还不错,最后能出一份包含十个项目的 Markdown 简报。
反爬强的站点——别硬来
也试了一些反爬比较狠的站,结论是 Playwright 不是万能钥匙:
- 电商评价页:不建议搞,涉及用户隐私和平台条款
- 企业招聘站:搜索页直接返回 404,企业级反爬不是闹着玩的
- Cloudflare 防护的站:直接进 “Attention Required” 验证页,普通 headless 浏览器过不了
遇到这些情况还是换思路吧,看看有没有 RSS、官方 API 或者数据导出之类的正规渠道。
定时执行
抓取脚本写完之后,可以用 cron 定期跑。比如每周六早上抓一次 GitHub Trending:
1 | openclaw cron add --name "github-trending-weekly" \ |
小结
这次折腾下来有几个体会:
install-deps需要 sudo,没权限的话就分开装- 公开站点 Playwright 直接上,反爬强的别硬来
- Playwright 做页面渲染抓取,REST API 拿结构化数据,两者互补效果最好