前回はEclipseとjavaでFirefoxを自動操作しましたが、今回は最近自分の中ではまっている言語、pythonをつかって同じようなことをしたいと思います。
javaの場合は、手順も多く、エラーが発生して起動するまで苦労しましたが、pythonの場合は、下記手順にならってスクリプトを組むだけで、何の問題も無く自動操作できました。
コンパイルも要らないし、特別な開発環境も無くても動かせますので、言語を問わないのであれば、pythonでのブラウザの自動操作はおススメだと思います。
pythonでfirefoxを自動操作する手順
はじめに、自分のpython環境に、selenium3用のpyhtonバインディングをインストールします。
pipで可能ですので、
pip install -U selenium
とコマンドを打てば、すぐにインストールされました。
ライブラリの依存のコンフリクトを避けるために、仮想環境を使うことをお勧めします。(環境構築の仕方はこの記事をご参照)
シンプルな手順なので、あまり迷うことも無いと思いますが、
以下のページに、最新の情報がまとまっています。
「https://pypi.python.org/pypi/selenium」
次に、下記ページからMozillaのWebDriverである、geckodriverをダウンロードしてきます。
「https://github.com/mozilla/geckodriver/releases」
自分で使っているPCにあったファイルを落としてきて、適当なディレクトリに解凍します。
Windowsの場合は、「geckodriver.exe」などが展開されるので、これを、環境変数「path」に入れます。
# 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に移行しようと思います。