Puppeteer 错误:未下载 Chromium 修订版

Puppeteer Error: Chromium revision is not downloaded

提问人:Moses Schwartz 提问时间:1/2/2019 最后编辑:Moses Schwartz 更新时间:10/11/2023 访问量:99279

问:

我按照文档中的说明使用,但出现以下错误: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 配合使用。

任何帮助将不胜感激。

节点 .js npm 木偶师

评论

0赞 InfiniteStack 2/20/2023
有趣。我在以前的 Ubuntu 设置中遇到了类似的问题,chromium 没有下载。现在,我正在新服务器上安装,当我 ,它没有显示它在安装过程中正在下载 Chrome。但是,运行所述 Chromium 已经在文件夹中。npm install puppeteernode node_modules/puppeteer/install.js/root/.cache/chrome/linux-1095492

答:

51赞 Moses Schwartz 1/2/2019 #1

经过多次尝试,我终于在这里找到了答案:

sudo npm install puppeteer --unsafe-perm=true --allow-root

正如@vsync所指出的,这仅适用于 linux

评论

2赞 vsync 7/9/2019
这个答案是专门针对 linux 的,这使得它对许多开发人员毫无用处,因为 Windows 操作系统仍然非常占主导地位
6赞 Anastasios Moraitis 8/29/2019
但是 ubuntu bash for windows 是让它有用的原因
1赞 Moses Schwartz 1/16/2020
@tramada仍然是 Linux ;)
0赞 eemelipa 5/21/2021
npm v7 不再具有或等效 github.com/npm/feedback/discussions/121--unsafe-perm
3赞 Roy.B 5/21/2019 #2

我是这样解决的

const browser = await puppeteer.launch({ executablePath: "./node_modules/puppeteer/.local-chromium/win64-656675/chrome-win/chrome.exe"});

请注意路径中的 win64-656675,如果您使用的是其他操作系统,则需要指向相应的文件夹。

Puppeteer 版本:1.16.0

16赞 Amr Hussein 10/5/2019 #3

对于 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();
    })();
7赞 f1vlad 12/24/2019 #4

确认此处提出的解决方案几乎可以工作。这是我的设置。Ubuntu 16.

从命令行安装 chromium 浏览器,然后:

    const browser = await puppeteer.launch({
        executablePath: "/usr/bin/chromium-browser",
        args: ['--no-sandbox']
    });

评论

0赞 smoore4 4/10/2020
这很有帮助。看完这篇文章终于有了些进展!
1赞 Rahul9989 1/8/2020 #5

如果有人仍然再次面临这个问题。然后转到node_modules文件夹,然后进入 puppeteer 并在 lib 中找到启动.js打开相同的文件并搜索 executablepath,然后将其 null 值更改为您的 chrome 或 chromium 所需路径。

对我来说,路径如下:

/home/Nightwing/node_modules/puppeteer/Launcher.js

5赞 Vikash Gupta 3/12/2020 #6

就我而言,在删除node_modules文件夹并package-lock.json文件并再次运行 npm install 后,它就可以工作了。

149赞 Afshin Ghazi 3/25/2020 #7

在经过大量搜索并尝试大多数建议后,我只能通过手动安装 Chromium 来解决这个问题:

node node_modules/puppeteer/install.js

为确保正确安装较新版本,我建议检查目录 node_modules/puppeteer。如果您发现安装文件的扩展名是 .mjs,请相应地使用它。

node node_modules/puppeteer/install.mjs

评论

2赞 Mike Smith 4/28/2021
我的本地模块有,但解决方案的工作方式相同。puppeteer-corepuppeteer
0赞 pxwise 8/3/2022
这适用于我的 mac,但我还需要取消设置 env var。unset PUPPETEER_SKIP_CHROMIUM_DOWNLOAD && node ./node_modules/puppeteer/install.js
47赞 Philipp Claßen 8/21/2020 #8

默认情况下,该模块将运行其安装脚本 ()。但是,就我而言,我在我的文件中启用了它,因此它从未执行过。puppeteernode install.jsignore-scripts=true~/.npmrc

