Mac M1(arm 系列芯片)如何安装 Chromium

2023-11-18

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

Puppeteer 自动安装失败

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

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

function overrideProxy() {
    // Override current environment proxy settings with npm configuration, if any.
    const NPM_HTTPS_PROXY = process.env['npm_config_https_proxy'] || process.env['npm_config_proxy'];
    const NPM_HTTP_PROXY = process.env['npm_config_http_proxy'] || process.env['npm_config_proxy'];
    const NPM_NO_PROXY = process.env['npm_config_no_proxy'];
    if (NPM_HTTPS_PROXY) {
        process.env['HTTPS_PROXY'] = NPM_HTTPS_PROXY;
    }
    if (NPM_HTTP_PROXY) {
        process.env['HTTP_PROXY'] = NPM_HTTP_PROXY;
    }
    if (NPM_NO_PROXY) {
        process.env['NO_PROXY'] = NPM_NO_PROXY;
    }
}

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

PUPPETEER_SKIP_DOWNLOAD='true' pnpm add puppeteer

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

手动安装 Chromium

失败尝试

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

You can’t open the application “Chromium” because this application is not supported on this Mac.

picture 1

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

picture 2

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

成功安装

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

 arch = Hardware::CPU.intel? ? "Mac" : "Mac_Arm"
 ...
 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。 然而打开时又出现了新的问题:

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

picture 3

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

xattr -c /Applications/Chromium.app

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

API Keys missing

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

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 文件并添加以下内容:

<key>LSEnvironment</key>
<dict>
    <key>GOOGLE_API_KEY</key>
    <string>no</string>
    <key>GOOGLE_DEFAULT_CLIENT_ID</key>
    <string>no</string>
    <key>GOOGLE_DEFAULT_CLIENT_SECRET</key>
    <string>no</string>
</dict>

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

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

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

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

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

在 Puppeteer 中使用

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

const { join } = require('path');

/**
 * @type {import("puppeteer").Configuration}
 */
module.exports = {
    // Changes the cache location for Puppeteer.
    cacheDirectory: join(__dirname, '.cache', 'puppeteer'),
    executablePath: '/Applications/Chromium.app/Contents/MacOS/Chromium'
};

参考资料

  • https://stackoverflow.com/questions/66002337/is-the-homebrew-chromium-m1-optimised
  • https://stackoverflow.com/questions/21276763/google-api-keys-missing-warning-message-when-using-chromium-portable
  • https://groups.google.com/a/chromium.org/g/chromium-dev/c/cTPJG7KnBpI?pli=1
  • https://www.chromium.org/developers/how-tos/api-keys/#acquiring-keys
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

