Webブラウザの自動操作やスクレイピングを行う上で、PythonPython [パイソン]汎用プログラミング言語とSeleniumの組み合わせは非常に強力です。なお、静的なHTMLHTML [エイチティーエムエル]HyperText Markup Language。Webページの構造を記述する言語を取得するだけなら、SeleniumよりHTTPHTTP [エイチティーティーピー]HyperText Transfer Protocol。Webでのデータ転送プロトコルクライアントやHTMLパーサーを利用したほうが効率的な場合があります。
本記事では、Pythonを使ったSeleniumの基本的な使い方を、初心者にもわかりやすく解説します。最新のSelenium 4に対応した記述方法で紹介するため、環境構築も非常にシンプルになっています。
Seleniumとは?
Selenium(セレニウム)は、Webブラウザの操作を自動化するためのフレームワークです。
もともとはWebアプリケーションの自動テストツールとして開発されましたが、現在では以下のような用途で広く利用されています。
- Webスクレイピング: 定期的なデータ収集や自動情報取得
- ルーティン作業の自動化: Webフォームへの自動入力や定期的なボタンクリック
- 自動テスト: Webサイトの動作確認
Pythonと組み合わせることで、直感的かつ短いコードで高度なブラウザ操作を実現できます。
PythonでSeleniumを使う準備(環境構築)
最新のSelenium(バージョン4.6以降)では「Selenium Manager」という機能が搭載され、基本的には以前のように手動でChromeDriverなどをダウンロードしてパスを通す必要がなくなりました。
必要なパッケージのインストール
まずはPython環境にSeleniumをインストールします。ターミナル(またはコマンドプロンプト)で以下のコマンドを実行してください。
pip install selenium一般的な環境であれば、これだけで準備は完了です!
Python Seleniumの基本的な使い方
ここからは、実際にPythonでSeleniumを使ってブラウザを操作する基本的な手順を解説します。
1. ブラウザを起動してWebページを開く
まずはGoogle Chromeを起動し、指定したURLURL [ユーアールエル]Uniform Resource Locator。Webページのアドレス(今回はGoogleのトップページ)を開くコードです。
from selenium import webdriverimport time
# Chromeを起動driver = webdriver.Chrome()
# Googleのトップページを開くdriver.get("https://www.google.com")
# 動作確認のため3秒待機time.sleep(3)
# ブラウザを閉じるdriver.quit()2. 要素を取得して操作する(文字入力・検索)
Webページ上の検索ボックスやボタンを操作するには、HTMLの要素(Element)を特定する必要があります。Seleniumでは By クラスを使って要素を指定します。
from selenium import webdriverfrom selenium.webdriver.common.by import Byfrom selenium.webdriver.common.keys import Keysimport time
driver = webdriver.Chrome()driver.get("https://www.google.com")
# 検索ボックス(name属性が"q"の要素)を取得search_box = driver.find_element(By.NAME, "q")
# 「Python Selenium」と入力search_box.send_keys("Python Selenium")
# Enterキーを押して検索を実行search_box.send_keys(Keys.RETURN)
time.sleep(3)driver.quit()3. スクリーンショットを撮る
スクレイピングやテストの記録として、表示されている画面のスクリーンショットを保存することも簡単です。
# 画面全体のスクリーンショットを保存driver.save_screenshot("screenshot.png")よく使う便利な操作一覧
Python×Seleniumでよく使われる操作メソッドをまとめました。
- 要素のクリック:
element.click() - テキストの取得:
element.text - 属性(URLなど)の取得:
element.get_attribute("href") - ブラウザを閉じる:
driver.quit()(※driver.close()は現在アクティブなタブまたはウィンドウのみを閉じます)
待機処理(明示的な待機)
Webページ上の要素がまだ利用可能になっていない状態で操作しようとすると、エラーになることがあります。そこで WebDriverWait を使って、「特定の要素がDOMDOM [ドム]Document Object Model。HTMLの木構造の表現上に存在するまで待機する」処理を入れるのが一般的です。
from selenium.webdriver.support.ui import WebDriverWaitfrom selenium.webdriver.support import expected_conditions as ECfrom selenium.webdriver.common.by import By
# "main"というIDを持つ要素が見つかるまで最大10秒間待機WebDriverWait(driver, 10).until( EC.presence_of_element_located((By.ID, "main")))💡【ワンポイント・アドバイス】待機処理の混在は避けましょう
Seleniumには
driver.implicitly_wait()という「暗黙的な待機」を設定する方法もありますが、上で紹介したWebDriverWait(明示的な待機)と混在させることは非推奨とされています。両方を同時に設定すると、タイムアウトの時間が予測不能になり、スクリプトの動作が不安定になる原因となります。基本的には、確実な制御ができるWebDriverWait(明示的な待機)に絞って利用することをおすすめします。
ヘッドレスモード(画面を表示せずに実行)
スクレイピングをバックグラウンドで実行したい場合、ブラウザの画面を表示しない「ヘッドレスモード」が便利です。GUIGUI [ジーユーアイ / グーイ]Graphical User Interface。グラフィカルな操作画面を表示しないため、サーバーなど画面を必要としない環境での自動化に適しています。
from selenium import webdriverfrom selenium.webdriver.chrome.options import Options
options = Options()# ヘッドレスモードを有効化options.add_argument('--headless=new')
# オプションを指定してドライバを起動driver = webdriver.Chrome(options=options)driver.get("https://www.google.com")
print(driver.title) # タイトルを取得して出力driver.quit()実践に向けた重要な注意点
Seleniumを使って自動化を進めるにあたり、いくつか気をつけておきたいポイントがあります。
1. スクレイピング目的で利用する際の法的・倫理的配慮
SeleniumをWebスクレイピングに利用する場合、対象サイトの利用規約(Terms of Service)やrobots.txtを確認し、サイト側が示しているアクセス方針を尊重してください。また、短時間に大量のアクセスを行うと相手先サーバーに負荷をかける可能性があるため、適切なアクセス頻度に抑えるなどの配慮が重要です。
2. Selenium Managerの環境依存
Selenium Managerによるドライバーの自動管理は非常に便利ですが、完全自動というわけではない場面もあります。Chrome 115以降ではChromeDriverの配布・バージョン情報の取得にChrome for Testingの仕組みが使われています。Selenium Managerがこれらを自動的に処理するため、通常はユーザーが個別に意識する必要はありません。ただし、プロキシやオフライン環境などでは追加設定が必要になる場合があります。
3. 対象サイトの仕様変更による要素指定エラー
上記のコードではGoogleの検索ボックスを By.NAME, "q" で指定していますが、対象となるWebサイトのUIUI [ユーアイ]User Interface。ユーザーとシステムの間で情報をやり取りする接点や画面やHTML構造は頻繁に変更されます。そのため、将来的にこのコードがそのままでは動かなくなるリスクがあります(これはSelenium自体の問題ではなく、対象サイトの仕様変更に起因するものです)。実際の開発では、対象サイトの最新のHTML構造をブラウザの開発者ツールで確認し、適切な要素指定を行ってください。
まとめ:Python Seleniumで自動化を始めよう
PythonとSeleniumを使えば、面倒な日常のブラウザ操作を簡単に自動化できます。
pip install seleniumでインストールwebdriver.Chrome()でブラウザ起動(通常はドライバ設定不要)find_elementで要素を見つけて操作
まずは簡単なスクリプトを書いてみて、自分の作業を自動化する便利さを体感してみてください!
以上で本記事の解説を終わります。
よいITライフを!
人気記事
- 1
- 2
- 3
- 4
- 5
「絶対に挫折させない」という著者の強い意志を感じる、プログラミングの「最初の1冊」としておすすめできる良書です。