Puppeteer 错误:未下载 Chromium 修订版

Posted

技术标签:

【中文标题】Puppeteer 错误:未下载 Chromium 修订版【英文标题】:Puppeteer Error: Chromium revision is not downloaded 【发布时间】:2019-05-28 13:26:40 【问题描述】:

我使用了npm i puppeteer,如Documentation 中所述 我收到以下错误:

(node: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 一起使用。

任何帮助将不胜感激。

【问题讨论】:

【参考方案1】:

经过大量搜索并尝试了大部分建议后,我只能通过手动安装 Chromium 来解决此问题:

node node_modules/puppeteer/install.js

【讨论】:

这个解决方案解决了我的问题。谢谢! 我的本地模块使用 puppeteer-core 而不是 puppeteer,但解决方案的效果相同。【参考方案2】:

经过多次尝试终于找到答案here:

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

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

【讨论】:

这个答案是专门针对linux的,这对很多开发者来说是没用的,因为windows操作系统还是很占优势的 但是适用于 windows 的 ubuntu bash 会让它变得有用 @tramada Still Linux ;) npm v7 不再有--unsafe-perm 或等效的github.com/npm/feedback/discussions/121【参考方案3】:

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

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

node node_modules/puppeteer/install.js

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

【讨论】:

【参考方案4】:

对于 Linux:

1-您必须使用此命令安装 chromium 浏览器:

$sudo apt install -y chromium-browser

2-您必须使用此命令获取铬的可执行路径:

$哪个铬浏览器

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();
    )();

【讨论】:

【参考方案5】:

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

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

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

【讨论】:

这很有帮助。看完这篇终于有进步了!【参考方案6】:

在我的情况下,它在删除 node_modules 文件夹和 package-lock.json 文件并再次运行 npm install 后工作。

【讨论】:

【参考方案7】:

我是这样解决的

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

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

傀儡版本:1.16.0

【讨论】:

【参考方案8】:

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

用于安装 Chrome

sudo apt install -y chromium-browser

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

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

【讨论】:

【参考方案9】:

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

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

然后我从this link (your_chrome_version) 下载了 chromium 浏览器,然后把它复制到了路径,这样你就需要在这个 url 中看到 chrome.exe

node_modules/puppeteer/.local-chromium/win64-<your_chrome_version>/chrome-win/chrome.exe

就是这样。它对我有用。

【讨论】:

如果文件夹存在,您可以检查路径和文件,或者您可以重命名并执行步骤。【参考方案10】:

如果有人再次遇到这个问题。然后转到 node_modules 文件夹,然后进入 puppeteer 并在 lib 中找到 launch.js 打开相同的文件并搜索可执行路径,然后将其空值更改为您的 chrome 或 chromium 所需的路径。

对我来说路径如下:

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

【讨论】:

【参考方案11】:

在 Windows 上可以全局安装

npm i puppeteer --g

【讨论】:

【参考方案12】:

我是这样解决的

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

只需让ignoreDefaultArgs: ['--disable-extensions'] 就可以了

来源: Troubleshoot

【讨论】:

以上是关于Puppeteer 错误:未下载 Chromium 修订版的主要内容,如果未能解决你的问题,请参考以下文章

Puppeteer 的 chromium 打开时出现错误并停止 puppeteer 脚本

puppeteer 离线安装chromium

Puppeteer:如何在 ec2 服务器上安装 puppeteer

爬虫 puppeteer

Mac上的Puppeteer / chromium长期提示“接受传入的网络连接?”

Puppeteer - 谷歌推出的自动化测试工具库