【selenium】Firefox/Chrome/SafariのWebDriverインストール - Python 編 -


今までFirefoxのプラグイン、selenium IDEでテストスクリプトの作成をしてきましたが、
Firefox55からは、selenium IDE が動かなくなってしまいました。
もしかしたらと思い、selenium Builderも試してみましたが、同様に動きませんでした。
※ちなみに古いバージョンのFirefoxを使えば、動作できるようです。

一旦、IDEを使わずに、Firefox、chromeやSafariでもseleniumのテストをしていくために、Pythonでもseleniumを動かせるようにしたので、webdriverのインストール方法をブラウザ別に紹介します。

今回実行した環境

MacBook Pro (13-inch, 2017, Four Thunderbolt 3 Ports)
プロセッサ:3.5 GHz Intel Core i7
メモリ: 16 GB 2133 MHz LPDDR3
OSバージョン: 10.12.6
Python:3.6.2

seleniumのインストール

$ sudo pip3 install selenium

seleniumのインストールはこれだけで完了です

しかし、seleniumでブラウザを起動するには、各ブラウザのドライバが必要となります。
ここからは、ドライバーを設定していきます。

Firefox

Mozillaのgeckodriverをダウンロードします。
以下のページから自分のOSに合わせて最新版を選択してください。

ダウンロードしたファイルを解凍したら、geckodriverを

/usr/local/bin/

にコピーします。

コピーが完了したら、以下のコードを実行して、Firefoxが立ち上がって東洋経済のサイトが表示されれば、インストール成功です!

SampleFirefox.py
from selenium import webdriver

# Firefoxを指定して起動
browser = webdriver.Firefox()
browser.get('http://toyokeizai.net/')

Google Chrome

こちらも手順としてはFirefoxのときとほぼ同様です。
以下のページから自分のOSに合わせて最新版のドライバーをダウンロードします。
https://sites.google.com/a/chromium.org/chromedriver/downloads
ダウンロードしたファイルを解凍したら、chromedriverを

/usr/local/bin/

にコピーします。

コピーが完了したら、以下のコードを実行して、chromeが立ち上がって毎日新聞のサイトが表示されれば、インストール成功です!
2行目のFirefoxをChromeに書き換えるだけ!

SampleChrome.py
from selenium import webdriver

# GoogleChromeを指定して起動
browser = webdriver.Chrome()
browser.get('https://mainichi.jp/')

Safari

Firefoxとchromeとは違い、
開発の設定から”リモートオートメーションを許可”にチェックを入れるだけです。

開発メニューを表示させるために、設定の詳細の一番下にある、
「メニューバーに”開発”メニューを表示」にチェックを入れます。

これで、メニューバーに開発メニューが表示されたら、
そこをクリックして、表示されたメニューから”リモートオートメーションを許可”を
探し出して、クリックします。
これで設定は完了です。

それではSafariを起動するコードですが、
これまでブラウザの名前を入れてきた箇所を”Safari”に変えるだけです。
簡単!

SampleSafari.py
from selenium import webdriver

# Safariを指定して起動
browser = webdriver.Safari()
browser.get('https://mainichi.jp/')

一度、ドライバーを設定してしまえば、
コードを一行変えるだけでブラウザを切り替えることが可能となります。

このように、ブラウザを変えるのは簡単なのですが、
コードはそのままで別のブラウザでも動くのかと言うとそういうわけにはいかないようです。

例えば要素を見つけることが出来なかったり、
読み込みを待たずにエラーを返してしまうことがあったりするため、
ブラウザごとに微妙な最適化は必要となるかと思います。

軽く触った感じですが、Safariはtime.sleep()などで、
ちゃんと待ち時間をとってあげないとエラーが返ってきやすい感じがしました。