Python Seleniumでブラウザ自動化!初心者でもできる完全ガイド

Webブラウザの操作を自動化したいと思ったことはありませんか?Python Seleniumを使えば、面倒な繰り返し作業やWebスクレイピング、テスト自動化が簡単に実現できます。この記事では、初心者でも分かりやすいように、Seleniumの基本から実践的な使い方まで詳しく解説します。

Python Seleniumとは?できることを解説

Seleniumは、Webブラウザを自動操作するためのPythonライブラリです。人間がブラウザで行う操作(クリック、文字入力、スクロールなど)をプログラムで自動実行できます。

Seleniumでできること

  • Webスクレイピング: 商品価格や株価の自動収集
  • テスト自動化: Webアプリケーションの動作確認
  • 業務自動化: データ入力や定期レポート作成
  • SNS自動投稿: TwitterやInstagramの投稿自動化

Python Seleniumのインストール方法

まずは必要なライブラリをインストールしましょう。

pip install selenium webdriver-manager

webdriver-managerを使うことで、ChromeDriverの面倒な設定が不要になります。

【基本編】Python Seleniumの使い方

1. ブラウザを開いてページにアクセス

from selenium import webdriver
from webdriver_manager.chrome import ChromeDriverManager
from selenium.webdriver.chrome.service import Service

# ブラウザを起動
service = Service(ChromeDriverManager().install())
driver = webdriver.Chrome(service=service)

# Googleを開く
driver.get("https://www.google.com")
print(driver.title)  # ページタイトルを表示

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

2. 要素を見つけてクリック・入力

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
from webdriver_manager.chrome import ChromeDriverManager
from selenium.webdriver.chrome.service import Service

service = Service(ChromeDriverManager().install())
driver = webdriver.Chrome(service=service)

driver.get("https://www.google.com")

# 検索ボックスに文字を入力
search_box = driver.find_element(By.NAME, "q")
search_box.send_keys("Python Selenium")
search_box.send_keys(Keys.RETURN)  # Enter押下

driver.quit()

3. 要素の待機処理

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from webdriver_manager.chrome import ChromeDriverManager
from selenium.webdriver.chrome.service import Service

service = Service(ChromeDriverManager().install())
driver = webdriver.Chrome(service=service)

driver.get("https://www.google.com")

# 要素が表示されるまで最大10秒待機
wait = WebDriverWait(driver, 10)
search_box = wait.until(EC.presence_of_element_located((By.NAME, "q")))

search_box.send_keys("Python")

driver.quit()

【実践編】よく使うSelenium操作パターン

フォーム操作(入力・選択・送信)

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import Select
from webdriver_manager.chrome import ChromeDriverManager
from selenium.webdriver.chrome.service import Service

service = Service(ChromeDriverManager().install())
driver = webdriver.Chrome(service=service)

driver.get("https://httpbin.org/forms/post")

# テキスト入力
driver.find_element(By.NAME, "custname").send_keys("田中太郎")

# ドロップダウン選択
dropdown = Select(driver.find_element(By.NAME, "size"))
dropdown.select_by_visible_text("Medium")

# チェックボックス選択
driver.find_element(By.NAME, "topping").click()

# 送信ボタンクリック
driver.find_element(By.CSS_SELECTOR, "input[type='submit']").click()

driver.quit()

スクリーンショット取得

from selenium import webdriver
from webdriver_manager.chrome import ChromeDriverManager
from selenium.webdriver.chrome.service import Service

service = Service(ChromeDriverManager().install())
driver = webdriver.Chrome(service=service)

driver.get("https://www.python.org")
driver.save_screenshot("screenshot.png")  # スクリーンショット保存

driver.quit()

JavaScript実行

from selenium import webdriver
from webdriver_manager.chrome import ChromeDriverManager
from selenium.webdriver.chrome.service import Service

service = Service(ChromeDriverManager().install())
driver = webdriver.Chrome(service=service)

driver.get("https://www.example.com")

# ページ最下部までスクロール
driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")

# ページタイトルを取得
title = driver.execute_script("return document.title;")
print(title)

driver.quit()

Python Seleniumの要素取得方法一覧

取得方法 使い方 用途
ID By.ID, "element_id" 一意な要素の特定
NAME By.NAME, "name_attr" フォーム要素の特定
CLASS_NAME By.CLASS_NAME, "class_name" CSSクラスでの特定
CSS_SELECTOR By.CSS_SELECTOR, ".class" CSS記法での特定
XPATH By.XPATH, "//div[@id='test']" 詳細な条件での特定

Seleniumでよく発生するエラーと対処法

1. NoSuchElementException

原因: 要素が見つからない 対処法: 待機処理を追加するか、セレクタを見直す

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

