⚙️ Seleniumで、Webブラウザを自分の手足のように動かせる
ログイン、フォーム入力、ボタンクリック、スクロール——普段手作業でこなしているブラウザ操作がすべてPythonコード1本で動く。それがSeleniumです。Beautiful Soupでは手が届かなかったJavaScript製の動的ページにも対応しており、スクレイピングの守備範囲がぐっと広がります。
📌 SeleniumとBeautiful Soupの違いは?
前回紹介したBeautiful Soupは、サーバーから受け取ったHTMLをそのまま解析するライブラリです。しかし、TwitterのタイムラインやSPAのようにJavaScriptがブラウザ側で画面を描画している「動的ページ」では、HTMLを取得してもまだコンテンツが存在しないため、Beautiful Soupだけでは正しくスクレイピングできません。
Seleniumはブラウザのドライバーを介して実際にブラウザを操作するため、JavaScriptが実行された後の画面からデータを取得できます。また、スクレイピングだけでなくWeb操作の自動化(クリック・入力・ドロップダウン選択など)にも対応しています。
🔄 Beautiful Soup vs Selenium — 使い分けの目安
- 🟢 Beautiful Soup向き:静的なHTML、シンプルな情報収集、処理速度重視
- 🟡 Selenium向き:JavaScriptで描画される動的ページ、ログインが必要なページ、ボタン操作・フォーム入力の自動化
🛠️ Seleniumのインストールとドライバーの準備
Seleniumを使うには、ライブラリのインストールに加えてブラウザドライバーの用意が必要です。
① Seleniumライブラリのインストール
pip install selenium
② ブラウザドライバーのダウンロード
Seleniumの公式サイトに、Chrome・Edge・Firefox・Safariそれぞれのドライバーダウンロードリンクが掲載されています。使用するブラウザに対応したドライバーをダウンロードし、Pythonスクリプトから参照できる場所に配置してください。
💻 Seleniumの基本コード構成
① ドライバーオブジェクトの作成と待機設定
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.クラス名 の形で取得方法を指定します。
- 🔎 By.CLASS_NAME:class属性の値で要素を特定
- 🔎 By.ID:id属性の値で要素を特定
- 🔎 By.NAME:name属性の値で要素を特定
- 🔎 By.TAG_NAME:タグ名で要素を特定
- 🔎 By.XPATH:XPathで親子関係を指定して要素を特定
# 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")
③ XPathで階層を絞り込む
同じclass名を持つ要素が複数あって目的のものを特定しにくい場合は、XPathを使って親要素から子要素へ絞り込みます。
# //タグ[@属性名='値']/子タグ の形式で指定
element = driver.find_element(
By.XPATH, "//li[@id='today-status']//span"
)
④ テキストと属性の取得
# テキスト取得
text = element.text
# 属性値の取得
href = element.get_attribute("href")
🖱️ Web操作の自動化——クリック・入力・ドロップダウン
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を使いこなすには、実際にコードを書いて動かす環境が重要です。快適な開発環境を整えることで、スキルの習得速度が大きく変わります🚀
✅ Seleniumよく使うメソッドまとめ
- 🔹 driver.get(url):指定URLのページを開く
- 🔹 driver.implicitly_wait(秒数):暗黙的な待機を設定
- 🔹 find_element(By.XXX, "値"):条件に一致する要素を1件取得
- 🔹 find_elements(By.XXX, "値"):条件に一致する全要素をリストで取得
- 🔹 element.text:要素内のテキストを取得
- 🔹 element.get_attribute("属性名"):属性値を取得
- 🔹 element.click():要素をクリック
- 🔹 element.send_keys("文字列"):テキストボックスに文字を入力
- 🔹 element.clear():テキストボックスの内容を削除
- 🔹 Select(element).select_by_value("値"):ドロップダウンで値を選択
❓ よくある質問 FAQ
🤔 Q1. Beautiful SoupとSeleniumはどちらを学ぶべきですか?
まずBeautiful Soupを習得してHTMLとスクレイピングの基礎を理解し、その後Seleniumに進むのがおすすめです。Seleniumはブラウザを起動するため処理が重く、静的なページならBeautiful Soupの方が高速です。目的に応じて使い分けましょう。
🤔 Q2. ブラウザドライバーはどこに配置すればいいですか?
OSのPATHが通ったディレクトリ(例:Windowsなら C:\Windows\System32、Macなら /usr/local/bin)に配置するか、コード内でドライバーのパスを直接指定する方法があります。Selenium 4以降は webdriver-manager というライブラリを使うと自動管理できて便利です。
🤔 Q3. implicitly_wait と explicit_wait(明示的な待機)の違いは?
implicitly_wait(暗黙的な待機)はドライバー全体に適用され、要素が見つかるまで指定秒数だけ自動で待ちます。設定がシンプルで初心者向きです。explicit_wait(明示的な待機)は特定の条件が満たされるまで待つより細かい制御ができますが、コード量が増えます。まずは暗黙的な待機から始めましょう。
🤔 Q4. XPathはどうやって調べればいいですか?
Chromeのデベロッパーツール(F12キー)を開き、目的の要素を右クリック→「検証」で該当タグを選択、そのタグをさらに右クリック→「Copy」→「Copy XPath」でXPathを自動取得できます。まずはこの方法でXPathを確認しながらコードを書くと効率的です。
🤔 Q5. ログインが必要なページはスクレイピングできますか?
技術的にはSeleniumでフォームへの入力・ログインボタンのクリックを自動化することで対応できます。ただし、対象サービスの利用規約によってはスクレイピングが禁止されている場合があります。実行前に必ずサービスの規約を確認し、ルールの範囲内で利用してください。
🎯 まとめ
Seleniumを使えば、JavaScriptで描画される動的ページのスクレイピングはもちろん、クリック・フォーム入力・ドロップダウン選択など、ブラウザ操作を丸ごとPythonで自動化できます。Beautiful SoupでHTMLの基礎を理解したうえでSeleniumを組み合わせることで、Webデータ活用の幅は格段に広がります。ぜひ実際のページで試して、自動化の手応えを体感してみてください🤖✨


















































コメント