なぜ作ろうと思ったか
自動車学校を転校した先が技能や講義が、webでの予約でした。21時に1週間の予約が解放され、 一斉アクセスが起こり、アクセスエラーが起こり、予約画面に移れなかったり、予約画面に入れても、予約が取れるのは先着順。。。。(笑) 予約がとれないのは珍しいことではなく、1週間のスケジュール調整が必要となることが多々ありました。予約のキャンセルが出るのを定期的に予約画面で確認することもできますが、中々キャンセルになることはないです。 そんなシステムにストレスを感じていた私は、ITに興味を持ち、pythonを独学していたのでpythonを使った自動予約システムを作ることにしました。なぜpython
私自身、最初に勉強したのがpythonだからです。pythonは、最初に習う言語として習得しやすく、プログラミング言語に苦手意識を持たずに始められました。webスクレイピングについて
Webスクレイピングとは、Webサイトから特定の情報を自動的に抽出する技術のことです。 この技術を使って、以下の流れで自動ログインを試みました。1.Edgeの起動(Driverのあるブラウザであればどのブラウザでも大丈夫です。)
↓
2.サイトにアクセス
↓
3.ログイン
↓
4.講習の選択
↓
5.ページ内の特定エレメントのクリックとスクロール
1.Edgeの起動
まず、使っているブラウザのバージョンを最新版にします。最新版でなくてもDriverのverを合わせれば使えると思いますが、余計なエラーが発生してしまうと面倒なので、最新版にすることをお勧めします。私は、このエラーの処理時間を取られてしまいました。
使いたいブラウザのDriverをインストールを行ったら、ブラウザを起動するコードを書いていきます。
↓Edge Driverのインストール
https://developer.microsoft.com/ja-jp/microsoft-edge/tools/webdriver/?form=MA13LH#installation
↓起動のコード
※コピペの際は、driverのファイルパスを指定する必要があります。
# Edgeブラウザのオプションを設定するためのオブジェクトを作成
options = Options()
# GPUを無効にするオプションを追加
options.add_argument('--disable-gpu')
# ブラウザの拡張機能を無効にするオプションを追加
options.add_argument('--disable-extensions')
# プロキシを直接接続に設定し、プロキシを無効にする
options.add_argument('--proxy-server="direct://"')
# 全てのホストに対してプロキシをバイパスするオプションを追加
options.add_argument('--proxy-bypass-list=*')
# ブラウザを最大化した状態で起動するオプションを追加
options.add_argument('--start-maximized')
# EdgeDriverの実行ファイルのパスを指定
driver_path = r"your_path"
# 指定したパスのサービスオブジェクトを作成
service = Service(executable_path=driver_path)
# EdgeDriverのインスタンスを作成
driver = webdriver.Edge(service=service, options=options)
2.サイトにアクセスと3.ログイン
↓サイトへのアクセスとログインのコード
※URL、USER_ID、PASSWORDを入力してください。
# 指定されたURLにアクセスしてログインページを開く
driver.get("URL")
# ログインフォームのID入力欄を探し、ユーザーIDを入力する
driver.find_element(By.NAME, "ID").send_keys(USER_ID)
# ログインフォームのパスワード入力欄を探し、パスワードを入力する
driver.find_element(By.NAME, "Pass").send_keys(PASSWORD)
# ログインボタンを探し、それをクリックしてログインを実行する
driver.find_element(By.ID, "login_btn").click()
4.講習の選択
最初に技能予約か座学講習の選択をします。 以下のコードでは、XPath式を使って、Webページの要素の中から、value属性が「技能予約」である最初の要素を検索しています。 XPathは、webページ内の検証を使ってXPath式を取得しました。# WebDriverのインスタンスを使用して「技能予約」ボタンをクリックする
# 講習のボタンをXPathを使って見つける
button = driver.find_element(By.XPATH, "//*[@value='技能予約']")
# 見つけたボタンをクリックする
button.click()
5.講習時間の選択
講習時間の選択の際、スクロールする必要がありました。そのため、スクロールするコードを入れてから講習時間のボタンをクリックするようにします。win_height = driver.execute_script("return window.innerHeight")
last_top = 1
last_height = driver.execute_script("return document.body.scrollHeight")
top = last_top
top += int(win_height * 10.5)
driver.execute_script("window.scrollTo(0, %d)" % top)
submit = driver.find_element(By.XPATH, "/html/body/div[2]/table[2]/tbody/tr[6]/td[6]")
submit.click()
最後に
↓以下の記事を参考にさせていただきました。
私の記事が参考になれば幸いです。
何か気になることがあれば教えてくれる嬉しいです!