puppeteer.connectを試す

1

puppeteerの

https://github.com/GoogleChrome/puppeteer/blob/master/lib/Launcher.js

をながめていたら案外雑にchromiumを立ち上げていたのでpuppeteerではなく自分でchromiumのprocessを立ち上げて動くか試してみる。

この場合launchではなくconnectを使う

2

chromiumのversionは

Chromium 70.0.3538.77

以下でchromiumを立ち上げてみる

chromium --headless --hide-scrollbars --mute-audio --no-sandbox --disable-setuid-sandbox --remote-debugging-port=0 --disable-gpu --user-data-dir=/workdir/tmp about:blank

--remote-debugging-port=0をつけないと起動即終了してしまう。--no-sandboxはdockerのalpine上で動かしているため必要。

起動すると以下が吐かれるので、

DevTools listening on ws://127.0.0.1:33993/devtools/browser/dcc10d58-4c80-4e6c-9ad6-235039b0807d

このwsエンドポイントにpuppeteerからアクセスする。

puppeteer.connect({
    browserWSEndpoint: `ws://127.0.0.1:33993/devtools/browser/dcc10d58-4c80-4e6c-9ad6-235039b0807d`,
})
    .then(async browser => {
        const page = await browser.newPage();
        await page.goto('https://www.google.com');
        await page.screenshot({path: '/workdir/dist/screenshot.png'});
    })

動いた

f:id:hiroqn:20181212235750p:plain

3

まだ試せてないけどdockerの外とかつなぐ際に、localhostからしかまだ繋げなさそうな気がするのでbindするipを指定するオプションを調べる必要がありそう。