Headless Chrome とは?
Headless Chrome とは、Google Chrome の ヘッドレスモードのことを指します。
ヘッドレスモードでは、実際には画面描画を行わずにWebページを読み込む等の動作を行うことができます。これの何が嬉しいのかというと思うかもしれませんが、ヘッドレスモードを用いることでCLIからWebブラウジング操作をすることができます。つまり、スクレイピングができるのです。
なぜ Headless Chrome なのか?
スクレイピングと言えば、まず Nightmare.js とか Phantom.js が思い浮かびますよね。では、なぜそれらのツールを使わず Headless Chrome を使うのか。
まずこれらは、実際に使われているブラウザではないため、特有の問題が発生する場合があるようです。また、例えば Nightmare.js は Electron を用いて実装されていますが、それ故に実際の画面やウィンドウマネージャーを持たない環境では起動できない場合があるようです。
さらに先日、 Phantom.js 唯一のメンテナーが Headless Chrome の登場を理由に辞任を表明しました1。
macOS で使うのは少し面倒
そんな期待の Headless Chrome ですが、Linux 上からは便利なコマンドツールが揃っているようですが、macOSから使うにはひと工夫必要なようです。ここからは実際に macOS で Headless Chrome を使う方法を紹介します。
Google Chrome Canary をインストールする
Chrome のヘッドレスモードは、Chrome 59 から利用できる機能です。2017年4月19日現在、Google Chrome の安定最新版はバージョン57系なのでヘッドレスモードは利用できません。利用するためには、開発版である Google Chrome Canary をインストールする必要があります。
Google Chrome Canary は Google Chrome Canary ダウンロードページ から、または Homebrew cask を利用した以下のコマンドでインストールすることができます。
$ brew install Caskroom/versions/google-chrome-canary
ヘッドレスモードで起動する
Chrome をヘッドレスモードで起動するには、コマンドライン上からオプション付きで Chrome を実行する必要があります。おそらく、Google Chrome Canary.app
は /Applications
ディレクトリ内にインストールされているはずなので、その中に含まれる実行ファイルを以下のように呼び出します。
$ /Applications/Google\ Chrome\ Canary.app/Contents/MacOS/Google\ Chrome\ Canary --headless --remote-debugging-port=9222 --disable-gpu https://chromium.org
これで、 https://chromium.org にヘッドレスモードでアクセスしに行っているはずです。動作を確認するため http://localhost:9222 にアクセスしてみると、リモートデバッギングツールの画面が表示されるはずです。表示されているリンクを踏むと、デバッギングツール内で詳細な内容が確認できます。
スクリプトからの操作は次回
だいぶ長くなったので、スクリプトからの操作は分割して別で投稿します。
追記: スクリプトからの操作について書きました。以下からどうぞ。
macOS で node.js から Headless Chrome を操作してスクレイピング