首先我们先创建一个文件夹,这里命名为: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,而且不同的项目也可以直接复用,参考代码: