当我尝试访问我上传到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;
}
7条答案
按热度按时间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选项,即
这将使 puppet 师的默认行为从禁用任何扩展通常使用的 chrome / chrome 。
导致此错误的问题
未处理承诺拒绝警告:错误:无法启动浏览器进程!加载共享库时出错:www.example.com:无法打开共享对象文件:libnss3.so: cannot open shared object file: No such file or directory TROUBLESHOOTING
大多数但不是所有的时候都是由于缺少最新版本中所需的依赖项而导致的。好的方面是你可以很容易地检查导致崩溃的缺少的chrome依赖项。
ldd chrome |grep未
如果您看到任何缺少的依赖项,请运行此命令以安装所有内容并重新启动应用程序。
瞧!!一切都应该修好了
0x6upsns2#
感谢@ andrew-miti和他的awesome answer,我能够在我的环境中解决这个问题,这个环境是Docker****FROM node:16(Debian GNU/Linux 10)+puppeteer v13(不是puppeteer-core)。
make build & docker run
docker exec -it CONTAINER_ID /bin/bash
ls project_folder/node_modules/puppeteer/.local-chromium
,在我的例子中是linux-961656
ldd node_modules/puppeteer/.local-chromium/linux-961656/chrome-linux/chrome | grep not
,它应该显示如下内容最后一步是将这个列表转换成正确的apt-get命令,并在安装项目的npm依赖项后将其添加到Docker make-script中。
yptwkmov3#
对于实际使用Vercel而非AWS的用户:
问题确实出在应用的Node.js版本上。您必须使用Node.js 14而不是16,就像前面提到的所有其他答案一样。要在Vercel上执行此操作,请执行两项操作:
1.转到项目的“设置”页面,在“常规”选项卡的“Node.js版本”部分:选择
14.x
1.在应用的
package.json
中的engines
下,设置"node": "^14"
参考:Vercel文档
rjjhvcjd4#
对于任何在aws lambda上有
libnss3.so: cannot open shared object file
问题的人来说,对我来说,修复是将chrome-aws-lambda
和puppeteer-core
都提升到版本〉= 6.0.0 -这是运行runtime: nodejs14.x
时所需的最低版本。afdcj2ne5#
尝试添加jontewks/puppeteer-heroku-buildpack构建包。添加此构建包对我很有效。
也不要忘记用提交触发构建。
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
更改为重新部署
ubof19bj7#
我在使用linux服务器时遇到了这个问题,你应该使用下面的命令安装缺少的依赖项,然后重新启动你的nodejs服务器。