FirefoxとWebDriverでheadlessモード(macOS)
スポンサーリンク
いつの間にかFirefoxもheadlessモードに対応したらしいのでちょっと試してみた。
内容は大したことないです。
WebDriverと言うのは正確に言うとSelenium WebDriverでブラウザをプログラムから制御するライブラリ。headless
モードというのは実際に画面にウィンドウを表示せずに実行するモード。
何が嬉しいかというとモニタを繋ぐ必要がないし、実際に描画しない分若干消費メモリも減る。Webアプリのテストや特定サイトをクロールして情報を抜き取るような用途に最適。
最近はJavascript経由でページを描画するサイトが増えているのでクローラーとしては実際のブラウザのほうが何かと都合が良い。
準備
Firefoxはインストール済みという前提(バージョン 59.01)。
SeleniumのPython用ライブラリをインストール。
$ pip install selenium
Firefox用のWebDriverのインストール。
$ brew install geckodriver
具体例
以下は最低限のスクリプト。この記事を書いている時点では起動時に環境変数MOZ_HEADLESS
をセットする必要あり。
# -*- coding: utf_8 -*- from selenium import webdriver from selenium.webdriver.firefox.firefox_binary import FirefoxBinary binary = FirefoxBinary() #binary.add_command_line_options('-headless') driver = webdriver.Firefox(firefox_binary=binary) driver.get('http://www.google.com') driver.save_screenshot('test_image.png') driver.quit()
実行時は以下ののようにする。
$ MOZ_HEADLESS=1 python test_firefox.py
スクリプトのファイル名は任意。実行するとブラウザのウィンドウを起動することなくGoogleにアクセスしてスクリーンショットが保存される。
カレントディレクトリにtest_image.png
が作成されていれば成功。
Linux環境では-headless
オプションを指定すればいいらしい。macOS上でも、
$ /Applications/Firefox.app/Contents/MacOS/firefox -headless *** You are running in headless mode. (省略)
とすればheadlessモードで起動するようだが、Python経由ではだめだった。Python用のライブラリの問題か、geckodriver
の問題かは不明。
参考URL
以下、参考にしたページ。
おしまい。