错误:无法启动浏览器进程 puppeteer

Abu*_*ail 19 node.js puppeteer

检查失败 crashForExceptionInNonABIComplianceCodeRange 其功能下面的代码是创建 PDF 文件

   (async function() {

      try {

      const browser = await puppeteer.launch();
      const page = await browser.newPage();

      await page.setContent(pdfOutput);
      await page.emulateMedia("screen");
      await page.pdf({
        path: "routes/planiton/pdf/mypdf.pdf",
        format: "A4",
        printBackground: true
      });

      console.log('done');
      await browser.close();
      //process.exit();

    } catch (e) {
      console.log("Our Error", e)
    }
  })();
Run Code Online (Sandbox Code Playgroud)

小智 32

我遇到了同样的问题,我尝试了Puppeteer 指南中列出的所有内容 ,但没有一个对我有用

对我有用的是手动下载铬sudo apt-get install chromium-browser

然后,告诉 Puppeteer 铬的位置:

const browser = await puppeteer.launch({
  executablePath: '/usr/bin/chromium-browser'
})
Run Code Online (Sandbox Code Playgroud)

希望这会帮助某人:)

  • 这几乎成功了,我发现这是最准确的答案。对我有用的是: `let browser = wait puppeteer.launch({executablePath: '/usr/bin/chromium-browser', args: [ '--disable-gpu', '--disable-setuid-sandbox', '--no-sandbox', '--no-zygote' ] })` 替代解决方案可能是安装其他评论中提到的所有依赖项。对于最准确的列表,我建议查看这里:https://github.com/puppeteer/puppeteer/blob/main/docs/troubleshooting.md (4认同)
  • 也适用于 Mac OS X。`brew 安装 chromium && 哪个 chromium` (3认同)
  • 这在 alpine 上似乎也是必要的,因为 puppeteer 的 chromium 正在使用不可用的 C 函数。在 alpine 上安装:`apk add chromium`。还可以像其他答案提到的那样使用 `args: ['--no-sandbox']` 调用 `launch` 。 (3认同)

Tlo*_*eng 15

-在 Linux (Ubuntu)V20 上 -使用 Node v12.X -使用 Puppeteer-core v10.0.0

https://pptr.dev/#?product=Puppeteer&version=v10.0.0&show=api-class-browserfetcher https://openbase.com/js/puppeteer-core/versions#10.0.0 -- 用于 r[版本]

puppeteer = require('puppeteer-core');
// console.log('TRYING TO FETCH BROWSER')
const browserFetcher = puppeteer.createBrowserFetcher();
let revisionInfo = await browserFetcher.download('884014');


browser = await puppeteer.launch(
  {
    executablePath: revisionInfo.executablePath,
    args: ['--no-sandbox', "--disabled-setupid-sandbox"]
  }
)
Run Code Online (Sandbox Code Playgroud)

如果您以 Root 身份运行且未设置 --no-sandbox 标志,则服务器上可能会出现错误

如果您收到如下错误:

/home/[xxx]/[xxx]/node_modules/puppeteer[-core]/.local-chromium/linux-[xxx]/chrome-linux/chrome:加载共享库时出错:xxxx-xxxx.xx.x:无法打开共享对象文件:没有这样的文件或目录

在 shell 上,cd 到 /home/[xxx]/[xxx]/node_modules/puppeteer[-core]/.local-chromium/linux-[xxx]/chrome-linux/chrome,使用 => ldd chrome检查缺少的依赖项| grep 不

如果你得到一个列表然后运行以下命令

apt-get upgrade
apt-get update
apt-get install gconf-service libasound2 libatk1.0-0 libc6 libcairo2 libcups2 libdbus-1-3 libexpat1 libfontconfig1 libgcc1 libgconf-2-4 libgdk-pixbuf2.0-0 libglib2.0-0 libgtk-3-0 libnspr4 libpango-1.0-0 libpangocairo-1.0-0 libstdc++6 libx11-6 libx11-xcb1 libxcb1 libxcomposite1 libxcursor1 libxdamage1 libxext6 libxfixes3 libxi6 libxrandr2 libxrender1 libxss1 libxtst6 ca-certificates fonts-liberation libappindicator1 libnss3 lsb-release xdg-utils wget

apt-get install -y libgbm-dev
apt-get install libglib2.0-0
Run Code Online (Sandbox Code Playgroud)

如果依赖项消失了,那么你的 puppeteer 应该可以正常工作


Sml*_*lok 9

似乎每个人都有不同的解决方案。这些都不适合我,但我最终在 Ubuntu 20.04 上使用了以下命令:

  const browser = await puppeteer.launch({
    args: ["--no-sandbox", "--disabled-setupid-sandbox"],
  });
Run Code Online (Sandbox Code Playgroud)


小智 8

const browser = await puppeteer.launch({
    headless:false,
    args: ["--no-sandbox"]
});
Run Code Online (Sandbox Code Playgroud)

安装 puppeteer 和 puppeteer-core。


Abu*_*ail 6

const browser = await puppeteer.launch({ignoreDefaultArgs: ['--disable-extensions']});
Run Code Online (Sandbox Code Playgroud)

  • 解释一下原因 (9认同)

小智 6

apt-get install chromium-browser
Run Code Online (Sandbox Code Playgroud)

