2月末で退職し、引っ越しの準備以外は家にいるため、久しぶりにPythonでwebサイトの操作を自動化してみました。
プログラミングをするために去年M1チップのMacBook Airを買ったんですけど、いいですよ。性能やバッテリーの持ちがとてもいいですし、iPhoneと簡単にデザリングできるし、データ共有も簡単です。MacだからExcel VBAが十分にできなかった以外に不満はないです。
自動化しようと思ったきっかけ
あるサイトのweb予約システムの操作を自動化してライバルに勝つためです。
最近までは予約開放日時が指定されていて、スピードの問題でした。
しかし、今は指定なしにこっそり(?)予約受付をしているようなので、定期的にサイトにアクセスして情報をとりたいと思いました。
事前にあったほうがいい知識
webサイトはHTMLで作成されています。HTMLの勉強はしていたほうがいいでしょう。
知っとくとwebサイト作れたりするので、ためになります。
おすすめの本を参考にして環境を作る
この本にMac、Windowsそれぞれに対して、Python、ライブラリのインストールの仕方からwebサイトのデータの抽出までわかりやすく記載されています。
ライブラリはPythonの機能を強化するものです。
Pythonは公式サイトでPython 3をインストールします。
今回は主にSeleniumというライブラリを使用しました。ライブラリはWindowsではコマンドプロンプト、Macではターミナルでインストールします。
Windows: pip install selenium
Mac: pip3 install selenium
こちらを打ち込めばインストールします。
ChromeDriverもダウンロードする
こちらのサイトからダウンロードしてください。
注意なのは事前にChromeのバージョンを調べて、それに合ったものをダウンロードしてください。1年前にダウンロードしてたChromeDriverは動きませんでした。Chromeはアップデートしてますからね。Chromeの「設定」→「Chromeについて」で調べられます。
IDLEでプログラム実行
Pythonダウンロードの際にIDLEというPythonを実行するアプリもインストールされています。アプリを開いて、新規作成[Ctrl + N]を選ぶとコードを入力するウインドウが開きます。コードを記入し、実行[F5]を繰り返し、動作を確認します。
うまくいったコード
まず結論から。
# coding:utf-8 from selenium import webdriver from selenium.webdriver.common.keys import Keys import time # ブラウザを開く。 driver = webdriver.Chrome(executable_path="ChromeDriverのパス") # 予約ページを開く driver.get("予約サイトログインページのurl") # ログインIDを入力 login_id = driver.find_element_by_name("name属性値") login_id.send_keys("入力するID") # パスワードを入力 password = driver.find_element_by_name("name属性値") password.send_keys("入力するパスワード") #ログインボタンをクリック login_btn = driver.find_element_by_xpath("ログインボタンのxpath") login_btn.click() ・・みたいページまでボタンクリック操作をするコード・・ # フッターまでスクロール target = driver.find_element_by_xpath("フッターのxpath") target.location_once_scrolled_into_view # 60秒待機 time.sleep(60) # ログアウトまでスクロール target2 = driver.find_element_by_xpath("ログアウトのxpath") target2.location_once_scrolled_into_view # ログアウトをクリック out_btn = driver.find_element_by_xpath("ログアウトのxpath") out_btn.click() # 1秒待機 time.sleep(1) # ウインドウを閉じる driver.close()
Google Chrome開発者ツールでXPath取得が便利
Chromeでサイトを開き[F12]をおすと、開発者ツールが開きます。ヤフーの検索ボタンを押したい場合はボタンの要素を調べる必要があります。まずセレクタを押し、検索ボタンを押すと、該当のコードが青くなります。ここを右クリックし、Copy→Copy full XPathで検索ボタンのXPathをコピーできます。これをコードにペーストするだけです。
driver.find_element_by_xpath("コピーしたxpath")
cronで定期的に実行する
こちらのブログを参考にさせていただきました。ありがとうございます 😀
Macを開いている限り、定期的に予約の空き状況を知らせてくれるようになりました。
Windowsはタスクスケジューラでできそうですね。
テキストを抽出することはできなかった
情報がほしい箇所のHTMLは隠されていたため、Pythonでテキスト抽出はできなかったです。テキストを抽出できたら、定期的にLINEに送ることもできそうだったので残念でした。
プログラミングも楽しんだし、引っ越しの準備頑張ります。