Selenium×PythonでOffice365に ログインの自動化|初心者でも簡単に実装できる

プログラミング

はじめに

Webブラウザを使った操作の自動化は、多くの業務を効率化するための重要な手段だ。
たとえば、定期的に更新されるデータの収集や、特定のサイトからのファイルの自動ダウンロードなどが挙げられる。

本記事では、PythonとSeleniumを組み合わせて、Office365へのアクセスやログイン処理を自動化する方法を解説する。

必要なライブラリのインストールとインポート

まず、必要なライブラリをインストールし、インポートする手順から始める。以下のライブラリを使用する。

  • os
  • time
  • selenium
  • webdriver_manager
  • pytesseract

インポートのコードは次の通り。

import os
import time
from selenium import webdriver
from selenium.webdriver.edge.service import Service as EdgeService
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from webdriver_manager.microsoft import EdgeChromiumDriverManager
import pytesseract

メールアドレス、ユーザーID、パスワードの設定

自動ログインに必要な情報を変数として設定する。
以下はサンプルであり、実際に使用する際には個々のログイン情報を設定すること。

# メールアドレス
email_address = "example@example.com"

# ユーザーID
user_id = "example_user"

# パスワード
user_password = "example_password"

WebDriverの初期設定

次に、Edgeブラウザを使用するための設定を行う。
以下のコードでEdgeのWebDriverを初期化し、必要なオプションを設定する。

# Tesseract OCRのパスを設定
pytesseract.pytesseract.tesseract_cmd = r'C:\Program Files\Tesseract-OCR\tesseract.exe'

# Edgeブラウザの設定
options = webdriver.EdgeOptions()
options.use_chromium = True

# WebDriverの初期化
service = EdgeService(EdgeChromiumDriverManager().install())
driver = webdriver.Edge(service=service)

ログイン関数の定義

ログインを自動化するための関数loginを定義する。
この関数では、指定したメールアドレス、ユーザーID、パスワードを用いて自動的にログインを試みる。

def login():
    try:
        # メールアドレスが表示されているdiv要素をクリック
        email_div_xpath = f"//div[contains(text(), '{email_address}')]"
        email_div = WebDriverWait(driver, 30).until(
            EC.element_to_be_clickable((By.XPATH, email_div_xpath))
        )
        time.sleep(15)
        email_div.click()
        time.sleep(5)

        # ユーザーID入力
        username_field = driver.find_element(By.ID, "username")
        username_field.click()
        username_field.send_keys(user_id)

        # パスワード入力
        password_field = driver.find_element(By.ID, "password")
        password_field.click()
        password_field.send_keys(user_password)

        # ログインボタン押下
        submit_button = driver.find_element(By.ID, "submit")
        submit_button.click()

        time.sleep(5)

        # サインインの状態を保持するか確認
        stay_signed_in_button = WebDriverWait(driver, 10).until(
            EC.element_to_be_clickable((By.ID, "idSIButton9"))
        )
        stay_signed_in_button.click()

        time.sleep(5)

    except Exception as e:
        print(f"An error occurred during login: {e}")
        driver.quit()

自動操作の実行

指定したURLにアクセスし、必要に応じてログインし、特定のボタンをクリックする自動化処理を実行する。

try:
    # Microsoft Officeのページに遷移
    office_url = "https://www.office.com/"
    driver.get(office_url)

    driver.maximize_window()

    # 10秒待機
    time.sleep(10)

    # ログインが必要か確認し、必要であればログイン
    if "login" in driver.current_url:
        login()

    # ページが完全に読み込まれるまで待機
    WebDriverWait(driver, 20).until(
        EC.presence_of_element_located((By.XPATH, "//title[contains(text(), 'Office')]"))
    )
    time.sleep(3)

    # "aria-label"に「ダウンロード」を含む要素を特定してクリック
    download_button_xpath = "//button[contains(@class, 'css-') and contains(@aria-label, 'ダウンロード')]"
    download_button = WebDriverWait(driver, 10).until(
        EC.element_to_be_clickable((By.XPATH, download_button_xpath))
    )
    download_button.click()
    # DL待機
    time.sleep(15)
finally:
    # ブラウザを閉じる
    driver.quit()

まとめ

この手順を通じて、PythonとSeleniumを使ったOffice365への自動アクセスとログインが簡単に実現できる。
このコードをもとに他サイトのログイン処理を実装することも可能だろう。初心者の方はぜひ試してみてほしい。

コメント