最近寫個(gè)腳本用到 puppeteer,然后安裝 Chromium 出現(xiàn)一點(diǎn)問(wèn)題,這里記錄一下解決方案。
(資料圖片)
在 Puppeteer 安裝時(shí)會(huì)自動(dòng)安裝 Chromium,然而卻總是報(bào)錯(cuò) 502 導(dǎo)致下載失敗,直接下載可以下載,命令行 wget 也可以,猜測(cè)是因?yàn)?Puppeteer 開啟了新的 process 來(lái)安裝導(dǎo)致環(huán)境變量丟失,然后就玄學(xué)上網(wǎng)失敗了。
這會(huì)回頭看了看 Puppeteer 的安裝腳本,好像可以使用 npm_config_https_proxy等配置來(lái)玄學(xué)上網(wǎng)。
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; }}不過(guò)當(dāng)時(shí)沒(méi)看就直接打算手動(dòng)安裝 Chromium 了,要手動(dòng)安裝在安裝 Puppeteer 時(shí)需要先關(guān)閉自動(dòng)下載:
PUPPETEER_SKIP_DOWNLOAD="true" pnpm add puppeteer這樣就可以跳過(guò) Puppeteer 中自動(dòng)的 Chromium 安裝。
手動(dòng)安裝 Chromium失敗嘗試手動(dòng)安裝首先是使用了 homebrew 的方式,但是由于之前玩 Stable Diffusion 一些依賴包的兼容問(wèn)題,我的 homebrew 切到了 x86 版本,所以安裝后的是 intel 芯片版本的 Chromium,導(dǎo)致無(wú)法打開,打開就會(huì)顯示彈窗:
You can’t open the application “Chromium” because this application is not supported on this Mac.無(wú)奈就去官網(wǎng): https://download-chromium.appspot.com/ 手動(dòng)下載,結(jié)果不成想官網(wǎng)掛的也是 intel 版本:
不死心的下載試了一下,果然不行。
成功安裝然后無(wú)奈的搜了一下,發(fā)現(xiàn)了這個(gè)問(wèn)題: 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原來(lái)只需要將地址中的架構(gòu)類型變更更換為想要的版本就可以了。
而官網(wǎng)對(duì)應(yīng)的下載地址是: https://download-chromium.appspot.com/dl/Mac?type=snapshots ,所以我將其中的 Mac 替換為 Mac_Arm 得到如下地址: https://download-chromium.appspot.com/dl/Mac_Arm?type=snapshots ,打開果然成功下載了。
下載完成后解壓,就拿到了 Arm 版本的 Chromium。 然而打開時(shí)又出現(xiàn)了新的問(wèn)題:
Chromium is damaged and can"t be opened. You should move it to the Trash.遇到這個(gè)報(bào)錯(cuò)必須要移除對(duì)應(yīng)的驗(yàn)證:
xattr -c /Applications/Chromium.app好了,終于可以打開了,可喜可賀。
API Keys missing然而當(dāng)我打開后又發(fā)現(xiàn) Chromium 上飄著一行提示:
Google API Keys are missing. Some functionality of chromium will be disabled.不過(guò)此時(shí)的 Chromium 已經(jīng)可以正常使用了,但是子曾經(jīng)曰過(guò):“遇到問(wèn)題不能坐以待斃”,還是處理下好了。
查了一下原因是 Chromium 的一些功能如 Google 賬號(hào)同步等等需要使用 Google API Keys,要處理這個(gè)提示大體是兩種思路:
可以選擇禁用這個(gè)提示,但是這樣 Chromium 的一些功能也就無(wú)法使用了。申請(qǐng) Google API keys,并填入。如果想要禁用提示可以編輯 Chromium.app > Contents > Info.plist文件并添加以下內(nèi)容:
LSEnvironment GOOGLE_API_KEY no GOOGLE_DEFAULT_CLIENT_ID no GOOGLE_DEFAULT_CLIENT_SECRET no 而如果想要填入 Google API Keys 則需要去 Google Cloud 申請(qǐng) API Keys,具體的流程可以參考: https://www.chromium.org/developers/how-tos/api-keys/#acquiring-keys
還有一種方法就是直接使用網(wǎng)上流出的 API Keys,比如這個(gè):
export GOOGLE_API_KEY="AIzaSyCkfPOPZXDKNn8hhgu3JrA62wIgC93d44k"export GOOGLE_DEFAULT_CLIENT_ID="811574891467.apps.googleusercontent.com"export GOOGLE_DEFAULT_CLIENT_SECRET="kdloedMFGdGla2P1zacGjAQh"在 bash 執(zhí)行上述代碼將 API Keys 設(shè)置到環(huán)境變量重啟 Chromium 即可生效。
但是一定需要注意 ??:使用了 API Keys 可能會(huì)導(dǎo)致數(shù)據(jù)信息泄漏問(wèn)題,所以如果有敏感信息切勿使用他人提供的 Key?。。?/strong>
在 Puppeteer 中使用由于 Chromium 不是由 Puppeteer 安裝的,所以 Puppeteer 會(huì)找不到 Chromium 位置,需要在 Puppeteer 的配置文件中添加 executablePath來(lái)指定 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-optimisedhttps://stackoverflow.com/questions/21276763/google-api-keys-missing-warning-message-when-using-chromium-portablehttps://groups.google.com/a/chromium.org/g/chromium-dev/c/cTPJG7KnBpI?pli=1https://www.chromium.org/developers/how-tos/api-keys/#acquiring-keys 廣告
X 關(guān)閉
廣告
X 關(guān)閉