Puppeteerでブラウザがヘッドレスモードかどうかを判断する
Puppeteerでは下記のようにpuppeteer.launch()
のオプションでChromiumをヘッドレスモードで起動するか非ヘッドレスモードで起動するか切り替えることができます。
const puppeteer = require('puppeteer');
// 非ヘッドレスモードで起動、デフォルトはヘッドレスモード
const browser = await puppeteer.launch({headless: false});
ところで、Puppeteerの処理中でブラウザがヘッドレスモードかどうか判定するにはどうすればいいのでしょうか。
puppeteer.launch()
に与えたオプションを調べるというのが真っ先に思いつく手ですが、実はヘッドレスモードかどうかを変更する手段は複数あります(例:Chromiumのコマンドラインオプションに--headless
を追加する)。すべての可能性を網羅したコードを書くのは大変ですし、今後Puppeteerのバージョンアップで動かなくなってしまうかもしれません。
解:page.evaluate()でヘッドレスモードかどうか確認する
ブラウザのモードについてはブラウザに問い合わせるのが正攻法のような気がします。
そこで、私は次のようにpage.evaluate()
でブラウザ上でJavaScriptを実行してヘッドレスモードかどうかを判断するようにしました。
const page = await browser.newPage();
const isHeadless = await page.evaluate('!window.chrome');
window.chrome
はChrome拡張のためのオブジェクトらしいのですが、これがヘッドレスモードでは定義されないことを利用しています。
将来的にChromeの実装が変わって使えなくなるかもしれませんが、少なくともPuppeteer 1.19.0+Chromium 77.0.3844.0ではうまく動いているようです。
参考URL
Author And Source
この問題について(Puppeteerでブラウザがヘッドレスモードかどうかを判断する), 我々は、より多くの情報をここで見つけました https://qiita.com/hnw/items/3c4a83cc28b4c4648d39著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .