最近趣味のテニスがあまりできていないので、テニスコートを簡単に確保できないかと考えてコートの空きを自動で確認するということを実施してみました。SeleniumとChromedriverを初めて使ったのですが簡単にできてしまうものなんですね。
(Seleniumくらい皆さん使用したことあるかもですが)
やりたいこと
テニスコートの空きを自動で確認する
環境
- Python 3.10.1
- Selenium 4.1.0
- Chromedriver 99.0.4844.51.0
予約サイトにアクセスしてログイン
ログイン情報(登録番号とパスワード)を設定している設定ファイル(jsonファイル)を読み込み、ブラウザ(Chrome)を起動し、予約サイトにアクセスしログインが以下の内容で実施できます。
# 設定ファイルを読み込む
config = json.load(open('/Users/xxxxxxx/xxxxxxx/config.json', 'r'))
# ブラウザを起動
options = Options()
options.add_argument('--headless') # ヘッドレスモード指定
options.add_argument('--incognito') # シークレットモード指定
driver = webdriver.Chrome(options=options)
# 予約サイトのトップ画面を開く
driver.get("https://yoyaku.sports.metro.tokyo.lg.jp/user/view/user/homeIndex.html")
# トップ画面でログインするボタンを押下
topLoginButton = driver.find_element_by_id('login')
topLoginButton.click()
# ログイン画面で登録番号とパスワードを入力してログインボタンを押下
userIdInput = driver.find_element_by_id('userid') # 登録番号の入力項目をid指定で取得
userIdInput.send_keys(config['userId']) # 設定ファイルから登録番号を取得して入力項目にセット
passwordInput = driver.find_element_by_id('passwd') # パスワードも登録番号と同様
passwordInput.send_keys(config['password'])
loginScreenLoginButton = driver.find_element_by_id('login')
loginScreenLoginButton.click()
ログイン後の操作も同じように
入力項目やボタンをidやnameやxpathなどで特定さえできれば、上記のような感じで簡単に画面操作できてしまいました。この要領でコートと日付を選択して予約枠に空きがあるかの確認も簡単に実装することができました。
…ただ動作確認のため実行を何度も繰り返していたら急にレスポンスが悪くなってしまいました、、、
どうやらあまりやり過ぎるとアクセス制限をかけられてしまうようなのでNGということなのでしょうね、、
怒られるようなことはしたくないのでほどほどにします。
けどSeleniumとChromedriver使ってこんなに簡単にスクレイピングできるということは覚えておきたいと思います。