6
8

More than 3 years have passed since last update.

Pythonで自動予約を作る

Posted at

はじめに

予約制の施設を使うことになったが、ネット予約がいちいち面倒なので、自動化を試みる。
使うのはPython3とseleniumである。

環境

・MacOS High Sierra ver10.13.6
・Python3

自動ログイン

先ずは予約画面に入るための自動ログインを行う。

autolog.py
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→各曜日の予約指定画面
と言う謎の予約画面がある。
とりあえず各曜日の予約指定画面まで行き、各曜日の予約画面を開いて空き状況を確認する。

aut.py
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でブラウザを自動操作
Python + Selenium で Chrome の自動操作を一通り

6
8
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
6
8