提问人:Moses Schwartz 提问时间:1/2/2019 最后编辑:Moses Schwartz 更新时间:10/11/2023 访问量:99279
Puppeteer 错误:未下载 Chromium 修订版
Puppeteer Error: Chromium revision is not downloaded
问:
我按照文档中的说明使用,但出现以下错误:npm i puppeteer
(节点:2066)UnhandledPromiseRejectionWarning:错误:未下载 Chromium 修订版。运行“npm install”或“yarn install” 在 Launcher.launch
当我尝试这个例子时(也来自文档):
const puppeteer = require('puppeteer');
(async () => {
const browser = await puppeteer.launch();
const page = await browser.newPage();
await page.goto('https://example.com');
await page.screenshot({path: 'example.png'});
await browser.close();
})();
同样在文档中:
注意:安装 Puppeteer 时,它会下载最新版本的 Chromium(~170MB Mac、~282MB Linux、~280MB Win),保证可以与 API 配合使用。
任何帮助将不胜感激。
答:
经过多次尝试,我终于在这里找到了答案:
sudo npm install puppeteer --unsafe-perm=true --allow-root
正如@vsync所指出的,这仅适用于 linux
评论
我是这样解决的:
const browser = await puppeteer.launch({ executablePath: "./node_modules/puppeteer/.local-chromium/win64-656675/chrome-win/chrome.exe"});
请注意路径中的 win64-656675,如果您使用的是其他操作系统,则需要指向相应的文件夹。
Puppeteer 版本:1.16.0
对于 Linux:
1- 您必须使用以下命令安装 Chromium 浏览器:
$sudo apt install -y chromium-browser
2- 您必须使用以下命令获取 Chromium 的可执行路径:
$which chromium-browser
3-将可执行文件路径作为启动函数的参数:
const puppeteer = require('puppeteer-core');
(async () => {
const browser = await puppeteer.launch({
executablePath: '/usr/bin/chromium-browser',
headless: false
});
const page = await browser.newPage();
await page.goto('https://google.com');
await page.screenshot({path: 'example.png'});
await browser.close();
})();
确认此处提出的解决方案几乎可以工作。这是我的设置。Ubuntu 16.
从命令行安装 chromium 浏览器,然后:
const browser = await puppeteer.launch({
executablePath: "/usr/bin/chromium-browser",
args: ['--no-sandbox']
});
评论
如果有人仍然再次面临这个问题。然后转到node_modules文件夹,然后进入 puppeteer 并在 lib 中找到启动.js打开相同的文件并搜索 executablepath,然后将其 null 值更改为您的 chrome 或 chromium 所需路径。
对我来说,路径如下:
/home/Nightwing/node_modules/puppeteer/Launcher.js
就我而言,在删除node_modules文件夹并package-lock.json文件并再次运行 npm install 后,它就可以工作了。
在经过大量搜索并尝试大多数建议后,我只能通过手动安装 Chromium 来解决这个问题:
node node_modules/puppeteer/install.js
为确保正确安装较新版本,我建议检查目录 node_modules/puppeteer。如果您发现安装文件的扩展名是 .mjs,请相应地使用它。
node node_modules/puppeteer/install.mjs
评论
puppeteer-core
puppeteer
unset PUPPETEER_SKIP_CHROMIUM_DOWNLOAD && node ./node_modules/puppeteer/install.js
默认情况下,该模块将运行其安装脚本 ()。但是,就我而言,我在我的文件中启用了它,因此它从未执行过。puppeteer
node install.js
ignore-scripts=true
~/.npmrc
在这种情况下,您必须自己运行以下命令:
node node_modules/puppeteer/install.js
检查:现在应该存在。node_modules/puppeteer/.local-chromium/linux-<your_chrome_version>/
评论
npn i puppeteer
这是因为您的系统上没有安装 Chrome。
用于安装 Chrome
sudo apt install -y chromium-browser
然后添加一个可执行路径。
const browser = await puppeteer.launch({
executablePath: '/usr/bin/chromium-browser',
headless: false
});
评论
经过几个小时的谷歌搜索和阅读许多评论和讨论,尝试了几种方法,最终我用这个解决方案解决了问题。
OS: Windows 10
node: 14.16.1
puppeteer: 7.0.1
我在文件夹中看到,发现没有任何文件夹,所以我手动创建了这个路径node_modules/puppeteer/
.local-chromium
node_modules/puppeteer/.local-chromium/win64-<your_chrome_version>/chrome-win
然后我从这个链接(your_chrome_version)下载了chromium浏览器,并将其复制到路径中,以便您需要在此网址中查看chrome.exe
node_modules/puppeteer/.local-chromium/win64-<your_chrome_version>/chrome-win/chrome.exe
就是这样。它对我有用。
评论
在 Windows 上可以作为全局安装工作
npm i puppeteer --g
这是我解决它的方法
const browser = await puppeteer.launch({
headless: true,
ignoreDefaultArgs: ['--disable-extensions'], // this made it work for now
});
通过简单地完成伎俩ignoreDefaultArgs: ['--disable-extensions']
来源: 疑难解答
我只是从 Dockerfile 中删除了变量,这对我有用PUPPETEER_SKIP_CHROMIUM_DOWNLOAD
Amr Hussein 回答中的第三点帮助我解决了一个类似的问题,每当我在项目目录之外执行脚本时,我都会遇到以下错误:
throw new Error(`Could not find Chromium (rev. ${this.puppeteer.browserRevision})
Error: Could not find Chromium (rev. 1083080).
我将在最后一步使用它。
但是,让我们从头开始:
如果您安装了 ,Chrome 将自动下载。但建议您使用配置文件更改 Chrome 的默认位置。puppeteer
创建应安装的项目目录
puppeteer
进入此目录。
如果是 ,则更改为系统的普通用户。
root
按照文档中的建议,创建一个名为并粘贴以下代码的文件:
.puppeteerrc.cjs
const {join} = require('path'); /** * @type {import("puppeteer").Configuration} */ module.exports = { // Changes the cache location for Puppeteer. cacheDirectory: join(__dirname, '.cache', 'puppeteer'), };
这会将 Chrome 的默认位置更改为您的项目目录。
现在 Chrome 将存储在项目目录中的目录中。
.cache
安装:
puppeteer
在这里,您基本上可以点击直到初始化完成。
enter
npm init
npm i puppeteer
在 Unix 上,请确保安装了所有必要的依赖项。
您可以在“疑难解答”页面上找到该列表。
在项目目录的目录中找到并找出完整路径。
Chrome
.cache
将 Chrome 可执行文件添加到脚本中:
executablePath:
const browser = await puppeteer.launch({ executablePath: '/home/drake/my_puppeteer_project/.cache/puppeteer/chrome/linux-1083080/chrome-linux/chrome' });
用executablePath()
import { executablePath } from "puppeteer";
const options: PuppeteerLaunchOptions = {
...
executablePath: executablePath(),
};
await puppeteer.launch(options);
从 Dockerfile 中删除
ENV PUPPETEER_SKIP_CHROMIUM_DOWNLOAD true
其他答案都不适合我。
事实证明,如果您坐在 VPN 上,则可以阻止 Chromium 下载 URL (https://commondatastorage.googleapis.com/chromium-browser-snapshots/index.html)。如果是这种情况,安装脚本 () 会说它已成功下载到,但它所做的一切都会创建一个空文件夹。node_modules/puppeteer/install.js
~/.cache/puppeteer/chrome/<version>
我的解决方案是使用我的 VPN 切换到不同的位置。
以下是 Puppeteer 存储库中此问题的状态:https://github.com/puppeteer/puppeteer/issues/10013
评论
npm install puppeteer
node node_modules/puppeteer/install.js
/root/.cache/chrome/linux-1095492