【问题标题】:Error: Failed to launch the browser process puppeteer错误:无法启动浏览器进程 puppeteer
【发布时间】:2020-05-15 15:57:47
【问题描述】:

检查失败 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)
    }
  })();

【问题讨论】:

标签: node.js puppeteer


【解决方案1】:

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

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

然后,告诉 Puppeteer 铬的位置:

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

希望这会对某人有所帮助:)

【讨论】:

  • 也适用于 Mac OS X。 brew install chromium && which chromium
  • 这在 alpine 上似乎也是必要的,因为 puppeteer 的 chromium 正在使用不可用的 C 函数。在 alpine 上安装:apk add chromium。也可以使用args: ['--no-sandbox'] 调用launch,就像提到的其他答案一样。
  • 这几乎成功了,我发现它是最准确的答案。对我有用的是:let browser = await puppeteer.launch({ executablePath: '/usr/bin/chromium-browser', args: [ '--disable-gpu', '--disable-setuid-sandbox', '--no-sandbox', '--no-zygote' ] }) 替代解决方案可能是安装其他 cmets 中提到的所有依赖项。对于最准确的列表,我建议在这里查看:: github.com/puppeteer/puppeteer/blob/main/docs/…
  • 对我来说,我只需要使用 apt-get 安装 chromium,但实际上我不必使用那个版本。安装好之后,puppeteer自带的嵌入式chromium就开始工作了。我猜它缺少一些使用apt-get 安装的系统库。
  • 如果您在 Heroku 上部署时遇到此错误并且也在使用子目录,则 buildpack 顺序很重要。唯一对我有用的顺序是 1.https://github.com/timanovsky/subdir-heroku-buildpack,然后是 2.https://github.com/jontewks/puppeteer-heroku-buildpack,然后是 3.heroku/nodejs
【解决方案2】:
const browser = await puppeteer.launch({
    headless:false,
    args: ["--no-sandbox"]
});

安装 puppeteer 和 puppeteer-core。

【讨论】:

  • 这个答案的替代方案并为我工作你可以使用这个:{ headless: true, args: ["--no-sandbox", "--disable-setuid-sandbox"]}跨度>
  • 添加参数:["--no-sandbox"] 对我有用。谢谢!
【解决方案3】:
apt-get install chromium-browser

尝试使用此命令,仍然会出现任何错误。

然后安装一些不完整的操作系统包。对于我安装的 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

【讨论】:

  • 这对我很有用
【解决方案4】:

-在 Linux (Ubuntu)V20 上 - 使用节点 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"]
  }
)

如果您以 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

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

【讨论】:

  • 使用 puppeteer-core 代替 puppeteer 救了我的命。自 2-3 天以来一直面临问题......谢谢曼!
【解决方案5】:
const browser = await puppeteer.launch({ignoreDefaultArgs: ['--disable-extensions']});

【讨论】:

  • 解释原因
【解决方案6】:

在 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

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

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

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

然后我尝试了example from Google

const puppeteer = require('puppeteer');

 (async() => {
 const browser = await puppeteer.launch();
 console.log(await browser.version());
 await browser.close();
 })();

中产生了
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.

最后在Puppeteer guide 之后,我启用了user namespace cloning 来让沙箱工作:

sudo sysctl -w kernel.unprivileged_userns_clone=1

再次尝试了同样有效的示例。

【讨论】:

    【解决方案7】:

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

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

    【讨论】:

      【解决方案8】:

      如果您无法启动浏览器进程 你可能没有安装铬

      sudo apt-get install chromium-browser
      

      然后setting up

      【讨论】:

        【解决方案9】:

        有时您的userDataDir 可能已被您的其他测试或代码污染。 尝试重命名它。

         const browser = await puppeteer.launch({
            headless: false,
            userDataDir: "./user_data2",
        
          
          });
        

        【讨论】:

        • 哇,真的!删除用户数据目录解决了我的问题。
        【解决方案10】:

        如果您尝试使用 { headless: false } 选项从 ssh 控制台运行 puppeteer,也会发生此错误。

        【讨论】:

        • 这救了我的命
        【解决方案11】:

        我遇到了同样的问题,那里的大师会告诉你很多事情。只需添加

        const browser = await puppeteer.launch({headless: false}); // default is true
        

        【讨论】:

        • headless=true 导致服务器上打开的浏览器。
        【解决方案12】:

        我在 Mac 上遇到了问题 - 我遇到了

        Failed to launch the browser process! spawn /PATH/TO/node_modules/puppeteer/ \
        .local-chromium/mac-756035/chrome-mac/Chromium.app/Contents/MacOS/Chromium \
        ENOENT
        

        最后的问题是铬拉链没有正确解压缩。我 cd 到 node_modules/puppeteer/.local-chromium,在那里找到 zip,手动解压缩,然后将其复制到 mac-756035/chrome-mac/Chromium.app/Contents/MacOS/。然后它按预期工作

        【讨论】:

          【解决方案13】:

          对我有用的唯一方法(我在 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',
              ]
          });
          

          【讨论】:

            【解决方案14】:

            在启动 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
            

            然后执行 npm start (或任何你有的)并且会工作。

            【讨论】:

              【解决方案15】:

              对于windows用户,按照这个步骤可以帮助你:

              -在这里下载铬https://download-chromium.appspot.com/

              -解压文件

              -在 node_modules/puppeteer/.local-chrominium/win64-869685/ 中,将 chrome-win 文件替换为你下载的那个。

              【讨论】:

                【解决方案16】:

                我刚刚解决了这个错误。 只需像这样编辑下一行:

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

                并告诉 puppeteer 你的浏览器在哪里。

                现在我的代码看起来像这样并且成功运行:

                const browser: puppeteer.Browser = await puppeteer.launch({
                  executablePath: '/usr/bin/chromium-browser',
                  ...,
                  ignoreDefaultArgs: ['--disable-extensions']
                });
                

                【讨论】:

                  【解决方案17】:

                  以下为我完成了这项工作(Mac OS):

                  • 降级到 NodeJS v12(之前我有 v14)
                  • 重新安装依赖项

                  【讨论】:

                    【解决方案18】:

                    它对我有用 下载 sudo apt-get install chromium-browser 然后

                       const browser = await puppeteer.launch({
                         args: ["--no-sandbox", "--disable-setuid-sandbox", "--disable-gpu"],
                         ignoreDefaultArgs: ["--disable-extensions"],
                         slowMo: 100,
                         // headless: false,
                      });
                    

                    【讨论】:

                    • 我的问题的正确答案谢谢
                    【解决方案19】:

                    关注https://github.com/puppeteer/puppeteer/blob/master/docs/troubleshooting.md的官方帮助, 就我而言,我已经安装了 cent Os 7 的所有依赖项,然后它工作正常

                    【讨论】:

                      猜你喜欢
                      • 1970-01-01
                      • 2020-10-02
                      • 1970-01-01
                      • 2022-08-11
                      • 1970-01-01
                      • 2022-10-19
                      • 1970-01-01
                      • 2015-01-27
                      • 2022-08-18
                      相关资源
                      最近更新 更多