Selenium IDEで図書館サイトに自動ログインし、自分の貸出状況画面をスクリーンショットで取得する(python)
退屈なことはPythonにやらせよう ―ノンプログラマーにもできる自動化処理プログラミング
- 作者:Al Sweigart
- 発売日: 2017/06/03
- メディア: 単行本(ソフトカバー)
図書館サイトに自動アクセスし自分の貸出状況画面をスクリーンショットで取得する
ということをやってみようと思います。Selenium IDEを利用します。
●Selenium IDE
Selenium IDEは、Webアプリケーションのテストを自動化するためのツールで、ブラウザでの動作を自動化できます。
Selenium IDEについてですが2017年8月ごろ、以前のようにFireFoxの「ツール」からSelenium IDEを利用することができなくなりました。
Firefoxのバージョン55へのアップデートに伴ってSelenium IDEはサポート対象外となり、作動しなくなりました。
詳細は以下のサイトが詳しいです。
『[2017年時点] Selenium IDE のまとめ』
[2017年時点] Selenium IDE のまとめ - Qiita
気軽に再び、Selenium IDEを使いたいなら、Chrome版が使えます。ただし、Chrome版ではテストケースをpythonコードにエクスポートすることはできません。
Chromeウェブストアから、Selenium IDEを検索することで該当のページが表示され、「Chromeに追加」ボタンを押すとインストールすることができます。
Selenium IDE - Chrome ウェブストア
インストール後、Chromeの右上画面からSelenium IDEを利用できます。赤丸で囲ったのがそうです。
●Selenium IDEによる動作記録
今のSelenium IDEではソースコードをエクスポートできないので、Selenium IDEに記録されていく情報をpythonコードに組み込んでいきます。
起動後、プロジェクトとテストを作成します。今回はプロジェクト名とテスト名ともに「login_capture」としました。
次に、例として私が普段から利用している同志社大学の図書館サイトにアクセスし、ログイン後に貸出図書の状況画面をキャプチャすることを行ってみます。
※同志社大学図書館は今出川図書館か京田辺図書館で利用登録の手続きを済ませてから、IDとパスワードを付与されます。
まず、同志社大学図書館のサイト
DOORS(同志社大学図書館)
にアクセスします。
ここからSelenium IDEを起動し、動作の記録を行っていきます。
Selenium IDEの右上のボタン(赤い丸で囲った箇所)を押して、記録を開始します。
画面右上の「ログイン」からログイン画面に入ります。
IDとパスワードを入力し、ログインします。
ログイン後、画面下にスクロールし「貸出・予約状況照会」をクリックします。
貸し出している本が全て見える位置まで下に画面をスクロールさせます。
その後、画面左上の「ログアウト」よりログアウトして画面も閉じて終了します。
ここで、Selenium IDEも記録を終了させます。
記録開始時と同じく、Selenium IDEの右上のボタン(赤い丸で囲った箇所)を押して、記録を終了します。
終了後、Selenium IDEにはログイン、スクロール、ログアウトに至る過程が記録されています。
この情報をソースコードに組み込んで、これまでの一連の動作にキャプチャの動作を加えて自動化してみます。
pythonからブラウザを操作するには、Selenium IDEのAPIである「Selenium WebDriver」が必要です。
Selenium WebDriverは
Selenium Projects
から取得できます。ここより各自のOSに合ったファイル(geckodriver.exe)をダウンロード後、pythonの起動フォルダのpathが通る場所に置いておきます。
さらにコマンドプロンプトで、Seleniumモジュールをインストールします。
pip install -U selenium
ソースコードは以下の通りになります。
図書館サイトに自動アクセスし、自分の貸出状況画面をスクリーンショットで取得する
実際にソースコードを動かして、作成されたキャプチャは以下の通りになりました。
ちゃんと図書の貸し出し状況の画面がスクリーンショットされています。
なお、ソースコードについてですが、
driver = webdriver.Firefox()
で、Firefoxを立ち上げています。
driver.find_element_by_id("userid").send_keys("ABCDEFG")
driver.find_element_by_id("p_check_text_pass").send_keys("123456")
driver.find_element_by_css_selector("input.btn_lead").click()
で、ログインするためのIDやパスワードを入力し、ログインボタンを押しています。
"userid"や"input.btn_lead"の情報はSelenium IDEに記録されたデータから書いています。
scroll_scipt = "window.scrollTo(0,180)"
driver.execute_script(scroll_scipt)
で、画面下にスクロールしますがjavascriptのコードを実行することでスクロールを可能にしています。