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に移行仕様と思います。
タグ:python