Webアプリケーションの自動テストやスクレイピング、定期処理の自動化など、幅広い用途で活用されている「Selenium(セレニウム)」。Pythonと組み合わせて使うことで、複雑なブラウザ操作をコードで制御し、自動化することが可能です。今回は、Seleniumとは何か、Pythonでの基本的な使い方、そして実践的な活用事例について詳しく解説していきます。
[目次を開く]
Seleniumとは?
Seleniumは、ブラウザを自動で操作するためのオープンソースライブラリです。もともとはWebアプリのUIテストを自動化するために開発されましたが、現在ではさまざまな自動化タスクに利用されています。ChromeやFirefoxなど主要なブラウザをサポートしており、Python、Java、JavaScriptなど複数の言語で利用可能です。
PythonでSeleniumを使う準備
まずは、PythonでSeleniumを使うための環境を整えましょう。
※仮想環境またはDocker環境でのセットアップ推奨です。仮想環境の構築は以下の記事を参照してください。
pip install selenium
次に、操作対象のブラウザに対応したWebDriverが必要です。例えば、Chromeを使う場合は「ChromeDriver」が必要になります。公式サイト(https://googlechromelabs.github.io/chrome-for-testing)から使用しているChromeのバージョンに合ったドライバをダウンロードしておきましょう。
zip形式でダウンロードされるのでユーザディレクトリの直下などに展開してください。またWSLを利用している場合は、Linux用のChromeの実行ファイルおよびドライバが必要になるので注意してください。
Chromeのバージョン確認方法
GoogleChromeの設定より、ヘルプを開くと「Google Chromeについて」という項目があるので、こちらをクリックしてください。

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

基本的な使い方
以下は、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が自動で起動し以下のような画面になれば成功です。

よく使う操作
-
find_element()
/find_elements()
:要素の取得 -
click()
:クリック操作 -
send_keys()
:文字入力 -
get_attribute()
:属性の取得 -
implicitly_wait()
:読み込みの待機
これらを組み合わせることで、ログイン処理、フォーム入力、ページ遷移なども自動化可能です。
実践活用:スクレイピングやテスト自動化
Seleniumは静的なページだけでなく、JavaScriptで動的に描画されるページのデータ取得にも有効です。また、E2EテストのフレームワークとしてPytestと組み合わせることで、本格的な自動UIテスト環境を構築することもできます。
例えば、ECサイトの価格チェックを定期的に行いたい場合や、SaaSサービスのログイン・操作確認など、実運用でも多くのユースケースがあります。
Selenium で取得したデータを CSV にエクスポートする方法
Selenium を使って動的ページから情報を取得したあと、そのデータをCSV ファイルに保存したいケースは多いでしょう。特に商品情報や記事一覧、ユーザーリストなどを扱う際に便利です。
基本構成:取得 → 整形 → 保存
- データ取得(Selenium)
- 構造化(リスト or 辞書形式に整形)
- 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ファイルとしてスクリプトを実行したディレクトリにエクスポートされます。

よくあるエラーと対策
エラー内容 | 原因 | 解決策 |
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操作まで効率的に自動化することができます。まずは簡単な操作から試してみて、自分の業務にどう応用できるかを模索してみてください。