手动下载 puppeteer 所对应的 Chrome

2,666 阅读2分钟

首先我们先创建一个文件夹,这里命名为:puppeteer-demo,进入文件夹内初始化项目,并安装 puppeteer-core,而不是 puppeteer 这个包。

npm init -y
npm i puppeteer-core

等待安装完成,打开 node_modules 目录,搜索并打开 puppeteer-core 这个目录。

分别进入文件夹:/lib/cjs/puppeteer/node/,找到 BrowserFetcher.js 文件,通过 IDE/编辑器打开。

搜索 downloadURLs 我们找到如下代码:

找到自己所在平台的 URL,这里以 Windows 64 位举例子,chrome.win64 这个 key 的 value 就是我们要找到的 URL,即:

%s/chromium-browser-snapshots/Win_x64/%d/%s.zip

但这个 URL 不是完整的,我们还需寻找 %d 与 %s 所对应的内容。

关键在于本文件的代码中存在一个叫 downloadURL 的方法 ,这样我们才能知道对应位置的值是什么,通过代码知道,每个位置分别为:host、revision、archiveName(product, platform, revision),如图:

我们先找 host 的值,发现文件内有一个叫做 browserConfig 的常量,很显然是我们想要的:

复制 chrome.host 的 value,将 URL 的第一个 %s 替换对应的结果:

https://storage.googleapis.com/chromium-browser-snapshots/Win_x64/%d/%s.zip

还有 %d 和 最后一个 %s。那 %d 哪里找?通过一番寻找后发现在同目录下有一个命名为 revisions.js 文件里,我们打开这个文件,在代码中我们找到了所需要的值,这里即 901912。

替换后的 URL 如下,还剩一个 %s。

https://storage.googleapis.com/chromium-browser-snapshots/Win_x64/901912/%s.zip

最后一个 %s 也很容易知道,它是调用一个名叫 archiveName 的方法,我们直接定位到这个方法,该方法是根据 product、platform、revision 参数得到结果,很显然我们这里最终得到结果就是 chrome-win。

最后我们得到下载的 URL:

https://storage.googleapis.com/chromium-browser-snapshots/Win_x64/901912/chrome-win.zip

下载解压得到一个 chrome-win 的目录,后面的项目就可以直接使用这个 Chrome,而且不同的项目也可以直接复用,参考代码: