Selenium3によるFirefoxの自動操作(Python編)

前回はEclipseとjavaでFirefoxを自動操作しましたが、今回は最近自分の中ではまっている言語、pythonをつかって同じようなことをしたいと思います。

javaの場合は、手順も多く、エラーが発生して起動するまで苦労しましたが、pythonの場合は、下記手順にならってスクリプトを組むだけで、何の問題も無く自動操作できました。

コンパイルも要らないし、特別な開発環境も無くても動かせますので、言語を問わないのであれば、pythonでのブラウザの自動操作はおススメだと思います。

pythonでfirefoxを自動操作する手順

①selenium3用のpyhtonバインディングをインストール

はじめに、自分のpython環境に、selenium3用のpyhtonバインディングをインストールします。

pipで可能ですので、

pip install -U selenium

とコマンドを打てば、すぐにインストールされました。

ライブラリの依存のコンフリクトを避けるために、仮想環境を使うことをお勧めします。(環境構築の仕方はこの記事をご参照)

シンプルな手順なので、あまり迷うことも無いと思いますが、

以下のページに、最新の情報がまとまっています。

「https://pypi.python.org/pypi/selenium」

②firefoxのWebドライバをダウンロードする

次に、下記ページからMozillaのWebDriverである、geckodriverをダウンロードしてきます。

「https://github.com/mozilla/geckodriver/releases」

自分で使っているPCにあったファイルを落としてきて、適当なディレクトリに解凍します。

Windowsの場合は、「geckodriver.exe」などが展開されるので、これを、環境変数「path」に入れます。

③Pythonで以下を実行

# coding:utf-8
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
 
 
browser = webdriver.Firefox()
 
browser.get('http://www.yahoo.com')
assert 'Yahoo' in browser.title
 
elem = browser.find_element_by_name('p')  # Find the search box
elem.send_keys('seleniumhq' + Keys.RETURN)
 
browser.quit()

Unable to find a matching set of capabilitiesが起こる原因

最新のFirefox(2019年6月時点でVer67)と最新のgeckodriver(v0.24.0)を使ってpythonで動かそうとしましたが、

selenium.common.exceptions.SessionNotCreatedException: Message: Unable to find a matching set of capabilities

が出てしまいました。どうやら

capabilities[“marionette”] = True

が認識できないみたいなので、これをFalseにすると起動は出来ます。

ただ、こうすると、Firefoxブラウザが起動した後に、とまってしまい、しばらくすると

Profile Dir: D:\Temp\tmpqpinntfe If you specified a log_file in the FirefoxBinary constructor, check it for details.

が出てしまいました。

FirefoxはVer47からmarionetteという機構をつかって操作するので、これをfalseにできない。。というか、

したら、きちんと動かないみたいですね。

ver44など、Firefoxを、marionetteがデフォルトで使われるようになる前のバージョンに戻せば動きましたが。。

Headlessモードで使いたかったんですが、HeadlessモードはFirefoxのver57からなのでどっちつかずですね。。

いったんver44で動かすようにして、ちゃんとcapabilities[“marionette”] = Trueで動くようになったら最新のFirefoxに移行しようと思います。