最近写个脚本用到 puppeteer,然后安装 Chromium 出现一点问题,这里记录一下解决方案。

Puppeteer 自动安装失败

在 Puppeteer 安装时会自动安装 Chromium,然而却总是报错 502 导致下载失败,直接下载可以下载,命令行 wget 也可以,猜测是因为 Puppeteer 开启了新的 process 来安装导致环境变量丢失,然后就玄学上网失败了。

这会回头看了看 Puppeteer 的安装脚本,好像可以使用 npm_config_https_proxy 等配置来玄学上网。

  1. function overrideProxy() {
  2. // Override current environment proxy settings with npm configuration, if any.
  3. const NPM_HTTPS_PROXY = process.env['npm_config_https_proxy'] || process.env['npm_config_proxy'];
  4. const NPM_HTTP_PROXY = process.env['npm_config_http_proxy'] || process.env['npm_config_proxy'];
  5. const NPM_NO_PROXY = process.env['npm_config_no_proxy'];
  6. if (NPM_HTTPS_PROXY) {
  7. process.env['HTTPS_PROXY'] = NPM_HTTPS_PROXY;
  8. }
  9. if (NPM_HTTP_PROXY) {
  10. process.env['HTTP_PROXY'] = NPM_HTTP_PROXY;
  11. }
  12. if (NPM_NO_PROXY) {
  13. process.env['NO_PROXY'] = NPM_NO_PROXY;
  14. }
  15. }

不过当时没看就直接打算手动安装 Chromium 了,要手动安装在安装 Puppeteer 时需要先关闭自动下载:

  1. PUPPETEER_SKIP_DOWNLOAD='true' pnpm add puppeteer

这样就可以跳过 Puppeteer 中自动的 Chromium 安装。

手动安装 Chromium

失败尝试

手动安装首先是使用了 homebrew 的方式,但是由于之前玩 Stable Diffusion 一些依赖包的兼容问题,我的 homebrew 切到了 x86 版本,所以安装后的是 intel 芯片版本的 Chromium,导致无法打开,打开就会显示弹窗:

  1. You cant open the application Chromium because this application is not supported on this Mac.

无奈就去官网: https://download-chromium.appspot.com/ 手动下载,结果不成想官网挂的也是 intel 版本:

不死心的下载试了一下,果然不行。

成功安装

然后无奈的搜了一下,发现了这个问题: https://stackoverflow.com/questions/66002337/is-the-homebrew-chromium-m1-optimised ,其中提及到 homebrew 中安装的脚本:

  1. arch = Hardware::CPU.intel? ? "Mac" : "Mac_Arm"
  2. ...
  3. url "https://commondatastorage.googleapis.com/chromium-browser-snapshots/#{arch}/#{version}/chrome-mac.zip

原来只需要将地址中的架构类型变更更换为想要的版本就可以了。

而官网对应的下载地址是: https://download-chromium.appspot.com/dl/Mac?type=snapshots ,所以我将其中的 Mac 替换为 Mac_Arm 得到如下地址: https://download-chromium.appspot.com/dl/Mac_Arm?type=snapshots ,打开果然成功下载了。

下载完成后解压,就拿到了 Arm 版本的 Chromium。 然而打开时又出现了新的问题:

  1. Chromium is damaged and can't be opened. You should move it to the Trash.

遇到这个报错必须要移除对应的验证:

  1. xattr -c /Applications/Chromium.app

好了,终于可以打开了,可喜可贺。

API Keys missing

然而当我打开后又发现 Chromium 上飘着一行提示:

  1. Google API Keys are missing. Some functionality of chromium will be disabled.

不过此时的 Chromium 已经可以正常使用了,但是子曾经曰过:“遇到问题不能坐以待毙”,还是处理下好了。

查了一下原因是 Chromium 的一些功能如 Google 账号同步等等需要使用 Google API Keys,要处理这个提示大体是两种思路:

  1. 可以选择禁用这个提示,但是这样 Chromium 的一些功能也就无法使用了。
  2. 申请 Google API keys,并填入。

如果想要禁用提示可以编辑 Chromium.app > Contents > Info.plist 文件并添加以下内容:

  1. <key>LSEnvironment</key>
  2. <dict>
  3. <key>GOOGLE_API_KEY</key>
  4. <string>no</string>
  5. <key>GOOGLE_DEFAULT_CLIENT_ID</key>
  6. <string>no</string>
  7. <key>GOOGLE_DEFAULT_CLIENT_SECRET</key>
  8. <string>no</string>
  9. </dict>

而如果想要填入 Google API Keys 则需要去 Google Cloud 申请 API Keys,具体的流程可以参考: https://www.chromium.org/developers/how-tos/api-keys/#acquiring-keys

还有一种方法就是直接使用网上流出的 API Keys,比如这个:

  1. export GOOGLE_API_KEY="AIzaSyCkfPOPZXDKNn8hhgu3JrA62wIgC93d44k"
  2. export GOOGLE_DEFAULT_CLIENT_ID="811574891467.apps.googleusercontent.com"
  3. export GOOGLE_DEFAULT_CLIENT_SECRET="kdloedMFGdGla2P1zacGjAQh"

在 bash 执行上述代码将 API Keys 设置到环境变量重启 Chromium 即可生效。

但是一定需要注意 ️:使用了 API Keys 可能会导致数据信息泄漏问题,所以如果有敏感信息切勿使用他人提供的 Key!!!

在 Puppeteer 中使用

