Python + SeleniumでWebブラウザ操作を自動化する初期設定

Python

Webスクレイピングやブラウザ操作の自動化において、PythonとSeleniumの組み合わせは最強のツールの一つです。しかし、初心者が最初につまずくのが「環境構築」です。

本記事では、2026年現在の最新仕様に基づき、SeleniumのインストールからWebDriverの管理、そして実戦で使える初期設定コードまでを解説します。


Selenium自動化の全体像を理解する

まずは、Seleniumがどのような仕組みでブラウザを動かしているのか、全体像を把握しましょう。

Selenium WebDriverとは

Seleniumは、ブラウザをプログラムから操作するためのライブラリです。人がマウスで行う「クリック」や、キーボードで行う「文字入力」をPythonコードで代行します。

動作に必要な3つの要素

Seleniumを動かすには、以下の3つが揃っている必要があります。

  1. Python言語本体: スクリプトを記述します。

  2. Seleniumライブラリ: Pythonからブラウザへ命令を送るための道具箱です。

  3. ブラウザとWebDriver: ChromeやEdgeなどの本体と、それを操作するための「運転手(Driver)」です。


Python環境とSeleniumのインストール

まずは土台となるPython環境を整え、Seleniumライブラリをインストールします。

①Pythonの確認

ターミナル(またはコマンドプロンプト)を開き、以下のコマンドを入力してください。

python --version

Python 3.7以上であれば問題ありません。

②Seleniumのインストール

pipコマンドを使用してインストールします。

pip install selenium

③インストールの確認

正しくインストールされたか確認するために、以下のコードを実行してエラーが出ないかチェックしましょう。

import selenium
print(selenium.__version__)

WebDriverの管理(最新の自動管理方式)

以前のSeleniumでは、ブラウザのバージョンに合わせて「ChromeDriver」を毎回手動でダウンロードし、パスを通す必要がありました。しかし、Selenium 4.6以降、この作業は不要になりました。

Selenium Managerの登場

現在のSeleniumには「Selenium Manager」という機能が内蔵されており、コードを実行する際に最適なドライバーを自動的にダウンロードしてくれます。

手動管理との違い

  • 旧方式: Chromeがアップデートされるたびにエラーが出て、手動でバイナリを差し替える必要があった。

  • 新方式: 何もしなくても、実行時に環境に合わせて自動更新される。

これにより、環境構築の難易度が劇的に下がりました。


ブラウザ起動の基本コード

まずは、Google Chromeを起動して特定のサイトを開く最小構成のコードを書いてみましょう。

基本的な起動スクリプト

from selenium import webdriver

# 1. ブラウザの起動
driver = webdriver.Chrome()

# 2. 指定したURLを開く
driver.get("https://www.google.com")

# 3. タイトルの表示
print(driver.title)

# 4. ブラウザを閉じる
driver.quit()

実行時のポイント

driver.quit()を記述しないと、スクリプトが終わってもブラウザのプロセスが残り続け、PCのメモリを圧迫します。必ず最後に記述する癖をつけましょう。


安定性を高める「Options」の初期設定

デフォルトの状態では、ブラウザの動きが不安定だったり、自動操作特有の挙動(通知ポップアップなど)が邪魔になったりします。これらを解決するのが Options クラスです。

よく使われる設定一覧

以下の設定は、実務レベルのスクレイピングでは「必須」と言えるものです。

  1. Headlessモード: ブラウザ画面を表示せずにバックグラウンドで実行します。サーバー上での実行に不可欠です。

  2. ユーザーエージェント設定: 自動操作であることを隠し、アクセスブロックを防ぎます。

  3. GPU無効化: 動作を軽くし、クラッシュを防ぎます。

実戦的なOptions設定例

from selenium import webdriver
from selenium.webdriver.chrome.options import Options

options = Options()

# ヘッドレスモード(画面を表示しない場合)
# options.add_argument('--headless')

# 起動時のウィンドウサイズ固定
options.add_argument('--window-size=1920,1080')

# 自動操作の通知バー(「Chromeは自動テストソフトウェアによって制御されています」)を消す
options.add_experimental_option("excludeSwitches", ["enable-automation"])
options.add_experimental_option('useAutomationExtension', False)

# ユーザーエージェントの設定
options.add_argument('--user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36')

driver = webdriver.Chrome(options=options)

要素の特定と操作(Locators)

ブラウザを起動したら、次は「どのボタンを押すか」「どこに文字を入力するか」を指定する必要があります。

Byクラスの活用

Selenium 4からは、要素の指定に By クラスを使用することが推奨されています。

from selenium.webdriver.common.by import By

# IDで指定
element = driver.find_element(By.ID, "login-button")

# Name属性で指定
search_box = driver.find_element(By.NAME, "q")

# CSSセレクタで指定
header = driver.find_element(By.CSS_SELECTOR, ".main-header")

# XPathで指定(構造が複雑な場合)
submit = driver.find_element(By.XPATH, "//button[@type='submit']")

複数要素の取得

find_element(単数)ではなく find_elements(複数)を使うと、リスト形式で要素を取得できます。検索結果の一覧をすべて取得したい場合などに便利です。


待機処理(Wait)の重要性

Seleniumで最も多いエラーの原因が「要素が見つからない(NoSuchElementException)」です。これは、ブラウザの読み込みが終わる前にプログラムが次のステップに進もうとするために発生します。

禁じ手:time.sleep()

time.sleep(10) のように固定時間待つ方法は、ネットワークが速いときには無駄な待ち時間が発生し、遅いときにはエラーになるため、推奨されません。

推奨:Explicit Wait(明示的待機)

特定の要素が表示されるまで待つ、というスマートな方法です。

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

# 最大10秒間、指定した要素が表示されるまで待機
wait = WebDriverWait(driver, 10)
element = wait.until(EC.presence_of_element_located((By.ID, "dynamic-content")))

エラーハンドリングとデバッグ

自動化スクリプトは、サイトの仕様変更などで突然止まることがあります。

Try-Except構文

エラーが発生してもブラウザを確実に閉じるために、try-finally 構造を使いましょう。

try:
    driver.get("https://example.com")
    # 操作を記述
finally:
    driver.quit() # 成功しても失敗しても必ず閉じる

スクリーンショットの活用

エラー時の画面状態を保存しておくと、原因究明がスムーズになります。

driver.save_screenshot("error_log.png")

保守性の高いコードを書くために

初期設定が終われば、いよいよ本格的な開発です。以下の3点を意識してコードを書きましょう。

  1. マジックナンバーを避ける: 待機秒数などは変数にまとめる。

  2. モジュール化する: ログイン処理などは関数として独立させる。

  3. ログを残す: どこまで処理が進んだか、標準出力やログファイルに記録する。

Seleniumは非常に強力ですが、サイト運営者の規約を遵守し、過度な負荷をかけない「紳士的なスクレイピング」を心がけてください。

コメント

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