Firefoxブラウザを自動で操作したり、Webアプリケーションのテストを自動化するには、Seleniumが使われることも多いですが、Ver47以降のFirefoxには、「Marionetteサーバ」という自動操作の機能が備わっています。
この「Marionetteサーバ」とは、Firefoxのレンダリングエンジンの「gecko」に組み込まれており、Firefoxの技術チームもこの仕組みを利用して、Firefoxの開発のテストを行っているそうです。
Selenium3からは、FirefoxのWebDriverも別途geckodriverとして提供されるようになっており(以前はSeleniumに内蔵されてました)、Marionetteをサポートしています。Firefoxでは今後、Marionetteを使った自動化が積極的に行われていくと思われます。
そこで今回は、Pythonを使って、Marionetteサーバ経由でFirefoxを自動操作してみます。
PythonクライアントによるFirefox自動化の環境構築
① Pythonクライアントの用意
はじめにMarionette用のPythonクライアントを用意します。なお、パッケージ自体はpipでインストールすることが可能ですが、2017年5月現在では、python2しか対応していないようで、python3だとpipインストール時にエラーになってしまいます。
また、パッケー同士の衝突などを防ぐために、virtualenv等で、独立した環境をつくると良いです。(virtualenvでの複数環境の設定はこの記事を参考に)私はpyhton2のvirtualenv環境でインストールしました。
pip install marionette_driver
② Marionetteを有効化したFirefoxを起動しておく
では、早速、Pythonクライアントを使ってFirefoxを操作してみます。はじめにMarionetteを有効化したFirefoxブラウザを起動しておきます。
PC版のFirefoxはデフォルトでMarionetteの機能は内蔵されていますが、起動時のオプションで有効化してあげる必要があります。
「ファイル名を指定して実行」(※Windows10などでは、「Windowsボタン+R」)で以下のように、「-marionette」オプション付きで起動します。
firefox -marionette -P "default"
③ pythonクライアントのコードを書いて実行
Firefoxを起動してあれば、以下のようなプログラムを.pyファイルにかいて、実行してあげると、自動でサイトに行ってくれます。
from marionette_driver.marionette import Marionette client = Marionette('localhost', port=2828) client.start_session() client.execute_script("alert('o hai there!');")