Python | 自動化:Selenium ログイン自動化

Python
スポンサーリンク

概要(Selenium ログイン自動化は「ブラウザ操作を人間の代わりにやらせる」)

Selenium は「ブラウザをコードで操作するロボット」です。
URL を開く、ID・パスワードを入力する、ボタンをクリックする、といった作業を Python から自動で実行できます。
ここでは「ログイン画面に自動ログインする」という、いちばん典型的なパターンを初心者向けに分解して説明します。


事前準備(Selenium のインストールと WebDriver)

Selenium のインストールと WebDriver の役割

Selenium は Python ライブラリ、WebDriver は「ブラウザを遠隔操作するためのエンジン」です。
Python から Selenium を呼び出し、Selenium が WebDriver 経由で Chrome / Edge などを操作します。

ターミナル(またはコマンドプロンプト)で Selenium をインストールします。

pip install selenium

最近の Selenium 4 は、多くの場合ブラウザと WebDriver の自動連携(Selenium Manager)に対応しているので、昔のように手動で ChromeDriver をダウンロードしなくても動くことが多いです。
それでも動かない場合は、Chrome のバージョンに合った ChromeDriver を別途インストールします。


最小のログイン自動化の流れをコードで見る

例:とあるログインページに ID とパスワードを入れてログインする

流れは必ずこの4ステップです。

  1. ブラウザを起動してログイン画面を開く
  2. ID・パスワード入力欄の「要素」を見つける
  3. send_keys で値を入力
  4. ログインボタンをクリック

サンプルとして、要素の id が次のようになっているログインフォームを想定します。

  • ユーザー名入力欄:id="username"
  • パスワード入力欄:id="password"
  • ログインボタン:id="login-button"
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
import time

LOGIN_URL = "https://example.com/login"
USER_ID = "your_id_here"
PASSWORD = "your_password_here"

def login_example():
    driver = webdriver.Chrome()   # Chrome を起動
    driver.get(LOGIN_URL)         # ログインページを開く

    time.sleep(2)                 # ページが表示されるのをざっくり待つ(※後で改善)

    user_box = driver.find_element(By.ID, "username")
    pass_box = driver.find_element(By.ID, "password")
    login_button = driver.find_element(By.ID, "login-button")

    user_box.clear()
    user_box.send_keys(USER_ID)
    pass_box.clear()
    pass_box.send_keys(PASSWORD)

    login_button.click()

    time.sleep(5)                 # ログイン後の画面を確認できるように待っておく
    # driver.quit()               # 終了するなら最後に閉じる

if __name__ == "__main__":
    login_example()
Python

このコードを動かすと、実際に Chrome が立ち上がり、人間が操作したかのようにログインしてくれます。


要素の探し方を深掘り(find_element とブラウザの「検証」)

なぜ「要素を特定する」のが一番大事か

Selenium の本質は「画面のどの部品(input, button など)を触るかを HTML 上で特定する」ことです。
入力欄やボタンは、HTML ではそれぞれタグ+属性(id, name, class など)で表現されています。

Chrome でログインページを開き、右クリック →「検証」を押すと、
開発者ツールが出て、その部品に対応する HTML がハイライトされます。
そこで id や name、クラス名などを確認します。

例えば HTML がこうなっていたとします。

<input type="text" id="username" name="login_id">
<input type="password" id="password" name="login_pass">
<button id="login-button">ログイン</button>
Python

この場合、Selenium からはこう取れます。

user_box = driver.find_element(By.ID, "username")
pass_box = driver.find_element(By.NAME, "login_pass")
login_button = driver.find_element(By.ID, "login-button")
Python

By には ID, NAME, XPATH, CSS_SELECTOR などのモードがあり、サイトによって使い分けます。


「待ち」の設計が超重要(time.sleep から WebDriverWait へ)

time.sleep の問題点と、ちゃんとした待ち方

最初のサンプルでは time.sleep(2) のような固定待ちを使いましたが、
これは「回線が遅いと足りない・速いと無駄に待つ」という不安定な方法です。

