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'}); })
動いた
3
まだ試せてないけどdockerの外とかつなぐ際に、localhostからしかまだ繋げなさそうな気がするのでbindするipを指定するオプションを調べる必要がありそう。