由于 Chromium 不是由 Puppeteer 安装的,所以 Puppeteer 会找不到 Chromium 位置,需要在 Puppeteer 的配置文件中添加 executablePath 来指定 Chromium 的位置:

  1. const { join } = require('path');
  2. /**
  3. * @type {import("puppeteer").Configuration}
  4. */
  5. module.exports = {
  6. // Changes the cache location for Puppeteer.
  7. cacheDirectory: join(__dirname, '.cache', 'puppeteer'),
  8. executablePath: '/Applications/Chromium.app/Contents/MacOS/Chromium'
  9. };

参考资料

Mac M1(arm 系列芯片)如何安装 Chromium | Puppeteer的更多相关文章

  1. 在keil 4中添加stc系列芯片的方法--【sky原创】

    在keil 4中添加stc系列芯片的方法: 1.从官网下载uv3.cdb的文件网址是:http://www.stcmcu.com/ 2.下载好后把uv3.cdb文件改成STC.cdb:3. 然后将[S ...

  2. Mac M1原生(ARM64)Golang dev&debug

    前言 通过本文最终实现了在M1芯片的Mac mini上的Goland的开发,并通过编译源码解决了无法DEBUG的问题. Go 1.16版将正式支持Apple Silicon M1芯片,即arm64架构 ...

  3. 40 图 |我用 Mac M1 玩转 Spring Cloud

    我的开源 Spring Cloud 项目 PassJava 一直可以在 Windows 上正常运行,最近不是换 Mac M1 了么,想把这个项目在 M1 上跑起来,毕竟我的那台 Windows 用起来 ...

  4. EZchip将推全球首款100核64位ARM A-53芯片

    EZchip将推全球首款100核64位ARM A-53芯片 2015-02-25 16:32:03   来源:互联网    关键字: 将推  全球  64位  arm EZchip日前表示,将准备开发 ...

  5. 【Linux_Fedora_应用系列】_4_安装chrome浏览器

    在前面一篇文章中,我们讨论了在Linux Fedora 14下安装WMV解码器:[Linux_Fedora_应用系列]_3_如何利用Smplayer播放WMV格式的文件 在文章中介绍的方法同样适合FC ...

  6. [百家号]华为:最强ARM服务器芯片,华为鲲鹏920处理器发布

    华为:最强ARM服务器芯片,华为鲲鹏920处理器发布   泡泡网 百家号2019-01-0716:11 https://baijiahao.baidu.com/s?id=162198839753232 ...

  7. CentOS 6 安装chromium

    由于centos 6对C++11支持不足的缘故,目前chromium已经不再支持CentOS 6系列. 这里介绍如何在centos 6系列安装chromium. 1.添加chromium源 cd /e ...

  8. 《⑨也懂系列:MinGW-w64安装教程》著名C/C++编译器GCC的Windows版本(MinGW-w64在安装的时候可以选择版本,有图,一步一步)

    发布日期 2016年10月31日 分类 教程 标签 编程.软件 前言<⑨也懂系列:MinGW-w64安装教程>这篇文章由 rsreland (http://rsreland.net)于 2 ...

  9. STM32系列芯片命名规范

    1.STM32的基础知识 STM32是意法半导体公司,基于ARM Cortex®-M0,M0+,M3, M4和M7内核生产的系列通用MCU.截止当前时间为止(20190515),STM32有STM32 ...

  10. arm树莓派Raspbian 下安装selenium+chrome

    arm树莓派Raspbian 下安装selenium+chrome 安装selenium pip3 install selenium 安装chromedriver sudo apt-get insta ...

随机推荐

  1. Delphi之不可思议

    1.--------不可思议的函数调用--开始- 开发环境D7 1 function TForm1.GetssA: string; 2 begin 3 Result:=Result+'AA'; 4 e ...

  2. java map重写 转大写、转驼峰

    /** * @author admin * @Description * 转大写 */ public class HashMapUpper<V> extends HashMap<St ...

  3. 2020/513-笔记:怎么知道Oracle数据库一个中文汉字占几个字节

    1. 执行语句:             select userenv('language') from dual; 如果显示如下:             SIMPLIFIED CHINESE_CH ...

  4. MYSQL5.7实现递归查询

    根据父id查出所有子级,包括子级的子级,包括自身的id sys_tenant_company_relation为关联表, company_id为子id,parent_company_id为父id SE ...

  5. 新搭建的禅道admin忘记密码

    /opt/zbox/run/mysql/mysql -uroot -p 禅道数据库root默认密码123456 MariaDB [(none)]> show databases; +------ ...

  6. python abseil库(app, flags, logging)总结

    absl (Abseil PythonCommon Libraries)(https://abseil.io/docs/python/)是用于构建Python应用程序的Python库代码集合,它包括三 ...

  7. (续)关于jsp的小细节们

    (续集) 细节四:在浏览界面,点击主键对应的数据时,会跳转到其详细信息界面 这样就实现跳转详情页面啦!(jsp再进入一个servlet文件,获取到当前主键的值,然后再传回到另一个jsp文件,就可以实现 ...

  8. 在Linux中安装containerd作为kubernetes的容器运行时

    概述 从kubernetes1.24开始的版本移除了内置的docker支持,用户可以自行选择需要使用的容器运行时,比如containerd.CRI-O.Docker Engine等等,这里我们采用二进 ...

  9. 【Keil】浅学一下keil中的.sct文件

    [Keil]浅学一下keil中的.sct文件 最近重新捣鼓了acfly的源码,有了新的有趣发现,当然,过程并不有趣. 起因 clone下来我去年提交的代码,编译 ...... 报错辣! linking ...

  10. 灵感宝盒图谱全新改版!代码实验室开启报名丨RTE NG-Lab 双周报

    前言 RTE NG-Lab 计划已经推出一段时间了,计划目前包含灵感宝盒(Idea Box).代码实验室(Code Lab).独立开发者孵化器(NGLab Incubator)三个项目.我们希望借助这 ...