ログイン、フォーム入力、ボタンクリック、スクロール——普段手作業でこなしているブラウザ操作がすべてPythonコード1本で動く。それがSeleniumです。Beautiful Soupでは手が届かなかったJavaScript製の動的ページにも対応しており、スクレイピングの守備範囲がぐっと広がります。
前回紹介したBeautiful Soupは、サーバーから受け取ったHTMLをそのまま解析するライブラリです。しかし、TwitterのタイムラインやSPAのようにJavaScriptがブラウザ側で画面を描画している「動的ページ」では、HTMLを取得してもまだコンテンツが存在しないため、Beautiful Soupだけでは正しくスクレイピングできません。
Seleniumはブラウザのドライバーを介して実際にブラウザを操作するため、JavaScriptが実行された後の画面からデータを取得できます。また、スクレイピングだけでなくWeb操作の自動化(クリック・入力・ドロップダウン選択など)にも対応しています。
Seleniumを使うには、ライブラリのインストールに加えてブラウザドライバーの用意が必要です。
pip install selenium Seleniumの公式サイトに、Chrome・Edge・Firefox・Safariそれぞれのドライバーダウンロードリンクが掲載されています。使用するブラウザに対応したドライバーをダウンロードし、Pythonスクリプトから参照できる場所に配置してください。
from selenium import webdriver
from selenium.webdriver.common.by import By
# Chromeドライバーを起動
driver = webdriver.Chrome()
# 暗黙的な待機(最大10秒、要素が見つかるまで待機)
driver.implicitly_wait(10)
# 対象URLを開く
driver.get("https://example.com") 動的ページはデータの読み込みに時間がかかる場合があります。implicitly_wait() を設定しておくと、指定秒数まで要素の出現を自動で待機してくれるので、エラーを防げます。
Seleniumで要素を取得するには find_element()(1件)または find_elements()(複数件)を使います。第1引数に By.クラス名 の形で取得方法を指定します。
# class名で取得
element = driver.find_element(By.CLASS_NAME, "schedule-list")
# id名で取得
element = driver.find_element(By.ID, "today-status")
# タグ名で複数取得
elements = driver.find_elements(By.TAG_NAME, "li") 同じclass名を持つ要素が複数あって目的のものを特定しにくい場合は、XPathを使って親要素から子要素へ絞り込みます。
# //タグ[@属性名='値']/子タグ の形式で指定
element = driver.find_element(
By.XPATH, "//li[@id='today-status']//span"
) # テキスト取得
text = element.text
# 属性値の取得
href = element.get_attribute("href") Seleniumの真骨頂はブラウザ操作の自動化です。データ取得だけでなく、実際の画面操作をコードで再現できます。
button = driver.find_element(By.ID, "submit-btn")
button.click() input_box = driver.find_element(By.NAME, "search")
# テキストを入力
input_box.send_keys("Python Selenium")
# 入力内容を削除(空欄に戻す)
input_box.clear() from selenium.webdriver.support.ui import Select
# ドロップダウンのエレメントを取得してSelectオブジェクトを作成
dropdown = driver.find_element(By.ID, "category")
select = Select(dropdown)
# value属性の値で選択肢を指定
select.select_by_value("python") Seleniumを使いこなすには、実際にコードを書いて動かす環境が重要です。快適な開発環境を整えることで、スキルの習得速度が大きく変わります🚀
まずBeautiful Soupを習得してHTMLとスクレイピングの基礎を理解し、その後Seleniumに進むのがおすすめです。Seleniumはブラウザを起動するため処理が重く、静的なページならBeautiful Soupの方が高速です。目的に応じて使い分けましょう。
OSのPATHが通ったディレクトリ(例:Windowsなら C:\Windows\System32、Macなら /usr/local/bin)に配置するか、コード内でドライバーのパスを直接指定する方法があります。Selenium 4以降は webdriver-manager というライブラリを使うと自動管理できて便利です。
implicitly_wait(暗黙的な待機)はドライバー全体に適用され、要素が見つかるまで指定秒数だけ自動で待ちます。設定がシンプルで初心者向きです。explicit_wait(明示的な待機)は特定の条件が満たされるまで待つより細かい制御ができますが、コード量が増えます。まずは暗黙的な待機から始めましょう。
Chromeのデベロッパーツール(F12キー)を開き、目的の要素を右クリック→「検証」で該当タグを選択、そのタグをさらに右クリック→「Copy」→「Copy XPath」でXPathを自動取得できます。まずはこの方法でXPathを確認しながらコードを書くと効率的です。
技術的にはSeleniumでフォームへの入力・ログインボタンのクリックを自動化することで対応できます。ただし、対象サービスの利用規約によってはスクレイピングが禁止されている場合があります。実行前に必ずサービスの規約を確認し、ルールの範囲内で利用してください。
Seleniumを使えば、JavaScriptで描画される動的ページのスクレイピングはもちろん、クリック・フォーム入力・ドロップダウン選択など、ブラウザ操作を丸ごとPythonで自動化できます。Beautiful SoupでHTMLの基礎を理解したうえでSeleniumを組み合わせることで、Webデータ活用の幅は格段に広がります。ぜひ実際のページで試して、自動化の手応えを体感してみてください🤖✨