かずきち。の日記

サーバサイドエンジニアのつぶやき

python×selenium!つい勢いでbenefit stationの自動ログインスクリプトを作ってしまった!

benefit stationとは?

知っている方も多いと思いますが、企業が導入している福利厚生サイトです。
飲食店やレジャー施設の割引情報が掲載されている。
がしかし、ログインが必要なのである。

f:id:kazukichi_0914:20210607143247g:plain
引用:https://bs.benefit-one.co.jp/bs/pages/bs/top/top.faces

こんなインターフェースでトップ画面にログイン画面がある。

人間がIDとパスワードを入力しないといけないわけだ。

大問題である。
ここのログインを突破して、中の福利厚生情報を全部抜きたい。
このログイン、スクリプトで突破しましょう。

使ったライブラリなどは

import time                            # スリープを使うために必要
from selenium import webdriver         # Webブラウザを自動操作する(python -m pip install selenium)
import chromedriver_binary             # パスを通すためのコード
from selenium.webdriver.common.keys import Keys #タイピング操作
from selenium.webdriver.common.action_chains import ActionChains
import time

です。
コード自体は20行くらいで、benefitstationをハックします。

完成コード
#ChromeDriverのパスを引数に指定しChromeを起動
driver = webdriver.Chrome() 
#指定したURLに遷移する
driver.get("https://bs.benefit-one.co.jp/bs/pages/bs/top/top.faces")

actions = ActionChains(driver)
actions.perform()

driver.find_element_by_id("cmnHederForm:textfield").send_keys("ログインID\tログインパスワード\n")
actions = ActionChains(driver)
actions.perform()

time.sleep(5000)

動作している場面はYouTubeに上げましたのでのちほど。
その前に簡単に解説をします。
webdriver.Chrome()はpythonからGoogleChromeを立ち上げるために使います。


driver.find_element_by_id("cmnHederForm:textfield").send_keys("ログインID\tログインパスワード\n")
actions = ActionChains(driver)
actions.perform()

ここが肝心要のログインを突破する部分です。
詳しく解説していきますね。

ここでやっていることは「cmnHederForm:textfield」というテキストフィールドをブラウザ上から探して、値記入をしているわけです。
で、cmnHederForm:textfieldっていう謎な文字列はどこからでてきたんだ?っていう疑問です。

使うのはGoogleChromeデベロッパーツールです。
f:id:kazukichi_0914:20210607144542g:plain

ウェブページの構成要素を洗い出してくれます。
Google Chrome⇢「右上︙」⇢その他のツール⇢デベロッパーツールを立ち上げます。
普通の人は使わない開発者向け機能です。

f:id:kazukichi_0914:20210607144918g:plain

このページを開くとウェブページの構成やXPATHなどの情報が抜けるんです。f:id:kazukichi_0914:20210607145428g:plain


この画像の矢印で囲んである「□」ボタンを押してください。

そうするとウェブページの構成idやPATHが全部抜けるんです。

ここから「cmnHederForm:textfield」というフィールドがID名を入力するボックスのXPathを示していることがわかります。

フィールドを特定したら、そこに文字を入力したいので…

driver.find_element_by_id("cmnHederForm:textfield").send_keys("アカウント名\tパスワード\n")
actions = ActionChains(driver)
actions.perform()

を書くだけです。めっちゃ短いですよね。アカウントとパスワードには自分のログイン情報を使ってください。
\tはタブキーのエスケープシーケンスです。
プログラムから特殊文字を入力するためのテクニックです。
エスケープシーケンスは言語ごとに異なっていて、

エスケープ シーケンス 文字名
\’ 単一引用符(「’」)
\” 二重引用符(「”」)
\\ 円記号(「\」)
¥0 null文字
\a アラート音(警告)
\b バックスペース
\f 改ページ(フォームフィード)
\n 改行(ラインフィード)
\r 復帰(キャリッジリターン)
\t 水平タブ
\v 垂直タブ

引用:https://ict119.com/escapesequence/

自分がC言語を使っているの、pythonを使っているのかによって異なります。
今回はbenefitstationに特化してログインスクリプトを書きましたが、

celeniumでブラウザ操作を自動化します 毎日の提携作業のブラウザ操作やログイン情報入力にも対応

¥15,000〜コードを書くのでソシャゲーの経験値上げを自動化したい、チケットの購入サイトアクセスを自動化したいなど要望にお答えします。
使用言語はpythonになります。