Playwright 无头浏览器部署
一、问题背景
在 Ubuntu 服务器(最小化镜像)中运行:
1 | bash node playwright-simple.js |
出现错误:
error while loading shared libraries: libatk-1.0.so.0: cannot open shared object file
browserType.launch: Target page, context or browser has been closed
二、问题原因
1️⃣ 本质原因
Chromium 运行依赖系统图形库,但服务器为最小化安装,缺少必要动态库。
报错核心:
libatk-1.0.so.0 not found
说明系统缺少 GTK/ATK 相关组件。
三、解决方案
方案一(推荐)
npx playwright install-deps
自动安装 Playwright 所需依赖。
方案二(手动安装依赖)
Ubuntu / Debian 系统:
apt update apt install -y \ libatk1.0-0 \ libatk-bridge2.0-0 \ libcups2 \ libxkbcommon0 \ libxcomposite1 \ libxdamage1 \ libxfixes3 \ libxrandr2 \ libgbm1 \ libasound2 \ libpangocairo-1.0-0 \ libgtk-3-0
安装完成后重新运行:
node playwright-simple.js
四、最终运行成功结果
成功输出:
🚀 启动 Playwright 无头浏览器... 📄 访问测试页面... ✅ 页面标题: Example Domain 📄 页面 URL: https://example.com/ 📝 页面内容长度: 528 字符 ✅ 测试完成!
说明:
Chromium 正常启动
网络访问正常
JS 执行正常
Playwright 环境完整
五、服务器资源情况分析
执行:
free -h
结果:
Mem: 1.9Gi total 1.1Gi used 152Mi free 918Mi buff/cache 792Mi available Swap: 4.0Gi (已使用 529Mi)
结论:
可用内存约 792MB
已开始使用 Swap
适合单实例自动化
不适合高并发浏览器任务
六、htop 说明
截图界面为:
htop
功能:
实时查看 CPU
查看内存使用
查看进程占用
可直接杀进程
退出方式:
q
或
F10
七、什么是无头浏览器?
定义
无头浏览器 = 没有图形界面的完整浏览器
特点:
解析 HTML
执行 JavaScript
渲染 DOM
发送网络请求
支持 Web API
支持 React / Vue 等框架
只是没有可视窗口。
八、Playwright 工作原理
架构:
Node.js → Chromium → DevTools Protocol
流程:
启动 Chromium
建立 CDP 调试连接
发送控制指令
浏览器执行操作
返回执行结果
九、为什么需要安装大量依赖?
即使是 headless 模式,Chromium 仍然需要:
GTK(图形库)
ATK(辅助功能库)
Pango(字体排版)
X11 组件
音频库
安全沙盒组件
原因:
无头 ≠ 精简浏览器
无头 = 完整浏览器 + 不显示界面
十、适用场景
可用于:
自动化登录
抓取动态网页
自动点击与表单提交
生成网页截图
生成 PDF
RPA 自动化
数据采集
网页监控
十一、服务器评估
配置:
1.9GB 内存
4GB Swap
适合:
单实例 Playwright
低并发任务
不适合:
多实例并发
大规模自动化调度
十二、优化建议
推荐启动参数:
const browser = await chromium.launch({ headless: true, args: [ '--no-sandbox', '--disable-setuid-sandbox', '--disable-dev-shm-usage', '--disable-gpu' ] });
最终状态
Playwright 依赖已补齐
Chromium 正常运行
无头浏览器功能完整
服务器资源可支撑单实例运行
环境可用于自动化与数据抓取任务
Playwright 无头浏览器部署
http://example.com/2026/02/10/linux/Playwright 无头浏览器部署与排错总结/