アルアカ - Arcadia Academia

Arcadia Academiaは「エンジニアリングを楽しむ」を合言葉に日本のデジタル競争力を高めることをミッションとするテックコミュニティです。

PythonでSeleniumを使ったブラウザ自動化の基本と活用法

Featured image of the post

Webアプリケーションの自動テストやスクレイピング、定期処理の自動化など、幅広い用途で活用されている「Selenium(セレニウム)」。Pythonと組み合わせて使うことで、複雑なブラウザ操作をコードで制御し、自動化することが可能です。今回は、Seleniumとは何か、Pythonでの基本的な使い方、そして実践的な活用事例について詳しく解説していきます。


[目次を開く]

Seleniumとは?

Seleniumは、ブラウザを自動で操作するためのオープンソースライブラリです。もともとはWebアプリのUIテストを自動化するために開発されましたが、現在ではさまざまな自動化タスクに利用されています。ChromeやFirefoxなど主要なブラウザをサポートしており、Python、Java、JavaScriptなど複数の言語で利用可能です。

PythonでSeleniumを使う準備

まずは、PythonでSeleniumを使うための環境を整えましょう。
※仮想環境またはDocker環境でのセットアップ推奨です。仮想環境の構築は以下の記事を参照してください。

📄Arrow icon of a page linkPython仮想環境構築の手順とメリット

pip install selenium

次に、操作対象のブラウザに対応したWebDriverが必要です。例えば、Chromeを使う場合は「ChromeDriver」が必要になります。公式サイト(https://googlechromelabs.github.io/chrome-for-testing)から使用しているChromeのバージョンに合ったドライバをダウンロードしておきましょう。

zip形式でダウンロードされるのでユーザディレクトリの直下などに展開してください。またWSLを利用している場合は、Linux用のChromeの実行ファイルおよびドライバが必要になるので注意してください。

Chromeのバージョン確認方法

GoogleChromeの設定より、ヘルプを開くと「Google Chromeについて」という項目があるので、こちらをクリックしてください。

Image in a image block

すると以下のような画面が表示されるので、ここでChromeのバージョンが確認できます。

Image in a image block

基本的な使い方

以下は、Seleniumを使ってGoogle検索を自動化するシンプルな例です。

from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.common.by import By

chromedriver_path = r"{Chromeドライバのフルパス}"
chrome_binary_path = r"{Chromeのexeのフルパス}"

options = Options()
options.binary_location = chrome_binary_path

service = Service(executable_path=chromedriver_path)
driver = webdriver.Chrome(service=service, options=options)

driver.get('https://ar-aca.tech')

search_btn = driver.find_element(By.CLASS_NAME, "open-search-modal")
search_btn.click()

search_bar = driver.find_element(By.CSS_SELECTOR, 'input[placeholder="Search..."]')
search_bar.send_keys("Python")

input("Press Enter to exit and close the browser...")

driver.quit()

このコードでは、当サイトのトップページを開き、「Python」と検索して結果を表示するところまで自動で実行しています。

Chromeが自動で起動し以下のような画面になれば成功です。

Image in a image block

よく使う操作

  • find_element() / find_elements():要素の取得
  • click():クリック操作
  • send_keys():文字入力
  • get_attribute():属性の取得
  • implicitly_wait():読み込みの待機

これらを組み合わせることで、ログイン処理、フォーム入力、ページ遷移なども自動化可能です。

実践活用:スクレイピングやテスト自動化

Seleniumは静的なページだけでなく、JavaScriptで動的に描画されるページのデータ取得にも有効です。また、E2EテストのフレームワークとしてPytestと組み合わせることで、本格的な自動UIテスト環境を構築することもできます。

例えば、ECサイトの価格チェックを定期的に行いたい場合や、SaaSサービスのログイン・操作確認など、実運用でも多くのユースケースがあります。

Selenium で取得したデータを CSV にエクスポートする方法

Selenium を使って動的ページから情報を取得したあと、そのデータをCSV ファイルに保存したいケースは多いでしょう。特に商品情報や記事一覧、ユーザーリストなどを扱う際に便利です。

基本構成:取得 → 整形 → 保存
  1. データ取得(Selenium)
  2. 構造化(リスト or 辞書形式に整形)
  3. CSV 保存(csv モジュールを使う)

スクレイピングと CSV 出力のコード例

例:当サイトの記事一覧画面を開き記事タイトルを取得しCSVに出力する

from selenium import webdriver
from selenium.webdriver.common.by import By
import csv
import time


driver = webdriver.Chrome()
driver.get('https://ar-aca.tech')
time.sleep(3)  # ページ読み込み待機(必要に応じて)

# 記事のタイトルを抽出
titles = driver.find_elements(By.CSS_SELECTOR, '.post-title')
data = []

for title in titles:
    data.append([title.text])  # リスト形式で追加

driver.quit()

# CSV に保存
with open('titles.csv', 'w', newline='', encoding='utf-8') as f:
    writer = csv.writer(f)
    writer.writerow(['タイトル'])  # ヘッダー
    writer.writerows(data)
解説ポイント
  • find_elements() で複数要素を取得
  • .text で表示テキストを抽出
  • csv.writer() でリスト形式データを一括書き込み
  • newline='' の指定で改行文字の混乱を防止

成功すると以下のようなCSVファイルとしてスクリプトを実行したディレクトリにエクスポートされます。

Image in a image block

よくあるエラーと対策
エラー内容 原因 解決策
UnicodeEncodeError 非ASCII文字の扱い encoding='utf-8' を必ず指定
空行が挿入される Windows環境特有の挙動 newline='' を指定する
データがずれる HTML構造の変化 セレクターの再確認、例外処理を追加

応用テクニック
  • 日付付きファイル名で自動バージョン管理:
    from datetime import datetime
    filename = f"titles_{datetime.now().strftime('%Y%m%d')}.csv"
  • pandas を使うとさらに高速
    import pandas as pd
    df = pd.DataFrame(data, columns=['タイトル'])
    df.to_csv('titles.csv', index=False, encoding='utf-8')

pandas を活用すると、後処理(フィルタ・集計)もそのまま可能になり、データ解析にも直結します。

注意点とベストプラクティス

  • ブラウザやドライバのバージョンは揃える
  • ページ読み込みを明示的に待機させる(WebDriverWaitなど)
  • 長期運用にはヘッドレスモードやDocker化も検討

PythonとSeleniumを活用すれば、日々のルーチン作業から複雑なWeb操作まで効率的に自動化することができます。まずは簡単な操作から試してみて、自分の業務にどう応用できるかを模索してみてください。

学習を進める中で不安があれば、プロのメンターに相談してみませんか?
無料カウンセリングを試してみる

あなたを爆速で成長させるメンタリングプログラムはこちらから↓↓

転職ボックス|IT/ゲーム業界の正社員求職者の集客の無料会員登録↓↓