next.js /tmp/ chrome :加载共享库时出错:www.example.com:无法打开共享对象文件:libnss3.so: cannot open shared object file: No such file or directory Vercel

9cbw7uwe  于 2023-02-04  发布在  其他
关注(0)|答案(7)|浏览(407)

当我尝试访问我上传到vercel服务器上的API时,出现此错误。
有人犯过同样的错误吗?
当我在本地运行它时,它工作得很好。
2021年2月15日19:38:59.218Z 0109b575-a2e7 - 478e-aefe-aa3335b5b6b8错误错误:启动浏览器进程失败!/tmp/chromium:加载共享库时出错:www.example.com:无法打开共享对象文件:libnss3.sohttps://github.com/puppeteer/puppeteer/blob/main/docs/troubleshooting.md位于onClose(/var/任务/节点模块/操纵者核心/库/cjs/操纵者/节点/浏览器运行器. js:193:20)位于接口(/var/任务/节点模块/操纵者核心/库/cjs/操纵者/节点/浏览器运行器. js:183:68)位于接口。发出(事件. js:327:22)位于接口。关闭(读取行. js:424:8)位于Socket. onend(读取行. js:202:10)位于Socket. emit(事件. js:327:22)位于endReadableNT(内部/流/可读. js:1327:12)位于进程提示和拒绝(内部/进程/任务队列. js:80:21) No such file or directory TROUBLESHOOTING: https://github.com/puppeteer/puppeteer/blob/main/docs/troubleshooting.md at onClose (/var/task/node_modules/puppeteer-core/lib/cjs/puppeteer/node/BrowserRunner.js:193:20) at Interface. (/var/task/node_modules/puppeteer-core/lib/cjs/puppeteer/node/BrowserRunner.js:183:68) at Interface.emit (events.js:327:22) at Interface.close (readline.js:424:8) at Socket.onend (readline.js:202:10) at Socket.emit (events.js:327:22) at endReadableNT (internal/streams/readable.js:1327:12) at 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;
}
eyh26e7m

eyh26e7m1#

我遇到了同样的问题,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.
Trivial:-* 确保项目文件夹所在的目录不是root所有。
对于那些在Windows环境下运行时可能遇到此问题的人,您可以尝试传递**ignoreDefaultArgs:['--disable-extensions']**从代码启动时使用chromium选项,即

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

这将使 puppet 师的默认行为从禁用任何扩展通常使用的 chrome / chrome 。

    • Linux和MAcOS使用**

导致此错误的问题
未处理承诺拒绝警告:错误:无法启动浏览器进程!加载共享库时出错:www.example.com:无法打开共享对象文件:libnss3.so: cannot open shared object file: No such file or directory TROUBLESHOOTING
大多数但不是所有的时候都是由于缺少最新版本中所需的依赖项而导致的。好的方面是你可以很容易地检查导致崩溃的缺少的chrome依赖项。

  • 确保位于项目的根文件夹中
  • 导航到node_modules文件夹
  • 导航到安装puppeteer chrome Linux工具的文件夹
  • cd/项目文件夹/节点模块/ puppet 师/.本地chromium/* linux-某个数字*/chrome-linux
    • 将 * linux-some number * 替换为ls将输出的任何内容**
  • ls位于/. local-chromium以检查目录名
  • 在最后一个目录**[chrome-linux]**中,运行以下命令以检查缺少的依赖项

ldd chrome |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

瞧!!一切都应该修好了

0x6upsns

0x6upsns2#

感谢@ andrew-miti和他的awesome answer,我能够在我的环境中解决这个问题,这个环境是Docker****FROM node:16(Debian GNU/Linux 10)+puppeteer v13(不是puppeteer-core)。

  • 构建并运行Docker容器:make build & docker run
  • 转到容器:docker exec -it CONTAINER_ID /bin/bash
  • 查找pptr chrome 文件夹:ls project_folder/node_modules/puppeteer/.local-chromium,在我的例子中是linux-961656
  • 查找下一个文件夹:是的,是的
  • 在该文件夹中运行缺少依赖关系脚本: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
yptwkmov

yptwkmov3#

对于实际使用Vercel而非AWS的用户:
问题确实出在应用的Node.js版本上。您必须使用Node.js 14而不是16,就像前面提到的所有其他答案一样。要在Vercel上执行此操作,请执行两项操作:
1.转到项目的“设置”页面,在“常规”选项卡的“Node.js版本”部分:选择14.x

1.在应用的package.json中的engines下,设置"node": "^14"

// package.json

{
  ...
  "engines": {
    "node": "^14"
  }
  ...
}

参考:Vercel文档

rjjhvcjd

rjjhvcjd4#

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

afdcj2ne

afdcj2ne5#

尝试添加jontewks/puppeteer-heroku-buildpack构建包。添加此构建包对我很有效。

heroku buildpacks:add jontewks/puppeteer

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

wwodge7n

wwodge7n6#

我没有注意到我的serverless.yml正在运行:nodejs16.x。当我把它改成nodejs14.x时,我能够在AWS Lambda上运行而没有这个错误。

错误

"/tmp/ chrome :加载共享库时出错:www.example.com:无法打开共享对象文件:libnss3.so: cannot open shared object file: No such file or directory"

修复

serverless.yml更改为

provider:
  name: aws
  runtime: nodejs14.x

重新部署

ubof19bj

ubof19bj7#

我在使用linux服务器时遇到了这个问题,你应该使用下面的命令安装缺少的依赖项,然后重新启动你的nodejs服务器。

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

相关问题