概要(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ステップです。
- ブラウザを起動してログイン画面を開く
- ID・パスワード入力欄の「要素」を見つける
- send_keys で値を入力
- ログインボタンをクリック
サンプルとして、要素の 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")
PythonBy には 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_USER と MYAPP_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 をダウンロードしてくる、といった実務レベルの自動化にスムーズにつなげられます。
