ワクチン予約のキャンセル通知システム作ってみた

目的!

  1. コロナワクチン予約をキャンセル待ちしたい!

使ったもの

  • python
  • selenium:予約サイトへのログイン用
  • crontab:定期実行用
  • slack:通知先

やったこと

予約はいっぱいだったので、たまにキャンセルが出て一瞬予約できるっぽい > それを検知してみる! ワクチン予約サイトを定期的にチェックして、空きが出たらslackに通知する仕組みを作る!

準備

使った環境などを雑に並べる

ざっくり処理の抜粋&説明

※とりあえず通知まで行くために、エラー処理やsleep処理はだいぶ適当

headlessブラウザで実行

option = Options()
option.add_argument('--headless')
driver = webdriver.Chrome(chrome_driver_path, options=option)
driver.get(target_url)

自分のワクチン番号&パスワードを使ってログイン(selenium

number = driver.find_element_by_css_selector("input[type=\"tel\"]")
number.send_keys(coupon_number)
sleep(1)
password = driver.find_element_by_css_selector("input[type=\"password\"]")
password.send_keys(passwd)
sleep(1)
driver.find_element_by_css_selector("input[type=\"checkbox\"]").click()
sleep(1)
driver.find_element_by_css_selector("button[type=\"submit\"]").click()
sleep(3)

予約サイトで予約可能な会場の件数を取得(速度はいらないので、そのままselenium

driver.find_element_by_xpath("//*[text()=\" 新規予約\"]").click()
sleep(1)
driver.find_element_by_xpath("/html/body/div[1]/div/div[2]/div/div/button[1]").click()
sleep(2)
driver.find_element_by_css_selector("input[type=\"checkbox\"]").click();
sleep(3)
element = driver.find_element_by_class_name("page-department-search_nav-header__count")
result = re.sub(r"\D", "", element.text)

slack通知

  1. slackワークスペース設定で「Incoming Webhook」を追加してWebhookURLをコピー
  2. slackwebを使って通知(めっちゃ簡単に通知できた!)

参照 Python3でslackに投稿する - Qiita

import slackweb

…

slack = slackweb.Slack(url=slack_webhook_URL)

if result != "0":
    print(result);
    slack.notify(text="<!channel> 空いてるよ!!!")
else:
    print("空いてなかったよ")

定期実行

プログラムの定期実行はなんとなくmacのcrontabを利用!(1分ごとに実行) 通知が来たら素早く予約サイトにアクセスして予約完了!

詳細コードは↓ GitHub - kyamada23/covid19itami-vaccine-check

詰まったところなど

crontabの環境変数問題

crontabで定期実行するも全然動いてくれない。 crontabではPATHが全然通ってなくてpythonが動いていないっぽい ↓を参考に解決!

【保存版】cronでPython3を定時実行する方法&注意すべき4つのポイント | たぬハック

定期実行が途中で止まる問題

1回1回seleniumでブラウザを起動しっぱなしで、ブラウザが溜まり続けてたのが問題だった ちゃんと終わりましょう driver.quit() ↓参照 Selenium - かならずwebdriverを閉じる - Kobe's Public Scrapbox

感想

2,3時間で10件以上キャンセルは出てたっぽいので、F5アタックでも普通に予約できたかも。 でも作った通知システムで予約できたことですごい満足

ちなみに今回は伊丹市のワクチン予約サイトでしてみました。 ワクチン打つと伊丹消滅するらしい コロナワクチン予約システム