在这种情况下,您必须自己运行以下命令:

node node_modules/puppeteer/install.js

检查:现在应该存在。node_modules/puppeteer/.local-chromium/linux-<your_chrome_version>/

评论

0赞 dearsina 1/31/2023
该命令对我有用,但我没有将忽略脚本设置为 true。我做了一个直接的 npm 安装。奇怪!
0赞 James 7/4/2023
我不得不清理一些磁盘空间,并且删除了 .cache 文件夹。运行时未重新运行安装脚本。手动运行 dl 到 .cache 文件夹,我的项目再次运行。npn i puppeteer
3赞 abhishek Tomer 3/16/2021 #9

这是因为您的系统上没有安装 Chrome。

用于安装 Chrome

sudo apt install -y chromium-browser

然后添加一个可执行路径。

const browser = await puppeteer.launch({
  executablePath: '/usr/bin/chromium-browser',
  headless: false
});

评论

0赞 James 7/4/2023
“注意:当您安装 Puppeteer 时,它会下载最新版本的 Chromium(~170MB Mac、~282MB Linux、~280MB Win),该版本保证可以与 API 一起使用”,因此您需要确保您 dl 的 Chromium 版本可以与您的 Puppeteer 版本一起使用。
3赞 Hamid Shoja 4/21/2021 #10

经过几个小时的谷歌搜索和阅读许多评论和讨论,尝试了几种方法,最终我用这个解决方案解决了问题。

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

就是这样。它对我有用。

评论

0赞 Hamid Shoja 4/21/2021
如果文件夹存在,您可以检查路径和文件,也可以重命名它并执行这些步骤。
0赞 Edward Mamani Flores 9/21/2021 #11

在 Windows 上可以作为全局安装工作

npm i puppeteer --g
0赞 Mohamed 12/20/2021 #12

这是我解决它的方法

  const browser = await puppeteer.launch({
      headless: true,
      ignoreDefaultArgs: ['--disable-extensions'], // this made it work for now
  });

通过简单地完成伎俩ignoreDefaultArgs: ['--disable-extensions']

来源: 疑难解答

0赞 Jaime Herrera 11/11/2022 #13

我只是从 Dockerfile 中删除了变量,这对我有用PUPPETEER_SKIP_CHROMIUM_DOWNLOAD

0赞 drake7 2/8/2023 #14

Amr Hussein 回答中的第三点帮助我解决了一个类似的问题,每当我在项目目录之外执行脚本时,我都会遇到以下错误:

throw new Error(`Could not find Chromium (rev. ${this.puppeteer.browserRevision})
Error: Could not find Chromium (rev. 1083080).

我将在最后一步使用它。

但是,让我们从头开始:

如果您安装了 ,Chrome 将自动下载。但建议您使用配置文件更改 Chrome 的默认位置。puppeteer

  1. 创建应安装的项目目录puppeteer

  2. 进入此目录。

    如果是 ,则更改为系统的普通用户。root

  3. 按照文档中的建议,创建一个名为并粘贴以下代码的文件:.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

  4. 安装:puppeteer

    在这里,您基本上可以点击直到初始化完成。enter

    npm init
    
    npm i puppeteer
    
  5. 在 Unix 上,请确保安装了所有必要的依赖项。

    您可以在“疑难解答”页面上找到该列表。

  6. 在项目目录的目录中找到并找出完整路径。Chrome.cache

    将 Chrome 可执行文件添加到脚本中:executablePath:

    const browser = await puppeteer.launch({
         executablePath: '/home/drake/my_puppeteer_project/.cache/puppeteer/chrome/linux-1083080/chrome-linux/chrome'
     });
    
0赞 Craig 2/17/2023 #15

executablePath()

import { executablePath } from "puppeteer";


const options: PuppeteerLaunchOptions = {
 ...
 executablePath: executablePath(),
};

await puppeteer.launch(options);

从 Dockerfile 中删除

ENV PUPPETEER_SKIP_CHROMIUM_DOWNLOAD true
0赞 MarcusOtter 4/13/2023 #16

其他答案都不适合我。

事实证明,如果您坐在 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