![見出し画像](https://assets.st-note.com/production/uploads/images/141241919/rectangle_large_type_2_ef8cd960a9304cad7b0b5e577aa01729.png?width=1200)
Seleniumでウェブブラウザ操作を自動化する
この記事ではPythonとSeleniumを使用してSeleniumでウェブブラウザ操作を自動化する方法について紹介しています
Seleniumとは
Selenium(セレニウム)は、ウェブアプリケーションの自動テストを支援するためのフレームワークです。
このツールは特に、ウェブブラウザ上での動作を自動化することに特化しており、各種ブラウザでの動作確認やユーザーインタラクションのシミュレーションが可能です。
Seleniumはオープンソースプロジェクトとして広く利用されており、多くの開発者やテスターに支持されています。
Seleniumの使用用途
自動化テスト:
ウェブアプリケーションの品質保証のため、繰り返し実行するテストを自動化します。これにより、手作業によるテストの時間を削減し、エラーの発見を迅速化します。
レグレッションテスト:
アプリケーションに変更を加えた際に、新たなバグが導入されていないかを確認するために実施します。Seleniumを使用することで、広範囲にわたる機能を効率的に再テストできます。
クロスブラウザテスト:
異なるブラウザ間でウェブアプリケーションが一貫した動作をするかをテストします。Seleniumは多くのブラウザとOSをサポートしているため、幅広い環境でのテストが可能です。
ロードテストの一部として:
ユーザーの動作をシミュレートすることで、ウェブアプリケーションのパフォーマンスを評価する際に利用されることがあります。
スクレイピング:
ウェブサイトからデータを自動的に収集するために使用されることもあります。Seleniumを使うことで、requestsではスクレイピングが難しいJavaScriptで動的に生成されるコンテンツのあるページからもデータを抽出できます。
Seleniumはその柔軟性と強力な機能により、多くの企業や個人開発者にとって不可欠なツールとなっています。テスト自動化のニーズに応じて選択できる複数のコンポーネントを持ち、継続的インテグレーション(CI)環境との統合も容易です。これにより、開発サイクルの速度を上げると同時にアプリケーションの品質向上を図ることができます。
Seleniumのセットアップ
Seleniumライブラリのインストール
PythonでSeleniumを使用するには、まずSeleniumパッケージをインストールする必要があります。
$ pip install selenium
基本的なスクリプト
以下の例は、Googleにアクセスして検索を行う基本的なスクリプトです。
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.by import By
# WebDriverのパス指定
driver = webdriver.Chrome('/path/to/chromedriver')
# Googleのページを開く
driver.get("https://www.google.com")
# ページタイトルを確認
assert "Google" in driver.title
# 検索ボックスを特定
search_box = driver.find_element(By.NAME, "q")
# 検索語を入力し、Enterキーを押す
search_box.send_keys("Selenium 4")
search_box.send_keys(Keys.RETURN)
# ページソースで検索結果を確認
assert "No results found." not in driver.page_source
# ブラウザを閉じる
driver.quit()
コードの解説
上記のPythonスクリプトはSelenium WebDriverを使用して、Googleの検索ページを操作し、特定の検索を実行する自動化プロセスを示しています。各行の動作を順に解説します。
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.by import By
ここでは、Seleniumライブラリから必要なモジュールをインポートしています。`webdriver`はブラウザを操作するためのモジュール、`Keys`はキーボードのキー操作をシミュレートするためのモジュール、`By`は要素を特定するための方法を指定するためのモジュールです。
driver = webdriver.Chrome()
`webdriver.Chrome()`はChromeブラウザのWebDriverを起動します。このコマンドはChromeブラウザを自動操作するためのドライバーインスタンスを生成します。`webdriver.Chrome('/path/to/chromedriver')`のようにパスを指定する場合もありますが、Selenium4以降はパスが環境変数に設定されていれば直接このように記述できます。
driver.get("https://www.google.com")
`driver.get(URL)`は指定されたURLにブラウザでアクセスします。この例ではGoogleのホームページを開いています。
assert "Google" in driver.title
この行はページのタイトルが"Google"を含むことを確認するアサーションです。もし"Google"がタイトルに含まれていなければ、アサートエラーが発生しプログラムが停止します。
search_box = driver.find_element(By.NAME, "q")
Googleの検索ボックスを特定します。`find_element`メソッドはページ上の要素を探し、`By.NAME, "q"`は`name`属性が"q"(Googleの検索ボックスの名前属性)である要素を指定しています。
search_box.send_keys("Selenium 4")
特定された検索ボックス(`search_box`)にテキスト"セレニウム 4"を入力します。
search_box.send_keys(Keys.RETURN)
検索ボックスにキーボードのEnterキー(`RETURN`)を送信して、実際に検索を実行します。
assert "No results found." not in driver.page_source
このアサーションは検索結果ページが"No results found."テキストを含まないことを確認します。これにより、有効な検索結果が得られたことを確認します。
driver.quit()
`driver.quit()`はブラウザセッションを終了し、開いたウィンドウをすべて閉じます。これはテストやスクリプトの最後に常に実行するべきクリーンアップ手順です。
よく使うメソッド
要素の操作: テキストの入力やクリックなど、ユーザーの操作を自動化できます。
send_keys():要素にキーボード入力を送信。
click():要素をクリック。
ページの情報取得: ページのタイトルやURL、ソースコードなどを取得できます。
driver.title
driver.current_url
driver.page_source
Selenium使用時の注意点
動的コンテンツの取り扱い: JavaScriptなどで動的に生成されるコンテンツに対しては、要素が完全にロードされるまで待つ必要があります。
WebDriverWait と expected_conditions を利用することで、特定の条件が満たされるまで待機することが可能です。リソースの管理: Seleniumを使用した後は、必ず driver.close() または driver.quit() を呼び出して、開いたブラウザウィンドウやセッションを適切に閉じることが重要です。