解决 puppeteer 下载失败 Failed to download Chromium r515411
问题
很久没 npm i puppeteer 了,最近没办法科学上网,下载失败了,尝试使用了 cnpm 安装,也是下载失败
可能会遇到这样的错误
puppeteer@0.13.0 install /Users/guipeng/Desktop/ldl/puppeteer/node_modules/puppeteer
node install.js
ERROR: Failed to download Chromium r515411! Set "PUPPETEER_SKIP_CHROMIUM_DOWNLOAD" env variable to skip download.
{ Error: read ETIMEDOUT
at _errnoException (util.js:1041:11)
at TLSWrap.onread (net.js:606:25) code: 'ETIMEDOUT', errno: 'ETIMEDOUT', syscall: 'read' }
npm WARN enoent ENOENT: no such file or directory, open '/Users/guipeng/Desktop/ldl/puppeteer/package.json'
或者
npm ERR! code 1
npm ERR! path E:\项目-临时\test_install_puppeteer\node_modules\puppeteer
npm ERR! command failed
npm ERR! command C:\WINDOWS\system32\cmd.exe /d /s /c node install.mjs
npm ERR! PUPPETEER_DOWNLOAD_HOST is deprecated. Use PUPPETEER_DOWNLOAD_BASE_URL instead.
npm ERR! ERROR: Failed to set up Chrome r119.0.6045.105! Set "PUPPETEER_SKIP_DOWNLOAD" env variable to skip download.
npm ERR! Error: Download failed: server returned code 404. URL: https://cdn.npmmirror.com/binaries/119.0.6045.105/win64/chrome-win64.zip
npm ERR! at file:///E:/%E9%A1%B9%E7%9B%AE-%E4%B8%B4%E6%97%B6/test_install_puppeteer/node_modules/@puppeteer/browsers/lib/esm/httpUtil.js:74:31
npm ERR! at ClientRequest.requestCallback (file:///E:/%E9%A1%B9%E7%9B%AE-%E4%B8%B4%E6%97%B6/test_install_puppeteer/node_modules/@puppeteer/browsers/lib/esm/httpUtil.js:52:13)
npm ERR! at Object.onceWrapper (node:events:629:26)
npm ERR! at ClientRequest.emit (node:events:514:28)
npm ERR! at HTTPParser.parserOnIncomingClient (node:_http_client:693:27)
npm ERR! at HTTPParser.parserOnHeadersComplete (node:_http_common:119:17)
npm ERR! at TLSSocket.socketOnData (node:_http_client:535:22)
npm ERR! at TLSSocket.emit (node:events:514:28)
npm ERR! at addChunk (node:internal/streams/readable:545:12)
npm ERR! at readableAddChunkPushByteMode (node:internal/streams/readable:495:3)
解决puppeteer下载失败
遇见问题只能老老实实解决问题,既然没办法科学上网,那么只能是通过国内镜像源下载,但 cnpm不行。找了下原因:在 github puppeteer 项目中有这样一个 issues:https://github.com/puppeteer/puppeteer/issues/1597
按照 vc1 所说的可以解决,贴一下有用的信息:
2023 update:
npm config set registry https://registry.npmmirror.com
npm config set registry https://mirrors.cloud.tencent.com/npm/
对于Puppeteer20.1以上的版本,可以通过以下方式使用国产镜像源:
puppeteer-download-base-url="https://cdn.npmmirror.com/binaries/chrome-for-testing"
19以下版本还是原来的方式:
puppeteer-download-host="https://cdn.npmmirror.com/binaries"
-
解决方法是首先配置配置npm镜像源,上面列了两个镜像源,一个 tencent,一个是淘宝团队的,都可以用。
-
然后是配置 puppeteer 的下载地址,在19以下的版本,puppeteer 关联的 Chromium 的下载地址可以通过 puppeteer-download-host 进行配置,在 Puppeteer20.1 以上的版本则需要通过 PUPPETEER_DOWNLOAD_BASE_URL 进行配置,上面的报错信息中也给到了这个提示。
-
在项目根目录中创建
.npmrc
文件,在文件中配置:# 19以下版本 PUPPETEER_DOWNLOAD_HOST = https://cdn.npmmirror.com/binaries # 20以上的版本 PUPPETEER_DOWNLOAD_BASE_URL = https://cdn.npmmirror.com/binaries/chrome-for-testing
-
然后删除node_modules重新下载即可
-
如果还是不行试一下sudo npm install puppeteer --unsafe-perm=true --allow-root
贴一下 Puppeteer 是啥
Puppeteer 是一个 Node.js 库,它提供了一个高级 API 来通过 开发工具协议 控制 Chrome/Chromium。 Puppeteer 默认以 无头 模式运行,但可以配置为在完整 (“有头”) Chrome/Chromium 中运行。
总结
puppeteer 的下载问题不在自身,而在于其联动下载的 Chromium,Chromium 不能下载的原因众所周知,能科学上网其实也没这么麻烦了,如不能科学上网就需要找镜像了,配置 Chromium 的下载地址后完美解决。
附一个 Chromium 查看所有命令配置地址
https://peter.sh/experiments/chromium-command-line-switches/