#はじめに
予約制の施設を使うことになったが、ネット予約がいちいち面倒なので、自動化を試みる。
使うのはPython3とseleniumである。
#環境
・MacOS High Sierra ver10.13.6
・Python3
#自動ログイン
先ずは予約画面に入るための自動ログインを行う。
from selenium import webdriver
driver=webdriver.Chrome("パス")
url="https://www.google.com"
driver.get(url)
#urlを開く
login_id=driver.find_element_by_xpath("//input[@id='txtUserID']")
login_pw=driver.find_element_by_xpath("//input[@id='txtpassword']")
#IDとpassの打ち込みformの取得
userid="ID"
userpw="PASS"
login_id.send_keys(userid)
login_pw.send_keys(userpw)
#IDとpassを打ち込む
login_btn=driver.find_element_by_xpath("//input[@id='btnLogin']")
login_btn.click()
#loginを押す
パスは絶対パスでChromeのwebdriverがあるところを参照する。場所がわからないときはterminalでdriverのあるfolderまで移動してからpwdで確認する。
サイトURLは秘密なのでとりあえずGoogleの検索画面を貼っておく。
#予約状況の確認
自動ログインをしたら、予約状況の確認を行う。
このサイトは何故か
login→予約画面1→予約画面2→各曜日の予約指定画面
と言う謎の予約画面がある。
とりあえず各曜日の予約指定画面まで行き、各曜日の予約画面を開いて空き状況を確認する。
reserve1=driver.find_element_by_id("ctl00_ContentPlaceHolder1_link01")
reserve1.click()
#予約画面1
reserve2=driver.find_element_by_id("ctl00_ContentPlaceHolder1_lnkFree")
reserve2.click()
#予約画面2
counter=[0,0,0,0,0,0,0]
#予約が空いている曜日は0、空いてなければ1にする
for num in range(1,8):
date="ctl00_ContentPlaceHolder1_lnkDate"
date=date+str(num)
date_page=driver.find_element_by_id(date)
date_page.click()
if driver.find_elements_by_id("ctl00_ContentPlaceHolder1_lblErr"):
counter[num-1]=+1
driver.back()
driver.quit()
print(counter)
for文の中を少し説明。
各曜日のidが{dateに代入した文章+数字(1~7)}であったのでfor文を用いてタグを取得できるようにした。
予約画面では、予約が一杯の時にのみ表示される文章があるため、その文章のタグを用いて判定する。
具体的にはseleniumでの要素取得に置いてelementではなくelementsを用いた。elementsの場合はその要素の個数が返ってくるためif文の真偽判定に利用した。予約が一杯であればcounterの指定した要素が1になる。
#自動予約
予約状況の確認ができる=空きが判定できる
ということで空きがあるpageでの予約を行う。
しかし、空いている時のsource pageをまだ入手していないため、一先ずここで区切るとする。
#参考文献
楽しいQiitaの使い方 壁10罠6つ技7つ
[PythonとSeleniumでブラウザを自動操作] (https://tanuhack.com/selenium/#WebDriver)
Python + Selenium で Chrome の自動操作を一通り