LoginSignup
21
14

More than 3 years have passed since last update.

PythonとSeleniumで自動ログインを行う

Last updated at Posted at 2021-05-03

はじめに

某クレジットカードの明細書の確認に毎回ログインが必要なため、自動でログインできるようなシステムを作成する。

ブラウザ上に直接情報を入力するために今回は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の動作

動作を確認するため、公式サイトにあるコードを実行してみます。(少し編集してます)

sele-tu.py
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のバージョンはコチラ

再度実行
スクリーンショット (127).png

無事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')

楽天カードのログインページを開きます
スクリーンショット (129).png

mail = driver.find_element_by_name('u') 
password=driver.find_element_by_name('p') 

ChromeのデベロッパーツールなどでHTMLの要素を確認します。基本的に特定のページに関してはname,class,idタグからなどから要素を特定する方が楽なのかなと思います。
スクリーンショット (133)_LI.jpg

上の図だと、ユーザ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()でもいけるみたいです。

結果

無事ログイン後の明細書の画面まで行くことが出来ました。
スクリーンショット (133).png

使いこなせればデータの収集や自動操作など、幅広い用途に関して使えそうだと思いました。

次回はこれをワンクリックできるようなWindowsアプリを実装する予定です。

21
14
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
21
14