【问题标题】:/tmp/chromium: error while loading shared libraries: libnss3.so: cannot open shared object file: No such file or directory Vercel/tmp/chromium:加载共享库时出错:libnss3.so:无法打开共享对象文件:没有这样的文件或目录 Vercel
【发布时间】:2021-05-18 17:23:43
【问题描述】:

当我尝试访问上传到 vercel 服务器上的 API 时,我收到了这个错误。

有人遇到同样的错误吗?

当我在本地运行它时,它工作正常。

2021-02-15T19:38:59.218Z 0109b575-a2e7-478e-aefe-aa3335b5b6b8 ERROR 错误:无法启动浏览器进程! /tmp/chromium:加载共享库时出错:libnss3.so:无法打开共享对象文件:没有这样的文件或目录 疑难解答:https://github.com/puppeteer/puppeteer/blob/main/docs/troubleshooting.md 在 onClose (/var/task/node_modules/puppeteer-core/lib/cjs/puppeteer/node/BrowserRunner.js:193:20) 在界面。 (/var/task/node_modules/puppeteer-core/lib/cjs/puppeteer/node/BrowserRunner.js:183:68) 在 Interface.emit (events.js:327:22) 在 Interface.close (readline.js:424:8) 在 Socket.onend (readline.js:202:10) 在 Socket.emit (events.js:327:22) 在 endReadableNT (internal/streams/readable.js:1327:12) 在 processTicksAndRejections (internal/process/task_queues.js:80:21)

代码

import puppeteer, { Page } from 'puppeteer-core'
import chrome from 'chrome-aws-lambda'

export async function getOptions() {
  const isDev = !process.env.AWS_REGION
  let options;

  const chromeExecPaths = {
    win32: 'C:\\Program Files (x86)\\Google\\Chrome\\Application\\chrome.exe',
    linux: '/usr/bin/google-chrome',
    darwin: '/Applications/Google Chrome.app/Contents/MacOS/Google Chrome'
  }
  
  const exePath = chromeExecPaths[process.platform]

  if (isDev) {
    options = {
      args: [],
      executablePath: exePath,
      headless: true
    }
  } else {
    options = {
      args: chrome.args,
      executablePath: await chrome.executablePath,
      headless: chrome.headless
    }
  }

  return options
}

let _page: Page | null
async function getPage(): Promise<Page> {
  if (_page) {
    return _page
  }

  const options = await getOptions()
  const browser = await puppeteer.launch(options)

  _page = await browser.newPage()

  return _page
}


export async function getScreenshot(html: string, { width, height } = { width: 800, height: 800 }) {
  const page = await getPage();

  await page.setContent(html);
  await page.setViewport({ width, height });

  const file = await page.screenshot({ type: 'png' });

  return file;
}

