从0到1写一个Node.js+Playwright网页自动化脚本:避坑指南

0 阅读2分钟

最近在做一个侧边栏项目,需要用到 Node.js 和 Playwright 来处理一些网页自动化任务。在此之前我也用过 Puppeteer,但 Playwright 在多标签页和 iframe 穿透上确实更顺手一些。

下面记录一下这次折腾的几个核心经验,纯干货,希望能帮到同样在做自动化测试或者写工具的同学。

1. 环境准备与 Cookie 注入

很多时候我们需要在登录状态下进行页面操作,每次都让脚本扫码登录是不现实的。我的做法是:手动在浏览器登录一次,把 Cookie 复制下来存成本地文件。 在 Playwright 中,直接在 context 层面把这段字符串解析注入就行:

const context = await browser.newContext({
    userAgent: 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7)...'
});
await context.addCookies(parsedCookies);

2. 绕过常见的 UI 遮挡

你在执行 locator.click() 的时候,经常会遇到报错说“元素被遮挡”或者“拦截了指针事件”。这是因为前端现在很喜欢用绝对定位的 Tooltip 或者悬浮遮罩层。 解决这个最暴力的办法就是在 click 里加上 force 选项:

await button.click({ force: true });

但这种方法要慎用,最好的方式还是先用 page.mouse.wheel() 滚动页面,让元素处于视口的中央。

3. 拟人化的延迟操作

如果是做一些爬虫相关的业务,最忌讳的就是用 for 循环密集发请求。适当的 page.waitForTimeout(delay) 不仅是对目标服务器的尊重,也是保护自己脚本稳定性的必要手段。

这套逻辑目前我已经跑通在一个微型工具里了,后续如果有时间,我整理一份完整的代码出来。大家平时在写网页自动化的时候,还有遇到什么恶心的坑吗?欢迎在下面交流。