本番に近づけるなら、WebDriverWait で「要素が見えるまで待つ」という書き方に変えます。

from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

def login_example_better():
    driver = webdriver.Chrome()
    driver.get(LOGIN_URL)

    wait = WebDriverWait(driver, 10)  # 最大10秒まで待つ

    user_box = wait.until(
        EC.visibility_of_element_located((By.ID, "username"))
    )
    pass_box = wait.until(
        EC.visibility_of_element_located((By.ID, "password"))
    )
    login_button = wait.until(
        EC.element_to_be_clickable((By.ID, "login-button"))
    )

    user_box.clear()
    user_box.send_keys(USER_ID)
    pass_box.clear()
    pass_box.send_keys(PASSWORD)
    login_button.click()

    wait.until(EC.url_changes(LOGIN_URL))  # URL が変わる=ログイン完了の目安

    # driver.quit()
Python

このように「条件ベースで待つ」ようにすると、
画面遷移の速度が変わっても安定して動きます。
ログイン自動化でつまずくポイントの多くは「要素を探すのが早すぎる」なので、ここは最初にしっかり押さえておく方が良いです。


実務で意識すべきポイント(ID/パスワードの管理と「やっていいサイトか」)

資格情報をソースコードに直書きしない

初心者が一番やりがちなのは、ID・パスワードをソースにべた書きすることです。
練習ならまだしも、Git に上げたり他人と共有するようなコードでこれは危険です。

最低限の対策としては、「環境変数から読む」やり方があります。

import os

USER_ID = os.environ.get("MYAPP_USER")
PASSWORD = os.environ.get("MYAPP_PASS")
Python

実行環境側(ローカルPC、サーバー、CIなど)に MYAPP_USERMYAPP_PASS を設定しておき、
コードからはそれを読むだけ、という構造にしておくと漏洩リスクがかなり下がります。

「自動ログインしてよいサイトか」を必ず確認する

Selenium を使うと、銀行・EC・SNS・業務システムなど、ほとんど何でも操作できてしまいます。
ですが、ほぼすべてのサイトには利用規約があり、「自動アクセス・スクレイピング・RPA」が禁止されている場合もあります。

業務システムや社内システムなら、運用ルールや情報セキュリティポリシーを確認した上で、
責任者に「Selenium でこういう自動化をしてよいか」を一度相談することを強くおすすめします。
また、個人でも、銀行・証券・クレジットカードなどのログイン自動化はリスクが大きいので、慎重に。


ログイン維持・セッション再利用の考え方(少しだけ先の話)

毎回ログインしないで済ませる「クッキーの保存」

基本編では毎回 ID・パスワードを入れてログインしましたが、
サイト側の仕様によっては「一度ログインしてクッキーを保存しておき、次からはそれを使い回す」というやり方もあります。

流れとしては、

1 回だけ Selenium でログインして、driver.get_cookies() でクッキーを取得。
それを JSON などでファイル保存する。
次回以降は、最初に driver.add_cookie() でクッキーをブラウザに入れてからサイトを開く。

という感じです。

ただし、クッキーの中にはセッション情報=事実上の「ログイン済み状態」が含まれます。
これをどう守るか(暗号化するか、どこに置くか)は、パスワード以上にちゃんと考える必要があります。
このあたりは、基礎が固まってから少しずつ触れていくのがいいと思います。


まとめ(「要素を特定して、適切に待って、入力+クリックする」が芯)

Selenium ログイン自動化の核は、次の3つに集約されます。

ページを開き、開発者ツールで「ID・パスワード・ボタン」の要素を特定する。
WebDriverWait で「その要素が見える/押せる状態になるまで」待ち、send_keys と click を行う。
ID/パスワードやクッキーなどの資格情報は、ソース直書きせず、環境変数などで安全寄りに扱う。

この型さえ掴めば、勤怠システムのログイン、社内ポータルへのログイン、
ログイン後に CSV をダウンロードしてくる、といった実務レベルの自動化にスムーズにつなげられます。

タイトルとURLをコピーしました