随机推荐

  • 存储过程中的when others then 和 raise 何意义?

    EXCEPTION when others then rollback dbms output put line code sqlcode dbms output put line errm sqlerrm raise when other
  • MATLAB初学_分类方法_4.0

    一 K 近邻分类 K 近邻算法是一种基于实例的非参数的分类方法 其作用原理是计算每个训练样例到待分类样品间的距离 取和待分类样品距离最近的看k个训练样例 k个样品中那个类别的训练样例占多数 则待分类元组就属于该类 2 1 K NN算法具体步
  • linux文件重命名命令

    linux下重命名文件有两种方式 1 较简单的处理命令 mv mv 原文件名 新文件名 如 mv myFile newName 将MyFile重命名为newName 2 linux提供了一个重命名文件命令 rename rename fro
  • HDR技术

    转自 http digi tech qq com a 20150513 008211 htm http digi tech qq com a 20150119 009229 htm http tech sina com cn e 2015
  • Fix a Tree【Codeforces 699 D】【dfs + 树的性质】

    Codeforces Round 363 Div 2 D 题意 有N个点 每个点i都有一个父节点p i 如果 i p i 则是说明i结点是根结点 现在我们给出这样的1 N的p i 这可能是不合法的 问 我们应该最少改变多少个使它变成一棵合法
  • kubernetes各组件介绍

    文章目录 一 kubernetes 是什么 1 基础架构图 2 kubernetes 各组件介绍 2 1 master 组件 one Kubernetes API Server kube apiserver two Kubernetes C
  • 位的巧妙应用

    前言 前几天做了一个笔试题目 当时没多想 今天翻看博客才发现 原来每个笔试题都藏的很深啊 原文链接 http blog csdn net u010429424 article details 77856133 先说题目 面试题 8个试剂 其
  • 输入两个学生的学号,成绩,输出成绩较高的学生的学号姓名和成绩

    include
  • 贝叶斯判别分析器_用朴素的贝叶斯构建情感分析器

    贝叶斯判别分析器 Sentiment Analysis is contextual mining of text which identifies and extracts subjective information in the sou
  • 传感器超声波雷达

    转自 http www itsiwei com 21962 html 在上一次分享中 我介绍了毫米波雷达的原理 数据特性及优缺点 毫米波雷达的低环境敏感和低成本的特性使得其在ADAS和自动驾驶领域得到了广泛的应用 今天要介绍的是一款极其常见
  • 【Python】cnocr的使用

    1 介绍 cnocr于2019年7月25日开源 以下是使用介绍 2 安装 pip install cnocr 3 使用 from cnocr import CnOcr ocr CnOcr path r D server cnocr exam
  • 【AI前沿】chatgpt还有哪些不足?

    博客昵称 吴NDIR 个人座右铭 得之淡然 失之坦然 作者简介 喜欢轻音乐 象棋 爱好算法 刷题 其他推荐内容 计算机导论速记思维导图 其他内容推荐 五种排序算法 在这个愉快的周末让我们聊一下ChatGPT吧 ChatGPT 4时代来临 C
  • AD怎么调整PCB板子大小

    方法一 Design Board Shape Redefine Board Shape 快捷键D S R 对于方形 依次画好4个点 然后右键退出操作 没有画成想要的形状之前不要点击右键 方法二 1 在PCB页面用Keep Out Layer
  • C语言学习笔记(七)————分支语句相关

    1 单独一个分号是空语句 在一些情况下有重要作用 2 使用if else语句时 如果条件成立 要执行多条语句 这里要用一对 封装一个代码块 如果if else后面是单条语句则不用大括号括起 3 注意C语言中if else遵循就近原则 不看缩
  • 分析告警流量

    关键指标分析 事件量 原始告警量 主告警量 自动去重 规则压缩后告警量 压缩比 压缩比计算公式 1 主告警量 事件量 100 MTTA 告警平均响应or认领时长 MTTR 告警平均恢复or关闭时长 事件压缩分析 按天统计事件量 所有告警 主
  • 电商数据分析---RFM用户画像

    电商数据分析 一 数据描述 数据下载 订单顺序编号 订单号 用户名 商品编号 订单金额 付款金额 二 分析角度 1 整体角度 探索每个月有效的订单 以及销售额 2 个人角度 统计第一次购买的数量 以及最新时间购买的人数 3 用户画像 使用R
  • Windows API一日一练(13)TranslateMessage函数

    Windows API一日一练 13 TranslateMessage函数 分类 Direct3D 2007 07 23 08 41 7881人阅读 评论 5 收藏 举报 windows api winapi null 工作 Transla
  • linux基础命令之zip

    zip用来解压缩文件或对文件进行打包 语法 zip 选项 参数 zip压缩包 指定要创建的zip压缩包 文件列表 指定要压缩的文件列表 通常用法 zip r aaa zip aaa 压缩目录 zip r aaa zip aaa 压缩文件 选
  • 服务器来电后自动开机

    实战 xfs文件系统的备份和恢复 XFS提供了 xfsdump 和 xfsrestore 工具协助备份XFS文件系统中的数据 xfsdump 按inode顺序备份一个XFS文件系统 与传统的UNIX文件系统不同 XFS不需要在dump前被卸
  • Mac M1(arm 系列芯片)如何安装 Chromium

    最近写个脚本用到 puppeteer 然后安装 Chromium 出现一点问题 这里记录一下解决方案 Puppeteer 自动安装失败 在 Puppeteer 安装时会自动安装 Chromium 然而却总是报错 502 导致下载失败 直接下