今日も微速転進

ここではないどこかへ

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

以下、参考にしたページ。

おしまい。

広告