「Google Classroom」への自動ログインをPython3 と共に
やりたいこと
「Google Classroom」にログインする作業を自動化させたい。
動作環境
MacBook Pro (13-inch, 2019, Four Thunderbolt 3 ports)
Version : 10.15.1
環境構築(下ごしらえ)
1.「Google Chrome」と、そのバージョンに対応した「chromedriver」をインストールする。
2. Macで「Python3」を使えるように環境構築する。今回はMacの「Terminal」から実行します。
3. pip3 install selenium で selenium をインストールする。
作業フロー
とても、ざっくりと
1. 「chromedriver」を使用して「Google Chrome」を操作する。
2. 「Google Classroom」のサインインページにてユーザIDを入力させる。
3. 2の後、大学ユーザの認証ページへ飛ばされるので、そこでIDとパスワードを入力させる。
とても雑なコード解説
import time
from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
ここでは、必要なモジュールを読み込んでいきまする。
ほぼ「chromedriver」系ですね。また、必要に応じてプログラムを待機させる必要があるのでtimeも読み込んでおきまする。
def start_chrome():
driver = webdriver.Chrome('chromedriverのpath')
driver.maximize_window() # 画面サイズの最大化
# Google ClassroomへのサインインURLを指定
url = 'https://classroom.google.com/?emr=0'
driver.get(url)
return driver
こちらでは「Google Chrome」を起動させます。
2行目、インストールした「chromedriver」のパスを指定。
3行目、「Google Chrome」の画面サイズを指定。
5行目、サインインURLを指定。
6行目、指定したURLを開きます。
def login_google(driver):
login_id = "あなたのgoogleサインインID"
wait_time = 30
# IDを入力
login_id_xpath = '//*[@id="identifierNext"]'
WebDriverWait(driver, wait_time).until(EC.presence_of_element_located((By.XPATH, login_id_xpath)))
driver.find_element_by_name("identifier").send_keys(login_id)
driver.find_element_by_xpath(login_id_xpath).click()
次に、GoogleサインインページでユーザIDを入力させます。
(あっ、、ゲンダイ的に、ユーザーか。。あはははは)
2行目、サインインしたいユーザIDを指定。
3行目、処理を待機させるMaxタイムを指定。
4行目、入力フォーム送信ボタンのxpathを指定。
6行目、5行目で指定した要素が現れるまで最大30秒待機する。
7行目、入力フォームに2行目で指定したIDを入力。
8行目、入力フォームの送信ボタンをクリック。
def login_potal(driver):
###ログイン情報
login_id = "あなたの大学アカウントID"
login_pw = "あなたの大学アカウントパスワード"
wait_time = 30
# IDを入力
login_id_xpath = '//*[@id="login"]'
WebDriverWait(driver, wait_time).until(EC.presence_of_element_located((By.XPATH, login_id_xpath)))
driver.find_element_by_name("twuser").send_keys(login_id)
driver.find_element_by_name("twpassword").send_keys(login_pw)
driver.find_element_by_xpath(login_id_xpath).click()
driver.find_element_by_xpath('//*[@id="view_container"]/div/div/div[2]/div/div[2]/div/div[1]/div/span/span').click()
ここでは、大学の認証を突破します。
言うまでもなく、ここでもやっていることはGoogleにサインインしたこととほぼ一緒ですね。
最後の行は、Googleの本人確認画面の突破用ですね。下のようなやつです。表示されない場合は、コメントアウトでもしておいて貰えばと思いまする。
if __name__ == '__main__':
driver = start_chrome()
login_google(driver)
login_potal(driver)
最後の呪文
1行目、いつもの呪文ですね。
2行目、Chromeを起動させますよと。
3/4行目、それぞれ実行していきますよと。
全体のコード
import time
from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
def start_chrome():
driver = webdriver.Chrome('chromedriverのpath')
driver.maximize_window() # 画面サイズの最大化
# Google ClassroomへのサインインURLを指定
url = 'https://classroom.google.com/?emr=0'
driver.get(url)
return driver
def login_google(driver):
login_id = "あなたのgoogleサインインID"
wait_time = 30
# IDを入力
login_id_xpath = '//*[@id="identifierNext"]'
WebDriverWait(driver, wait_time).until(EC.presence_of_element_located((By.XPATH, login_id_xpath)))
driver.find_element_by_name("identifier").send_keys(login_id)
driver.find_element_by_xpath(login_id_xpath).click()
def login_potal(driver):
#ログイン情報
login_id = "あなたの大学アカウントID"
login_pw = "あなたの大学アカウントパスワード"
wait_time = 30
# IDを入力
login_id_xpath = '//*[@id="login"]'
WebDriverWait(driver, wait_time).until(EC.presence_of_element_located((By.XPATH, login_id_xpath)))
driver.find_element_by_name("twuser").send_keys(login_id)
driver.find_element_by_name("twpassword").send_keys(login_pw)
driver.find_element_by_xpath(login_id_xpath).click()
driver.find_element_by_xpath('//*[@id="view_container"]/div/div/div[2]/div/div[2]/div/div[1]/div/span/span').click()
if __name__ == '__main__':
driver = start_chrome()
login_google(driver)
login_potal(driver)
ちなみに・・・
もし、特定のclassページまで自動で入りたい場合は以下のようにすれば良き。
def enter_classroom(driver):
time.sleep(10)
driver.find_element_by_class_name('自動で入りたいclassページのclass名').click()
ん??解説がややこしい。。つまり、入りたい「Google Classroom」内のクラスページのHTMLのclass名を指定してください....うん、ややこしい。笑
ちなみに2行目は、ページ読み込みに時間がかかるので待機させておりまする。
やってみての感想
まぁ、特別難しいことは何もないということでした。
記事に挙げたのは、これを応用して使える場面が割とあるのでは?と思い。
ただね、実際の動作を見せれると少し感動なのですが、Youtubeにわざわざアップロードするのは面倒くさいといいますか。気が向いたらやってみてもいいかもしれません。