wait = WebDriverWait(driver, 10)
element = wait.until(EC.presence_of_element_located((By.ID, "target_id")))

2. TimeoutException

原因: 要素の読み込みに時間がかかりすぎる 対処法: 待機時間を延長する

wait = WebDriverWait(driver, 30)  # 30秒まで待機

3. ElementNotInteractableException

原因: 要素がクリック不可能な状態 対処法: 要素がクリック可能になるまで待機

wait.until(EC.element_to_be_clickable((By.ID, "button_id")))

Selenium実行を高速化するテクニック

1. ヘッドレスモードの使用

from selenium import webdriver

options = webdriver.ChromeOptions()
options.add_argument('--headless')  # 画面非表示で実行
options.add_argument('--no-sandbox')
options.add_argument('--disable-dev-shm-usage')

driver = webdriver.Chrome(options=options)

2. 画像・CSS読み込みの無効化

options = webdriver.ChromeOptions()
prefs = {
    "profile.managed_default_content_settings.images": 2,
    "profile.default_content_setting_values.notifications": 2
}
options.add_experimental_option("prefs", prefs)
options.add_argument('--disable-extensions')

driver = webdriver.Chrome(options=options)

Python Seleniumの活用事例

1. ECサイトの価格監視システム

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

def check_price(url, selector):
    service = Service(ChromeDriverManager().install())
    driver = webdriver.Chrome(service=service)
    
    driver.get(url)
    price = driver.find_element(By.CSS_SELECTOR, selector).text
    print(f"現在の価格: {price}")
    
    driver.quit()
    return price

# 1時間ごとに価格をチェック
while True:
    check_price("https://example-shop.com/product/123", ".price")
    time.sleep(3600)  # 1時間待機

2. SNS自動投稿システム

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

def auto_post(username, password, message):
    service = Service(ChromeDriverManager().install())
    driver = webdriver.Chrome(service=service)
    
    # ログイン処理
    driver.get("https://twitter.com/login")
    driver.find_element(By.NAME, "text").send_keys(username)
    driver.find_element(By.XPATH, "//span[text()='次へ']").click()
    
    time.sleep(2)
    driver.find_element(By.NAME, "password").send_keys(password)
    driver.find_element(By.XPATH, "//span[text()='ログイン']").click()
    
    # 投稿処理
    time.sleep(3)
    driver.find_element(By.XPATH, "//span[text()='ポストする']").click()
    driver.find_element(By.CSS_SELECTOR, "[contenteditable='true']").send_keys(message)
    driver.find_element(By.XPATH, "//span[text()='ポストする']").click()
    
    driver.quit()

Python Seleniumのベストプラクティス

1. リソース管理の徹底

from selenium import webdriver
from contextlib import contextmanager

@contextmanager
def get_driver():
    service = Service(ChromeDriverManager().install())
    driver = webdriver.Chrome(service=service)
    try:
        yield driver
    finally:
        driver.quit()

# 使用例
with get_driver() as driver:
    driver.get("https://www.example.com")
    # 処理を実行

2. 設定の外部化

import json
from selenium import webdriver

def load_config():
    with open('config.json', 'r') as f:
        return json.load(f)

config = load_config()
options = webdriver.ChromeOptions()

for arg in config['chrome_args']:
    options.add_argument(arg)

driver = webdriver.Chrome(options=options)

まとめ:Python Seleniumで自動化を始めよう

Python Seleniumは、Webブラウザの自動化において非常に強力なツールです。この記事で紹介した基本的な使い方から実践的なテクニックまでを活用すれば、様々な自動化タスクを実現できます。

重要なポイント

  • 適切な待機処理でエラーを防ぐ
  • ヘッドレスモードで高速化
  • リソース管理を徹底する
  • エラーハンドリングを忘れずに

まずは簡単なスクレイピングから始めて、徐々に複雑な自動化タスクに挑戦してみてください。Python Seleniumをマスターすれば、日々の作業効率が大幅に向上するはずです。


この記事がお役に立ちましたら、ぜひシェアしてください。Python Seleniumに関するご質問やご要望がございましたら、お気軽にコメントでお知らせください。

「らくらくPython塾」が切り開く「呪文コーディング」とは?

■プロンプトだけでオリジナルアプリを開発・公開してみた!!

■AI時代の第一歩!「AI駆動開発コース」はじめました!

テックジム東京本校で先行開始。

■テックジム東京本校

「武田塾」のプログラミング版といえば「テックジム」。
講義動画なし、教科書なし。「進捗管理とコーチング」で効率学習。
より早く、より安く、しかも対面型のプログラミングスクールです。

<短期講習>5日で5万円の「Pythonミニキャンプ」開催中。

<月1開催>放送作家による映像ディレクター養成講座

<オンライン無料>ゼロから始めるPython爆速講座