CentOS 安装 puppeteer 运行报错解决方法
1450一步一个坑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
。