みなさんは日常生活や日常業務の中で、定常的に発生している作業はありませんか?
今回の記事では、
- Pythonを用いた業務自動化に興味がある
- ルーティン化しているWeb操作から解き放たれたいと考えている
という人に向けて、PythonにWeb予約を任せるための4つのステップを紹介していきます。
※Pythonの写経用コードを紹介している別記事はこちら
PythonにWeb予約を任せるための4つのステップ
PythonにWeb予約を任せるとは、Web予約の際に人がマニュアルで行っている操作を、プログラミングにより、コンピューター(機械)に代替させることです。
一般的に、自動化されたプログラムをBOT(ボット)とも呼んだりします。
次の4つのステップで構成されます。
- 指定した日時にプログラムを実行させる
- WEB予約サイトに機械が入る
- 予約に必要な情報の入力&選択を行う
- 申込の結果をLINEで送る
各ステップで使われる技術と大まかな流れを紹介していきます。
Web予約の4つのステップ
① 指定した日時にプログラムを実行させる
最初に紹介するのは「sched」です。
schedは指定した日時にプログラム実行をしてくれるイベントスケジューラーのモジュールです。
WEB上の予約サイトは、予約の受付開始日時が決まっている場合が多いです。そして、人気が高いサービスの場合は、予約受付開始直後に予約が埋まってしまうことがあります。
著者が使っているサービスでも、予約の受付開始時間が朝5時台という早い時間帯にも関わらず、数分で予約が埋まってしまうサービスでした。
このように、朝早い時間帯に予約が必要な場合でも、schedを用いることで、人様は寝たままでも、機械(パソコン)が指定した時間に予約することが可能となります。
② WEB予約サイトに機械が入る
次にご紹介するのは、「Selenium(セレニウム)」です。
Seleniumはブラウザ操作を自動化するためのソフトウエアです。Google ChromeやFirefoxなどブラウザに対応しています。
人がWEBサイトで予約を行う場合、サイトにログインした上で、日時やコースを選択するなどの操作を、「ブラウザの画面を見ながら」、「キーボードで入力する」や「マウスでボタンをクリックする」などの操作を通じて行います。
このような人が行う操作を、Seleniumを用いることで容易に機械に代替させることが出来ます。
とは言え、もともとコンピューターの世界で行われていることを、コンピューターにやらせるだけなので、出来て当然とは言えば、当然です。
一方で、機械(ボット)対策がなされているサイトでは、自動予約システムの実現は難しくなります。
機械(ボット)対策とは、ログイン時に、複数の画像の中から指定したオブジェクトの選択を求めたり、歪んだ文字を読み取ったうえで入力を求めたりする、ログイン認証システムのことです。
これらは、機械(ボット)による不正ログインを防ぐ目的で使われております。
代表的な認証システムとして、Google社が提供するreCAPTCHA(リキャプチャ)があります。
Python×Seleniumで、reCAPTCHAを突破する試みなどもあるようですが、技術的な難易度は高くなるので、自動化ができないサイトもあると割り切る必要もあります。
③ 予約に必要な情報の入力&選択を行う
ログインした後は、所定の操作で予約の処理を進めていくことになります。
Seleniumを用いて次の3つの操作ができるようになれば、基本的なブラウザ操作の自動化はできるようになります。
- 操作したいエレメントを指定する
- テキスト入力を行う … ユーザーIDやパスワードの入力や数量の指定など
- ボタンを押す … 「次」や「OK」などのボタン
エレメントとは、HTMLの文章を構成する要素を指します。
エレメントの指定は、ブラウザ上で操作したいエレメントのID属性やNAME属性を確認しながら設定できるので、HTMLの知識がなくても可能です。
1点注意が必要なのは、エレメントのID属性名には、静的ではないものがあるということです。
著者が実際に経験した失敗エピソードとして、ある予約サイト向けに作った自動予約プログラムについて、事前に十分なデバッグ(動作検証)を行ったにも関わらず、本番となる別の日に実行させたところ、予約に失敗した経験があります。
原因は、あるエレメントのID属性名が変わっていたためでした。その後の調査により、そのID属性名は日付に連動して変わることが分かったため、最終的には対処することが出来ましたが、一度失敗しないと気付くことができない類の問題でした。
機械で予約できることのメリットは自動化だけではありません。予約処理はプログラムに従い実行されることから、予約手続きの過程で何らかの判断が必要となった場合でも、機械的に判断をすることが可能となるため、人間が頭で考えるより迅速に処理することができます。
たとえば、第1希望の時間帯の予約枠が埋まっていた場合は、第2希望の時間帯に切り替えて予約を入れることができます。他にも、金額が最も安い時間帯に予約を入れるなどの処理を行うことも出来ます。
このような判断を人がパソコンの前で行っていた場合、考えている間に予約が埋まってしまっていた、なんてことも起こり得ますが、機械に任せれば、予約が埋まるリスクも下げられます。
④ 申込結果をLINEで送る
最後は、紹介するのは「LINE notify」を利用した、実行結果の通知についてです。
LINE notifyを用いることで予約結果を自動で通知することができます。
はじめは、G-mailで結果通知することも考えたのですが、予約結果を通知するだけであれば、LINEの方が手軽で使いやすいと思い、LINEを選択しました。
LINEを使うことで、
- 指定時間にプログラムが正常に起動したことを伝えるメッセージ
- ログインに成功したことを伝えるメッセージ
- 空き時間の有無を伝えるメッセージ
- 予約完了時の画面キャプチャの添付
などを、リアルタイムでひとつひとつ通知することができるので、進捗報告をこまめてに挙げてくれる部下みたいなイメージで、いい感じに機能してくれます。
そして、LINE notifyを使うためには、アクセストークンを発行すればいいだけなので、誰でも簡単に使えます。Python上でも5~6行程度で実装できます。
まとめ
今回の記事では、「機械にWeb予約を任せてみるための4つのステップ」を紹介していきました。
大まかな流れは、Pythonを用いて、
- schedで指定した時間にプログラムを起動し、
- Seleniumでブラウザ操作の起動&ログインを行い
- Seleniumでブラウザ上の操作の自動化を行い
- Line notifyで結果の通知を行う
ことで、Web予約システムの自動化が実現します。
今回の例のように、Pythonは、科学技術計算や機械学習のためだけでなく、WEB操作の自動化にも使える便利なプログラミング言語です。
みなさんの日々の業務効率化にも役立つ可能性がありますので、興味がある方は、関連記事に写経用コード付きの記事も掲載していますので、参考にしてみてはいかがでしょうか。
私たちは20代から50代のビジネスパーソンに向けて、パラレルキャリア研究会というコミュニティーを運営しています。当研究会はデータサイエンスについても互いに学び合う場を提供しています。
私達と一緒に学んでみたいという意欲のある方、データサイエンスの自学自習に少しでも興味がある方は、お気軽にこちらからお問い合わせください。
じゃあ
関連記事