Windows 10 の Firefox 47.0.1 で Selenium を Python3 から動かす

Firefox 47 のアップデートで Selenium が動かなくなってしまったけど,
47.0.1 になって動くようになったとのことなので試してみました.
Firefox — Notes (47.0.1) — Mozilla

別の方法としては,
Firefox ESR(Encho- Sapo-to Riri-su)
(Extended Support Release) を利用するという方法もあります.
Mozilla Japan 法人向け情報 — Firefox の事例と関連情報

基本的にはここ
WebDriver - Mozilla | MDN
に書いてあることをすればよい感じです.

動作環境

手順

前回より必要なもののみを書いています.
seleniumを使った自動ログインテスト - Sarup in Wonderland
- geckodriver をダウンロード
Releases · mozilla/geckodriver · GitHub
- 展開&名前の変更
geckodriver.exe → wires.exe
- wires.exe をパスの通ったところに移動
(僕は雑なので C:\Users\$USERNAME をパスに追加してそこに置いています.)
- プログラムの作成
今回も前回同様,
「IDとパスワードを入力し,ログイン処理を行う.その後ブラウザを閉じる」
という処理を自動化します.

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# LAST UPDATE : 2016/07/06
import selenium.webdriver
import selenium.webdriver.common.keys
import selenium.webdriver.commom.by
import selenium.webdriver.support.uixs
import selenium.webdriver.support.expected_conditions
import selenium.webdriver.common.desired_capabilities as desired_capabilities

username = "ログインしたいユーザの名前"
password = "ログインしたいユーザのパスワード"
URL = "ログインするサイトのURL"

By = selenium.webdriver.common.by.By
WebDriverWait = selenium.webdriver.support.ui.WebDriverWait
EC = selenium.webdriver.support.expected_conditions
Keys = selenium.webdriver.common.keys.Keys
DesiredCapabilities = desired_capabilities.DesiredCapabilities

if __name__ == '__main__':
    caps = DesiredCapabilities.FIREFOX
    caps['marionette'] = True
    webdriver = selenium.webdriver
    browser = webdriver.Firefox(capabilities=caps)
    browser.implicitly_wait(5)
    browser.get(URL)
    login_username = browser.find_element_by_id("ユーザ名を入力するフィールドのID")
    login_username.send_keys(username)
    login_password = browser.find_element_by_id("パスワードを入力するフィールドのID")
    login_password.send_keys(password)
    login_btn = browser.find_element_by_id("ログインボタンのID")
    login_btn.send_keys(Keys.RETURN)
    try:
        e = WebDriverWait(browser, 10).until(
            EC.presence_of_all_elements_located((By.TAG_NAME, "center")),
            'Login success' in browser.find_element_by_tag_name(
                'center').text
        )
    finally:
        browser.quit()

今回,終了待ちとして sleep を使わず WebDriverWait で行っています.
参考にしたサイト
5. Waits — Selenium Python Bindings 2 documentation
Selenium 2で非同期処理を待機する5つの方法 - CODESCRIBBLE
また,until 内の処理はログインしたいサイトごとに違います.
今回はログインに成功した後,
center タグ内に'Login success' という文字が含まれていることを期待しています.

これで最新版の Firefox に対応することができました.