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
に書いてあることをすればよい感じです.
動作環境
- Windows 10
- Python 3.5.1
- selenium 2.53.6
- geckodriver 0.9.0
手順
前回より必要なもののみを書いています.
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 に対応することができました.