【问题讨论】:

    标签: javascript node.js next.js puppeteer vercel


    【解决方案1】:

    我遇到了同样的问题,即 puppeteer 在我的本地环境中运行良好,但是当我部署到 AWS EC2 时,我遇到了同样的错误共享加载库 解决方案

    1. 首先检查您正在运行的 nodejs 的版本,以及它是否低于 v14.0 或高于 v14.0。升级或降级(建议升级)并重新启动您的应用,然后尝试。

    最常见的原因是 Node.js v14.0.0 中的一个错误,它破坏了 extract-zip,Puppeteer 使用该模块将浏览器下载提取到正确的位置。该错误已在 Node.js v14.1.0 中修复,因此请确保您运行的是该版本或更高版本。或者,如果您无法升级,您可以降级到 Node.js v12,但我们建议尽可能升级。

    1. 琐碎:-确保您的项目文件夹所在的目录不属于root。

    对于那些在 windows 环境下运行时可能遇到此问题的人,您可以尝试在从代码启动 chromium 时传递 ignoreDefaultArgs: ['--disable-extensions'] 选项,即 p>

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

    这将停用 puppeteer 的默认行为,以禁用 chromium/chrome 通常使用的任何扩展。

    Linux 和 MACOS 使用

    导致此错误的问题

    UnhandledPromiseRejectionWarning:错误:无法启动浏览器进程! 加载共享库时出错:libnss3.so: cannot open shared object file: No such file or directory TROUBLESHOOTING

    大部分但并非所有时间都是由最新版本中所需的缺失引起的。好消息是您可以轻松检查导致崩溃的缺失 chrome 依赖项。

    • 确保您位于项目的根文件夹中
    • 导航到 node_modules 文件夹
    • 导航到安装 puppeteer chrome linux 工具的文件夹

    cd /project_folder/node_modules/puppeteer/.local-chromium// 将 blockqoutes 替换为路径中显示的目录 ls at /.local-chromium 以检查目录名称

    • 在最后一个目录 运行下面的命令来检查缺少的依赖项

      ldd 铬 | grep 不

    如果您发现任何缺少的依赖项,请运行此命令以安装所有内容并重新启动您的应用程序。

    sudo apt-get install ca-certificates fonts-liberation libappindicator3-1 libasound2 libatk-bridge2.0-0 libatk1.0-0 libc6 libcairo2 libcups2 libdbus-1-3 libexpat1 libfontconfig1 libgbm1 libgcc1 libglib2.0-0 libgtk-3-0 libnspr4 libnss3 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 lsb-release wget xdg-utils
    

    瞧!!一切都应该修复

    【讨论】:

    • 安装依赖项对我有用。谢谢老哥!
    • 谢谢你,安德鲁,这很有效!!
    【解决方案2】:

    尝试添加jontewks/puppeteer-heroku-buildpack buildpack。添加这个 buildpack 对我有用。

    heroku buildpacks:add jontewks/puppeteer
    

    也不要忘记通过提交触发构建。

    【讨论】:

    • 截至 2021 年 12 月为我工作
    • 该死的,这破坏了我的 nodejs 应用程序 - 新的提交不再可能:´´´警告:多个默认构建包报告了处理此应用程序的能力。下面列表中的第一个 buildpack 将被使用´´´
    【解决方案3】:

    对于在 aws lambda 上遇到 libnss3.so: cannot open shared object file 问题的任何人。对我来说,解决方法是将 chrome-aws-lambdapuppeteer-core 都提升到 >= 6.0.0 - 这是运行 runtime: nodejs14.x 时所需的最低版本。

    【讨论】:

    • 在将版本升级到 >= 6.0.0 之后,您可以在 Lambda 上运行它吗? zip 文件没有超过 lambda 大小限制吗?
    【解决方案4】:

    感谢@andrew-mititi 和他的awesome answer,我能够在我的环境中解决问题,即Docker FROM node:16(即Debian GNU/Linux 10) + puppeteer v13(不是 puppeteer-core)。我做了以下步骤:

    • 构建并运行 Docker 容器:make build &amp; docker run
    • 转到容器:docker exec -it CONTAINER_ID /bin/bash
    • 找到 pptr chromium 文件夹:ls project_folder/node_modules/puppeteer/.local-chromium,在我的情况下是 linux-961656
    • 找到下一个文件夹:ls project_folder/node_modules/puppeteer/.local-chromium/linux-961656,它是chrome-linux
    • 在该文件夹中运行缺失依赖项脚本:ldd node_modules/puppeteer/.local-chromium/linux-961656/chrome-linux/chrome | grep not,它应该显示类似
        libnss3.so => not found
        libnssutil3.so => not found
        libsmime3.so => not found
        libnspr4.so => not found
        libatk-1.0.so.0 => not found
        libatk-bridge-2.0.so.0 => not found
        libcups.so.2 => not found
        libdrm.so.2 => not found
        libdbus-1.so.3 => not found
        libxkbcommon.so.0 => not found
        libXcomposite.so.1 => not found
        libXdamage.so.1 => not found
        libXfixes.so.3 => not found
        libXrandr.so.2 => not found
        libgbm.so.1 => not found
        libasound.so.2 => not found
        libatspi.so.0 => not found
    

    最后一步是将此列表转换为正确的 apt-get 命令,并在安装项目的 npm 依赖项后将其添加到 Docker make-script 中。在我的情况下是:

    RUN apt-get update && apt-get install -y libnss3 libnspr4 libatk1.0-0 libatk-bridge2.0-0 libcups2 libdrm2 libxkbcommon0 libxcomposite1 libxdamage1 libxfixes3 libxrandr2 libgbm1 libasound2
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-05-22
      • 2020-11-18
      • 2019-11-19
      • 1970-01-01
      • 2015-06-07
      • 2017-01-20
      • 2019-02-16
      • 2015-10-28
      相关资源
      最近更新 更多