#はじめに
某クレジットカードの明細書の確認に毎回ログインが必要なため、自動でログインできるようなシステムを作成する。
ブラウザ上に直接情報を入力するために今回はSeleniumというスクレイピングやWEB操作のフレームワークを利用します。
クイックリファレンスが分かりやすくて便利かなと思います。
#環境
・Windows 10
・Chrome 90.0.4430.93
・Python 3.9.1
・ChromeDriver 90.0.4430.24.0
・Selenium 3.141.0
#初期設定
##seleniumu
Pythonが入っていればpipでインストールできます。
$ pip install selenium
##ChromeDriver
Pythonが入っていればselenium同様にpipできます。
$ pip install chromedriver-binary
本来ならバイナリを直接ダウンロードして環境変数でPathを通す必要があるみたいですが、pipでインストールした場合には自動的にPathが通っているみたいです。
#Seleniumの動作
動作を確認するため、公式サイトにあるコードを実行してみます。(少し編集してます)
import time
import chromedriver_binary
from selenium import webdriver
driver = webdriver.Chrome() #WEBブラウザの起動
driver.get('http://www.google.com/') #特定のURLへ移動
time.sleep(2)
search_box = driver.find_element_by_name('q') #ページ上の要素の取得
search_box.send_keys('ChromeDriver')
search_box.submit()
簡単に説明
driver = webdriver.Chrome()
ブラウザを開きます。本来ならwebdriver.Chrome()
の部分でChromedriverのバイナリファイルのパスを引数に設定する必要があるのですが、今回はpipでchromedriver_binaryをインストールしているため不要
driver.get('http://www.google.com/')
任意のURLのページに移動する
search_box = driver.find_element_by_name('q') #ページ上の要素の取得
search_box.send_keys('ChromeDriver')
search_box.submit()
ページ上の要素を取得して、その要素に対してアクションを行っています。
この流れでWEBページの情報を取得して、ページを切り替えていくのがSeleniumの強みらしいです。
結果(エラー)
selenium.common.exceptions.SessionNotCreatedException: Message: session not created: This version of ChromeDriver only supports Chrome version 91
Current browser version is 90.0.4430.93 with binary path C:\Program Files\Google\Chrome\Application\
ChromedriverとChromeのバージョンが合ってないとの事なので、Chromedriverの方を調整します
$ pip pip install chromedriver_binary==90.0.4430.24.0
Chromedriver_binaryのバージョンはコチラ
無事Chromeが開いて検索まで行うことが出来ました。
#実装
某クレジットカードページに対して、ページを開きログインまでを実装してみます。
import time
import chromedriver_binary
from selenium import webdriver
driver = webdriver.Chrome() #WEBブラウザの起動
driver.get('https://www.rakuten-card.co.jp/e-navi/index.xhtml')
time.sleep(1)
mail = driver.find_element_by_name('u')
password=driver.find_element_by_name('p')
mail.clear()
password.clear()
mail.send_keys("my email")
password.send_keys("my password")
mail.submit()
簡単に解説
driver.get('https://www.rakuten-card.co.jp/e-navi/index.xhtml')
mail = driver.find_element_by_name('u')
password=driver.find_element_by_name('p')
ChromeのデベロッパーツールなどでHTMLの要素を確認します。基本的に特定のページに関してはname,class,idタグからなどから要素を特定する方が楽なのかなと思います。
上の図だと、ユーザIDのテキストボックスのnameタグはu
、パスワードのnameタグはp
と分かったのでそれに対する要素を取得します。
mail.clear()
password.clear()
要素の初期値を消します。
mail.send_keys("my email")
password.send_keys("my password")
IDとPASSの要素に値を入れます。
mail.submit()
要素に入れた情報を送信します。
今回はsumbit()
にしていますがログインボタンの要素を取得してclick()
でもいけるみたいです。
#結果
無事ログイン後の明細書の画面まで行くことが出来ました。
使いこなせればデータの収集や自動操作など、幅広い用途に関して使えそうだと思いました。
次回はこれをワンクリックできるようなWindowsアプリを実装する予定です。