COVID-19感染防止のため2020年度前期の講義がオンライン形式で行われたため、その時に使用していたプログラムを公開します。 2020年度後期は対面形式へ戻る予定ですが、COVID-19の感染状況によって2020年度後期も講義がオンライン形式で行われることが確定しましたらこの記事は非公開にします。
1. 作成経緯
今回のプログラムを作成するきっかけとなった水曜日の2コマの講義の形式がこのようなものでした。
- 資料配布するから次の講義までに課題を解いて提出する
- 10:30~10:50の時間帯にWebClass1へログインして出席登録をする
資料をもとに課題をやるのはわかるのですがなぜわざわざ指定時刻帯にWebClassで出席登録を行わなければならないのか? 課題提出をもって出席とみなしても良いのでは? という点がこの講義の不満要素でした。 配布資料の内容はとてもわかりやすく、課題の難易度もそこまで高くなかったためこの不満要素が顕著に感じました。
ある日に、YouTubeでこの動画を見てもしかしたら出席登録を自動化できるのでは?という考えました。 この動画をではプログラミングによってブラウザの操作を自動化していました。 この動画のようにブラウザの操作を自動化することによって出席登録を自動化できると考え実際に挑戦しました。
2. 作成したコードと解説
今回のプログラムはPythonとSeleniumを使用しました。 コードの公開にあたって一部編集しています。
from selenium import webdriver import time from datetime import datetime import sched def Attend(): driver = webdriver.Chrome() driver.maxmize_window() driver.implicitly_wait(3) url_login = '学内サービス' driver.get(url_login) time.sleep(3) USER = 'userid'#ログイン名 element = driver.find_element_by_id('userid') element.clear() element.send_keys(USER) PASS = 'password'#パスワード element = driver.find_element_by_id('js-password') element.clear() element.send_keys(PASS) loginBtn = driver.find_element_by_name('login1') loginBtn.click() time.sleep(3) element = driver.find_element_by_id('myjikanwari-tab') element.click() time.sleep(3) period = 2 #時限 week = 3 #曜日 element = driver.find_element_by_xpath('/html/body/main/div[1]/div/div[2]/div/table/tbody/tr[' + str(period) + ']/td[' + str(week) + ']/form') element.click() time.sleep(3) driver.switch_to.windows(driver.window_handles[-1]) element = driver.find_element_xpath('/html/body/header/nav/div[2]/div/ul[3]/li[4]/a') element.click() time.sleep(3) n = 10 #講義回数 element = driver.find_element_xpath('/html/body/main/div/div/table/tbody/tr[' + str(n) + ']/td[1]/a') element.click() time.sleep(3) driver.switch_to.frame('contentsInfo') button = driver.find_element_by_name('next') button.click() time.sleep(3) driver.switch_to.frame('answer') radio = driver.find_element_by_id('1_1') radio.click() time.sleep(3) button = driver.find_element_by_id('GradeBtn') button.click() time.sleep(3) element = driver.find_element_by_name('grade') element.click() time.sleep(3) element = driver.find_element_by_xpath('/html/body/header/nav/div[2]/div/ul[1]/li[1]/a') element.click() time.sleep(3) driver.quit() #実行時刻 hour = 10 minute = 35 now = datetime.now() now = datetime(now.year, now.month, mow.day, now.hour, now.minute, 0) comp = datetime(now.year, now.month, now.day, hour, minute, 0) diff = comp - now if int(diff.days) >= 0: scheduler = sched.scheduler(time.time, time.sleep) scheduler.enter(diff.seconds, 1, Attend) scheduler.run()
プログラムの設計はこのようになっています。
- 指定の時刻まで待機し、指定の時刻なったらブラウザを起動、学内サービスにログインする。
- 受講している科目のWebClassのページにアクセスして出席の登録を行う。
指定の時刻まで動作を待機するプログラムは以下の投稿を参考にしました。
指定の時間まで待機するpythonプログラム
Seleniumを使用してブラウザを操作するプログラムは以下の動画を参考にしました。
Pythonで面倒な「ブラウザ操作」や「データ収集」の作業を自動化しよう|Webスクレイピングのやり方をわかりやすく解説
3. 感想
Pythonはプログラミング言語の中でもとくに人気がある言語であるためインターネット上に日本語の解説記事が多くあり、コードの記述はそこまで難しくなかったと思います。 100行にも満たない記述のコードでわざわざ出席の登録をするためだけに起きるというストレスが改善され、また、オンライン講義に出席したのにもかかわらず、WebClassでの出席の登録を忘れるというミスを無くすことができたのはとても素晴らしいことだと思いました。
-
日本の大学向けに開発された国産のLMS。弊学のみならず全国の多くの大学で導入されている模様。↩