chrome + puppeteer

admin發表於2020-06-15

眾所周知 puppeteer 模組大,是因為他包含了完整的 Chromium (~170MB Mac, ~282MB Linux, ~280MB Win) 。

那麼,為什麼不直接呼叫本機 chrome 呢?


思路來源

前段時間 GoogleChromeLabs 釋出了 carlo 神器,6的一逼啊。

但我測試後發現,功能太少,然後看了下原始碼,然後就有了這篇文章。


puppeteer-core

其實 puppeteer 也只是 Chromium + puppeteer-core 而已,所以我們可以直接安裝 puppeteer-core 然後呼叫本機 Chrome 就好了。

目前版本,我本機安裝 puppeteer-core 約 2.1MB,非常小。


然後我們直接呼叫 carlo 的 find_chrome 指令碼,他可以跨平臺的找到本機安裝的 chrome, chromium, canary 版本。


接著,傳參啟動 puppeteer-core,程式碼如下。

[JavaScript] 純文字檢視 複製程式碼
const puppeteer = require('puppeteer-core');
const findChrome = require('./find_chrome');

(async () => {
  const browser = await puppeteer.launch({
    executablePath: findChrome().pop(),
    pipe: true,
    defaultViewport: null,
    headless: false,
    userDataDir: '.profile',
    // args,
  });

  const page = await browser.newPage();
  await page.goto('https://www.bilibili.com/');
  await page.screenshot({ path: 'example.png', fullPage: true });

  await browser.close();
})();

其中 launch 部分的引數是從 carlo 借鑑的,想找到更詳細的引數,還是看 puppeteer 官網文件吧。


應用

就 puppeteer 來說,其實就是個 js 操作 chrome 瀏覽器的東西,常見的應用也只是用他來寫測試,爬蟲等。

但作為開發者的我們,可以用他來寫 node ui 介面,雖然沒 electron 那麼高的自定義,但至少非常小,非常省事的實現了 ui。

比如可以寫自動簽到,自動領取積分,等工具。


發揮你的想象吧。


小結

GoogleChromeLabs 是個神奇的組織,一次次給我們驚喜,如 ndb, carlo, quicklink 等。

而且向我們證明了 chrome 不僅僅是個瀏覽器。

相關文章