欢迎光临
我们一直在努力

Playwright 环境配置的 5 个坑,无头模式那条最容易踩

Playwright 环境配置的 5 个坑,无头模式那条最容易踩

Playwright 装起来看着简单,两行命令的事。可真到不同机器上,报错五花八门。这篇把最常遇到的 5 个坑列一遍,都是我自己或者身边人踩过的。

坑一:只装了库,没装浏览器内核

这是新手第一坑。装完库,兴冲冲跑脚本,直接报找不到可执行文件。

原因很简单:pip install playwright 只装了 Python 这一层,浏览器内核是另外下载的。得补一句:

playwright install

想省点空间,只装要用的那个就行,比如 playwright install chromium。

坑二:Linux 上缺系统依赖

库里装好了,内核也下了,一跑还是起不来——多半是系统库不齐。浏览器内核依赖一堆图形、字体、编解码相关的系统库,精简版镜像里往往没有。

这时候别再一个个手动装了:

playwright install-deps

它会把缺的系统依赖一口气补齐。在 CI 和容器里尤其管用。

坑三:无头模式跑不通,有头就正常

这条最坑,也最常见。

明明加了 headless=False 就能跑,一改成无头就失败,或者元素明明在、却一直报不可见、不可点。

原因通常是:无头模式下没有真实窗口,某些依赖布局尺寸的行为会不一样。元素高度算出来是 0、懒加载没触发、某些动画状态判断异常,都可能发生。

几个应对办法:

# 1. 显式给一个正常的视口尺寸,别用默认的
page = browser.new_page(viewport={"width": 1440, "height": 900})

# 2. 需要滚动才加载的内容,先滚一下
page.mouse.wheel(0, 1000)

还有一个信号常被忽略——无头模式下页面语言、时区、部分接口行为和真实环境有差异,结果就是"有头好好的,无头就挂"。

坑四:把无头当一个开关,忘了它变了什么

承接上一条。很多人以为 headless 只是"显不显示界面",其实它悄悄改变了几件事。

最典型的是视口。有头模式窗口多大,视口就多大;无头模式默认给一个固定值。页面里响应式布局一判断,加载出来的可能就是另一套结构,你原来的定位自然失效。

其次是 User-Agent 和一些特性开关,两者并不完全一致。

所以切换模式之后,别默认"应该一样",先把视口和场景对齐再排查。

坑五:容器里权限不足,进程起不来

放进容器里跑,报的错经常跟权限有关。常见的是沙箱启动失败。

browser = p.chromium.launch(args=["–no-sandbox"])

另外容器里最好显式指定用户目录和临时目录,否则某些路径没有写权限,也会在启动阶段失败。

顺手记一个排查顺序

遇到"装完了却跑不起来",按这个顺序走,基本不会跑偏:

  • 先确认内核装了没(playwright install);
  • 再确认系统依赖齐了没(playwright install-deps);
  • 接着把有头和无头各跑一遍,看差异出在哪;
  • 最后检查容器里的权限和目录。
  • 把这四步过一遍,绝大多数环境问题都能定位到。实在找不到头绪,就把报错原文完整看一遍,很多时候答案就写在里面,只是被我们一眼扫过去了。


    互动时间:你在配环境的时候,被哪个坑卡得最久?评论区说说,说不定能帮到下一个人 👇


    声明:本文为原创技术分享,请遵守相关网络协议与法律法规,勿将技术用于任何违规场景。

    赞(0)
    未经允许不得转载:171主机测评 » Playwright 环境配置的 5 个坑,无头模式那条最容易踩
    分享到: 更多 (0)

    评论 抢沙发

    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址