CentOS 安装 puppeteer 运行报错解决方法

1120一步一个坑kohai

CentOS服务器安装 puppeteer 后启动报错 “Error: Failed to launch the browser process!”“Running as root without --no-sandbox is not supported.” 解决办法。

博主在服务器(CentOS)中的 Node 程序使用 puppeteer 时,安装依赖是成功的,可是当使用 puppeteer 启动一个 brower 的时候,报了以下的错误:

~ Error: Failed to launch the browser process!
~ /path-to-project/node_modules/puppeteer/.local-chromium/linux-869685/chrome-linux/chrome: error while loading shared libraries: libatk-1.0.so.0: cannot open shared object file: No such file or directory
~ TROUBLESHOOTING: https://github.com/puppeteer/puppeteer/blob/main/docs/troubleshooting.md
bash
复制代码

通过访问错误信息中的链接了解到,原因是服务器中缺少必要的依赖库。

官方文档

首先进入到项目中的 chrome 文件夹(/项目地址/node_modules/puppeteer/.local-chromium/linux-869685/chrome-linux/),然后执行以下命令:

ldd chrome | grep not
bash
复制代码

这时会列出缺少的依赖库,复制名字到 https://pkgs.org/ 中搜索,选择 CentOS,点击跳转至新页面,复制安装命令到终端执行即可:

全部安装完成后,执行以下命令:

yum update nss -y
bash
复制代码

就在以为大功告成到时候,程序又报了以下错误:

~ Error: Failed to launch the browser process!
~ [0421/233938.013705:ERROR:zygote_host_impl_linux.cc(90)] Running as root without --no-sandbox is not supported. See https://crbug.com/638180.
~ TROUBLESHOOTING: https://github.com/puppeteer/puppeteer/blob/main/docs/troubleshooting.md
bash
复制代码

意思是使用 root 用户运行 chrome 的话需要在后面加上 --no-sandbox,按照指引设置之后并没有效果,可能换个非 root 用户就可以,博主没有尝试。

可以在启动 brower 的时候往其添加参数:

const browser = await puppeteer.launch({args: ['--no-sandbox', '--disable-setuid-sandbox']});
js
复制代码

这样设置之后,成功运行了 puppeteer