全局配置了npm国内镜像chromedriver仍然无法下载
✅ 原始问题
root@523fc30feed3:/system# pnpm config set registry https://registry.npmmirror.com
root@523fc30feed3:/system# pnpm install --frozen-lockfile
Lockfile is up to date, resolution step is skipped
Packages: +1395
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Downloading selenium-server@3.141.59: 9.55 MB/9.55 MB, done
Progress: resolved 1395, reused 0, downloaded 1382, added 1394
WARN GET https://registry.npmmirror.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz error (ERR_SOCKET_TIMEOUT). Will retry in 10 seconds. 2 retries left.
Progress: resolved 1395, reused 0, downloaded 1383, added 1395, done
node_modules/.pnpm/core-js@2.6.12/node_modules/core-js: Running postinstall script, done in 94ms
node_modules/.pnpm/es5-ext@0.10.62/node_modules/es5-ext: Running postinstall script, done in 86ms
node_modules/.pnpm/chromedriver@136.0.3/node_modules/chromedriver: Running install script, failed in 2m 10.7s
.../node_modules/chromedriver install$ node install.js
│ Saving to file: /system/node_modules/.pnpm/chromedriver@136.0.3/node_modules/chromedriver/136.0.7103.113/chromedriver/chromedriver-linux64.zip
│ Current existing ChromeDriver binary is unavailable, proceeding with download and extraction.
│ Downloading from file: https://storage.googleapis.com/chrome-for-testing-public/136.0.7103.113/linux64/chromedriver-linux64.zip
│ Error with http(s) request:
│ AggregateError
│ Error data:
└─ Failed in 2m 10.7s at /system/node_modules/.pnpm/chromedriver@136.0.3/node_modules/chromedriver
ELIFECYCLE Command failed with exit code 1.
为什么我设置了国内镜像.还是下载不下来这个chromedriver,国内镜像地址是:https://registry.npmmirror.com/binary.html?path=chrome-for-testing/136.0.7103.113/
✅ 原因
你已经设置了国内镜像(https://registry.npmmirror.com),但在安装 chromedriver@136.0.3 时仍然尝试从 Google 的官方地址(https://storage.googleapis.com/chrome-for-testing-public/...)下载文件,这是因为:
chromedriver是一个二进制包,其下载地址是由它的install.js脚本硬编码决定的,而不是由 npm registry 控制的。
✅ 问题根本原因
即使你使用了国内镜像(如 npmmirror.com)来加速 npm package 的依赖下载,但 chromedriver 这类包在安装时会执行自己的 install.js 脚本,这个脚本中写死了要从 Google 的 CDN 下载对应的二进制文件:
https://storage.googleapis.com/chrome-for-testing-public/...
而中国网络环境下,访问 Google 的 CDN 是被屏蔽的,所以导致下载失败。
✅ 解决方案一:使用 CHROMEDRIVER_CUSTOM_VERSION 指定备用下载源(推荐)
你可以通过设置环境变量告诉 chromedriver 使用一个国内可访问的替代 URL 来下载二进制文件。
步骤如下:
# 设置 chromedriver 使用的版本号(与当前版本匹配)
export CHROMEDRIVER_VERSION=136.0.7103.113
# 设置自定义下载地址(使用 npmmirror 提供的镜像)
export CHROMEDRIVER_DOWNLOAD_URL=https://npmmirror.com/mirrors/chromedriver
# 安装 chromedriver
pnpm install chromedriver
或者直接一条命令:
CHROMEDRIVER_VERSION=136.0.7103.113 \
CHROMEDRIVER_DOWNLOAD_URL=https://npmmirror.com/mirrors/chromedriver \
pnpm install chromedriver
✅ 解决方案二:手动下载 + 设置缓存路径(适合网络极差或离线环境)
步骤如下:
-
在可以访问外网的机器上手动下载:
https://npmmirror.com/mirrors/chromedriver/136.0.7103.113/chromedriver_linux64.zip -
将它上传到你的服务器或容器中,比如
/tmp/chromedriver_linux64.zip -
然后设置缓存路径让
chromedriver不再重新下载:
mkdir -p ~/.chromedriver/
cp /tmp/chromedriver_linux64.zip ~/.chromedriver/
CHROMEDRIVER_SKIP_DOWNLOAD=true pnpm install chromedriver
✅ 补充说明:npmmirror 支持哪些镜像?
chromedriver: https://npmmirror.com/mirrors/chromedrivergeckodriver: https://npmmirror.com/mirrors/geckodriverselenium: https://npmmirror.com/mirrors/seleniumelectron: https://npmmirror.com/mirrors/electron
✅ 最佳实践建议(推荐加入 CI/CD 或 Dockerfile)
CHROMEDRIVER_VERSION=136.0.7103.113 \
CHROMEDRIVER_DOWNLOAD_URL=https://npmmirror.com/mirrors/chromedriver \
pnpm config set registry https://registry.npmmirror.com \
&& pnpm install --frozen-lockfile
✅ 总结
| 问题 | 原因 | 解法 |
|---|---|---|
chromedriver 无法下载 | 下载地址是 Google CDN,不可访问 | 设置 CHROMEDRIVER_DOWNLOAD_URL 使用国内镜像 |
| 即使用了国内 registry 也没用 | 因为 binary 下载不由 registry 控制 | 手动指定下载源或使用本地缓存 |
如果你还有其它类似的包(如 geckodriver, electron, selenium-server)遇到类似问题,也可以告诉我,我可以提供对应的解决方案。
✅ 验证
root@523fc30feed3:/system# # 设置 chromedriver 使用的版本号(与当前版本匹配)
export CHROMEDRIVER_VERSION=136.0.7103.113
# 设置自定义下载地址(使用 npmmirror 提供的镜像)
export CHROMEDRIVER_DOWNLOAD_URL=https://npmmirror.com/mirrors/chromedriver
# 安装 chromedriver
pnpm install chromedriver
WARN deprecated html-webpack-plugin@2.30.1: out of support
WARN deprecated extract-text-webpack-plugin@3.0.2: Deprecated. Please use https://github.com/webpack-contrib/mini-css-extract-plugin
WARN deprecated rimraf@2.7.1: Rimraf versions prior to v4 are no longer supported
WARN deprecated axios@0.19.2: Critical security vulnerability fixed in v0.21.1. For more information, see https://github.com/axios/axios/pull/3410
WARN deprecated vue@2.7.10: Vue 2 has reached EOL and is no longer actively maintained. See https://v2.vuejs.org/eol/ for more details.
WARN 43 deprecated subdependencies found: abab@2.0.6, acorn-dynamic-import@2.0.2, bfj-node4@5.3.1, browserslist@1.7.7, browserslist@2.11.3, consolidate@0.14.5, copy-concurrently@1.0.5, core-js@2.6.12, domexception@1.0.1, flatten@1.0.3, fs-write-stream-atomic@1.0.10, fsevents@1.2.13, glob@7.0.5, glob@7.2.3, glob@8.0.3, har-validator@5.1.5, inflight@1.0.6, is-accessor-descriptor@0.1.6, is-accessor-descriptor@1.0.0, is-data-descriptor@0.1.4, is-data-descriptor@1.0.0, json3@3.3.2, left-pad@1.3.0, lodash.clone@3.0.3, lodash.isequal@4.5.0, mkdirp@0.5.1, move-concurrently@1.0.1, q@1.4.1, querystring@0.2.0, request-promise-native@1.0.9, request@2.88.2, resolve-url@0.2.1, sane@2.5.2, socks@1.1.10, source-map-resolve@0.5.3, source-map-url@0.4.1, stable@0.1.8, svgo@0.7.2, svgo@1.3.2, uglify-es@3.3.9, urix@0.1.0, uuid@3.4.0, w3c-hr-time@1.0.2
Packages: +1395
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Progress: resolved 1387, reused 1383, downloaded 2, added 0, done
node_modules/.pnpm/chromedriver@136.0.3/node_modules/chromedriver: Running install script, done in 9.7s
node_modules/.pnpm/uglifyjs-webpack-plugin@0.4.6_webpack@3.12.0/node_modules/uglifyjs-webpack-plugin: Running postinstall script, done in 50ms
WARN Issues with peer dependencies found
.
└─┬ vue-loader 13.7.3
└── ✕ unmet peer webpack@"^4.1.0 || ^5.0.0-0": found 3.12.0
Done in 13.8s using pnpm v10.12.1