尝试使用此命令,您仍然会收到任何错误。

然后安装一些不完整的os包。对于我安装的 Ubuntu:

sudo apt-get install gconf-service libasound2 libatk1.0-0 libc6 libcairo2 libcups2 libdbus-1-3 libexpat1 libfontconfig1 libgcc1 libgconf-2-4 libgdk-pixbuf2.0-0 libglib2.0-0 libgtk-3-0 libnspr4 libpango-1.0-0 libpangocairo-1.0-0 libstdc++6 libx11-6 libx11-xcb1 libxcb1 libxcomposite1 libxcursor1 libxdamage1 libxext6 libxfixes3 libxi6 libxrandr2 libxrender1 libxss1 libxtst6 ca-certificates fonts-liberation libappindicator1 libnss3 lsb-release xdg-utils wget
Run Code Online (Sandbox Code Playgroud)


小智 5

如果您遇到无法启动浏览器进程的情况,则可能是您没有安装 chromium

sudo apt-get install chromium-browser
Run Code Online (Sandbox Code Playgroud)

然后设置


Hel*_*rld 5

在 Debian 9.5 上,我遇到了同样的问题

Error: Failed to launch the browser process! spawn /home/user/PuppeteerTests/node_modules/puppeteer/.local-chromium/linux-737027/chrome-linux/chrome ENOENT
Run Code Online (Sandbox Code Playgroud)

所以我首先进入node_modules/puppeteer/.local-chromium/linux-737027/并找到了一个名为 .zip 的文件chrome-linux.zip夹,其中包含一个名为.zip 的文件夹chrome-linux

然后我深入到一个目录中chrome-linux,只找到了libGLESv2.so.

所以我把chrome-linuxzip 文件中的目录粘贴进去node_modules/puppeteer/.local-chromium/linux-737027/(所以删除了旧的)。

然后我尝试了谷歌例子

const puppeteer = require('puppeteer');

 (async() => {
 const browser = await puppeteer.launch();
 console.log(await browser.version());
 await browser.close();
 })();
Run Code Online (Sandbox Code Playgroud)

这产生了

Error: Failed to launch the browser process!
[0424/110706.119517:FATAL:zygote_host_impl_linux.cc(116)] No usable sandbox! Update your kernel or see https://chromium.googlesource.com/chromium/src/+/master/docs/linux/suid_sandbox_development.md for more information on developing with the SUID sandbox. If you want to live dangerously and need an immediate workaround, you can try using --no-sandbox.
Run Code Online (Sandbox Code Playgroud)

最后按照这个Puppeteer 指南,我启用user namespace cloning了沙箱工作:

sudo sysctl -w kernel.unprivileged_userns_clone=1
Run Code Online (Sandbox Code Playgroud)

再次尝试使用相同的示例。


Dr4*_*nys 5

对我有用的唯一方法(我在 Windows 中使用 wsl )是设置 args 配置,如下所示:

const browser = await puppeteer.launch({
    args: [
        '--disable-gpu',
        '--disable-dev-shm-usage',
        '--disable-setuid-sandbox',
        '--no-first-run',
        '--no-sandbox',
        '--no-zygote',
        '--single-process',
    ]
});
Run Code Online (Sandbox Code Playgroud)


Ped*_* GM 5

在启动 puppeteer 之前,执行以下几行:

sudo apt-get update
sudo apt-get install -y libgbm-dev
sudo apt install -y gconf-service libasound2 libatk1.0-0 libc6 libcairo2 libcups2 libdbus-1-3 libexpat1 libfontconfig1 libgcc1 libgconf-2-4 libgdk-pixbuf2.0-0 libglib2.0-0 libgtk-3-0 libnspr4 libpango-1.0-0 libpangocairo-1.0-0 libstdc++6 libx11-6 libx11-xcb1 libxcb1 libxcomposite1 libxcursor1 libxdamage1 libxext6 libxfixes3 libxi6 libxrandr2 libxrender1 libxss1 libxtst6 ca-certificates fonts-liberation libappindicator1 libnss3 lsb-release xdg-utils wget
Run Code Online (Sandbox Code Playgroud)

然后执行 npm start (或任何你有的东西)并且会起作用。


Muh*_*dar 5

当我在 Ubuntu 服务器上运行我的项目时,我在 puppeteer 中遇到了同样的问题,以下是我修复它的方法。

1-如果尚未安装,请先安装 Chromium

sudo apt-get install chromium-browser
Run Code Online (Sandbox Code Playgroud)

2- 通过在 Ubuntu 终端中运行以下命令找出 Chromium 的路径。

which chromium-browser
Run Code Online (Sandbox Code Playgroud)

3- 将该路径添加到 puppeteer。

const browser: puppeteer.Browser = await puppeteer.launch({
  executablePath: '/usr/bin/chromium-browser', <-------
  }); 
Run Code Online (Sandbox Code Playgroud)

4-还要向 puppeteer 添加ignoreDefaultArgs: ['--disable-extensions']。

const browser: puppeteer.Browser = await puppeteer.launch({
 executablePath: '/usr/bin/chromium-browser',

 ignoreDefaultArgs: ['--disable-extensions'] <----
 });
Run Code Online (Sandbox Code Playgroud)