見出し画像

「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の本人確認画面の突破用ですね。下のようなやつです。表示されない場合は、コメントアウトでもしておいて貰えばと思いまする。

画像1

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にわざわざアップロードするのは面倒くさいといいますか。気が向いたらやってみてもいいかもしれません。


この記事が気に入ったらサポートをしてみませんか?