【Python特化】おすすめのオンラインプログラミングスクール

【Python】 Seleniumとは?インストールから使い方まで徹底解説!

‎python-selenium3-and-selenium4

Seleniumは、ChromeやEdgeなどのブラウザを自動的に操作するライブラリです。

利用用途として、WebサイトやWebアプリケーションの単体テスト、Webスクレイピングによるデータ収集に使われます。

ここでは、Seleniumのインストールから使い方まで解説します。

筆者の経歴
  • SIer/Web系企業での実務経験があるフリーランスエンジニア
  • プログラミングスクールでの講師実績あり
  • HR領域によるエンジニア特化の採用代行を業務委託で兼務
目次

Seleniumとは

Seleniumは、ブラウザを自動的に操作するライブラリであるため、自動化テストの実施やWebスクレイピングに利用されます。

また、SeleniumはWebサイト・Webアプリに対してブラウザ操作するため、静的ページで構成されたサイトだけでなく動的ページにも対応できます。

特に、SNS等のWebサイト・Webアプリも操作できるので、ログイン機能などが実装されるページにおいても対応できる利点があります。

SeleniumによるWebスクレイピングの流れ

Seleniumによるスクレイピングの流れは、以下の3ステップを踏みます。

スクレイピング時の準備プロセス
STEP
データ収集

API・クローラー/Webスクレイピング等で収集・リクエストし、データを収集します。

STEP
データ抽出

解析から対象になるデータを特定要素(classやxpathなど)から抽出します。

STEP
データ保存・出力

抽出・加工・整形したデータを保存し、目的に沿ったCSVやExcelファイルに出力します。

Webスクレイピングは大きく3ステップに分けられますが、Seleniumはデータ収集とデータ抽出に利用されます。

また、データ収集に対する考え方を詳しく知りたい人は「代表的なデータ収集方法とデータ活用の目的や種類」を一読ください。

Seleniumのインストール

Seleniumは、Pythonの標準ライブラリとしてインストールされていないため、別途インストールする必要があります。

Seleniumはバージョン3とバージョン4の書き方がネット上で混同されているケースが多いです。

そのため、Seleniumのバージョン確認を実施していただけると幸いです。

ここでは、バージョン3とバージョン4の書き方を並行して記載していきます。

pip show selenium

上記コマンドをMacであればターミナル、Windowsであればコマンドプロンプトで実施すれば、Seleniumのバージョンを確認できます。

pip install selenium==3.141.0

上記のpipコマンドでは、バージョン3を指定していますが任意のバージョンを指定し実施してください。

Webdriverとは

Webdriverは、各driver(ChromeDriverやFireFoxDriver・Microsoft Edge webdriverなど)を通じてブラウザと通信します。

また、Webdriverは各driverを通じてブラウザにコマンドを渡し、同ルートを介して情報を受け取ります。

webdriver(ChromeDriver)のインストール

seleniumでは、webdriverとセットで利用する必要があります。

本記事では、最も利用されるChromeDriverによるwebdriverになります。

まだお使いのPCにChromeブラウザがインストールされていない場合、以下のリンクからChromeのダウンロードとインストールを実施してください。

あるいはMicrosoft Edge Chromiumがインストールされていない場合、以下のリンクからダウンロードとインストールを実施してください。

また、ChromeDriverも同様に以下のリンクからダウンロードを実施してください。

webdriverのパス指定について、Selenium3と4で異なるため、注意が必要です。

Chrome用とEdge用にて、それぞれSelenium3,4を記載します。

Google Chrome
# Selenium 3
from selenium import webdriver

options = webdriver.ChromeOptions()
driver = webdriver.Chrome(executable_path="./path/to/driver", options=options)

以下は、改めてSelenium3におけるGoogle Chromeの具体的な手順を示します。

STEP
Google Chrome WebDriverのダウンロード
  • Chromeのバージョンに一致するWebDriverをダウンロードします。
  • ダウンロードリンク: Google Chrome WebDriver
STEP
WebDriverのパスを設定
  • ダウンロードしたchromedriver.exeのパスを指定します。

webdriver.ChromeOptions(): Chrome用のオプションを設定するためのオブジェクトを作成します。
webdriver.Chrome(...): Chrome用のWebDriverを初期化します。
executable_path="./path/to/chromedriver": Chrome WebDriverの実行ファイルへのパスを指定します。

これで、Google Chromeブラウザを使用したSelenium3のテストを実行できます。

# Selenium 4
from selenium import webdriver
from selenium.webdriver.chrome.service import Service

options = webdriver.ChromeOptions()
service = Service(executable_path="./path/to/driver")
driver = webdriver.Chrome(service=service, options=options)

以下は、改めてSelenium4におけるGoogle Chromeの具体的な手順を示します。

STEP
Google Chrome WebDriverのダウンロード
  • Edgeのバージョンに一致するWebDriverをダウンロードします。
  • ダウンロードリンク: Google Chrome WebDriver
STEP
WebDriverのパスを設定
  • ダウンロードしたchromedriver.exeのパスを指定します。

webdriver.ChromeOptions(): Chrome用のオプションを設定するためのオブジェクトを作成します。
Service(executable_path="./path/to/chromedriver"): Chrome WebDriverの実行ファイルへのパスを指定し、サービスを初期化します。
webdriver.Chrome(service=service, options=options): Chrome用のWebDriverを初期化します。

これで、Google Chromeブラウザを使用したSelenium4のテストを実行できます。

Microsoft Edge
# Selenium 3
from selenium import webdriver

options = webdriver.EdgeOptions()
driver = webdriver.Edge(executable_path="./path/to/msedgedriver", options=options)

以下は、改めてSelenium3におけるMicrosoft Edgeの具体的な手順を示します。

STEP
Microsoft Edge WebDriverのダウンロード
  • Edgeのバージョンに一致するWebDriverをダウンロードします。
  • ダウンロードリンク: Microsoft Edge WebDriver
STEP
WebDriverのパスを設定
  • ダウンロードしたmsedgedriver.exeのパスを指定します。

webdriver.EdgeOptions(): Edge用のオプションを設定するためのオブジェクトを作成します。
webdriver.Edge(...): Edge用のWebDriverを初期化します。
executable_path="./path/to/msedgedriver": Edge WebDriverの実行ファイルへのパスを指定します。

これで、Microsoft Edgeブラウザを使用したSelenium3のテストを実行できます。

# Selenium 4
from selenium import webdriver
from selenium.webdriver.edge.service import Service

options = webdriver.EdgeOptions()
service = Service(executable_path="./path/to/msedgedriver")
driver = webdriver.Edge(service=service, options=options)

以下は、改めてSelenium4におけるMicrosoft Edgeの具体的な手順を示します。

STEP
Microsoft Edge WebDriverのダウンロード
  • Edgeのバージョンに一致するWebDriverをダウンロードします。
  • ダウンロードリンク: Microsoft Edge WebDriver
STEP
WebDriverのパスを設定
  • ダウンロードしたmsedgedriver.exeのパスを指定します。

webdriver.EdgeOptions(): Edge用のオプションを設定するためのオブジェクトを作成します。
Service(executable_path="./path/to/msedgedriver"): Edge WebDriverの実行ファイルへのパスを指定し、サービスを初期化します。
webdriver.Edge(service=service, options=options): Edge用のWebDriverを初期化します。

これで、Microsoft Edgeブラウザを使用したSelenium4のテストを実行できます。

端的に言えばSelenium3では、直接executable_pathを指定します。

一方で、Selenium4ではServiceオブジェクトを経由してexecutable_pathに渡します。

webdriver-managerのインストール

Seleniumを利用するにあたり、webdriver(ChromeDriver/EdgeDriverなど)をインストールする必要があります。

また、Chrome等のブラウザは定期的にアップデートされ、古いバージョンのwebdriverが使用できなくなるケースがあります。

そのため、webdriverを自動更新するライブラリであるwebdriver-managerのインストールをおすすめします。

pip install webdriver-manager

上記コマンド実施後、Successfullyが表示されればインストール完了です。

また、Selenium3とSelenium4によってPythonファイルへの記述方法が異なります。

Google Chrome
# Selenium 3
from selenium import webdriver
from webdriver_manager.chrome import ChromeDriverManager

driver = webdriver.Chrome(ChromeDriverManager().install())
# Selenium 4
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from webdriver_manager.chrome import ChromeDriverManager

driver = webdriver.Chrome(service=Service(ChromeDriverManager().install()))
Microsoft Edge
# Selenium 3
from selenium import webdriver
from webdriver_manager.microsoft import EdgeChromiumDriverManager

driver = webdriver.Edge(executable_path=EdgeChromiumDriverManager().install())
# Selenium 4
from selenium import webdriver
from selenium.webdriver.edge.service import Service
from webdriver_manager.microsoft import EdgeChromiumDriverManager

driver = webdriver.Edge(service=Service(EdgeChromiumDriverManager().install()))

上記コードを記述することで、ブラウザバージョンのアップデートの度に、webdriver更新時の手間が省けます。

Seleniumのメソッドの使い方

代表的なSeleniumのメソッドは以下の4つです。

メソッド名説明
.get()対象URLを指定しアクセス/データ取得するメソッド
.find_element_by_〇〇(“”)Selenium3にて利用されるfind系メソッド
.find_element(By.〇〇, “xx”)Selenium4にて利用されるfind系メソッド
.send_keys()対象にデータ送信するメソッド
.click()対象をEnterするメソッド
Seleniumの代表的なメソッド

本記事では、ブラウザ操作に利用するため、上記メソッドを重点的に解説します。

.get()メソッドの使い方

Seleniumでは、webdriverを利用しブラウザを起動する必要があります。

#Googleにアクセス
target_url = "https://www.google.co.jp"
driver.get(target_url)

上記コードを記述することで、Chromeブラウザが起動します。

.find系メソッドの使い方

Chromeブラウザを起動後、.find系メソッドで要素を取得する必要があります。

要素参照先説明
.find_element_by_name(“xx”)name要素のデータ抽出
.find_element_by_id(“xx”)id要素のデータ抽出
.find_element_by_class_name(“xx”)class要素のデータ抽出
.find_element_by_xpath(“xx”)xpath要素のデータ抽出
.find_element_by_css_selector(“xx”)cssセレクタ要素のデータ抽出
Selenium3 – .find_element_by_〇〇

Selenium4の場合、Byオブジェクトを使用するため、以下のモジュールをインポートしておきましょう。

from selenium.webdriver.common.by import By
要素参照先説明
.find_element(By.NAME,”xx”)name要素のデータ抽出
.find_element(By.ID,”xx”)id要素のデータ抽出
.find_elements(By.CLASS_NAME,”xx”)class要素のデータ抽出
.find_element(By.XPATH,”xx”)xpath要素のデータ抽出
.find_element(By.CSS_SELECTOR,”xx”)cssセレクタ要素のデータ抽出
Selenium4 – .find_element(By.〇〇)

Selenium3と4で異なる記述になります。

また、単一データの場合は上記の場合で取得できますが、複数データを取得する場合はelement(s)のように、”s”を付与してください。

本記事では、Chromeの初期画面にて検索ボックス(textarea)を抽出しますが、以下のパターンで抽出できるか確認しました。

# Selenium3
# nameの場合
print(driver.find_element_by_name("q"))
# idの場合
print(driver.find_element_by_id("APjFqb"))
# classの場合
print(driver.find_element_by_class_name("gLFyf"))
# xpathの場合
print(driver.find_element_by_xpath("/html/body/div[1]/div[3]/form/div[1]/div[1]/div[1]/div/div[2]/textarea"))
# cssセレクタの場合
print(driver.find_element_by_css_selector("#APjFqb"))
# Selenium4
# nameの場合
print(driver.find_element(By.NAME, "q"))
# idの場合
print(driver.find_element(By.ID, "APjFqb"))
# classの場合
print(driver.find_element(By.CLASS_NAME, "gLFyf"))
# xpathの場合
print(driver.find_element(By.XPATH, "/html/body/div[1]/div[3]/form/div[1]/div[1]/div[1]/div/div[2]/textarea"))
# cssセレクタの場合
print(driver.find_element(By.CSS_SELECTOR, "#APjFqb"))

これで無事WebElementを取得できました。

.send_keys()メソッドの使い方

ここでは、上述したChromeの初期画面にて検索ボックス(textarea)を抽出し、文字列データを送信します。

パターンは一つに絞りますが、それぞれ要素取得できるパターンで変更してもらえたらと思います。

# Selenium3
driver.find_element_by_name("q").send_keys("Python Selenium")
# Selenium4
driver.find_element(By.NAME, "q").send_keys("Python Selenium")

ブラウザを確認すると、文字列データが検索ボックス(textarea)に入力されていることがわかると思います。

.click()メソッドの使い方

ここでは、上述したChromeの初期画面にて検索ボックス(textarea)に文字列データを送信後、クリック/Enterキーの処理を加えます。

また、Pythonファイルの処理がブラウザ操作より速いため、ブラウザの表示速度に合わせ、timeモジュールにて時間調整します。

import time

Pythonの標準ライブラリであるtimeモジュールをインポートしておきましょう。

# Selenium3
driver.find_element_by_name("q").send_keys("Python Selenium")
time.sleep(1) #処理調整
# form(クリック用)
search_button = driver.find_element_by_xpath("/html/body/div[1]/div[3]/form")
search_button.click()
# Selenium4
driver.find_element(By.NAME, "q").send_keys("Python Selenium")
time.sleep(1) #処理調整
# form(クリック用)
search_button = driver.find_element(By.XPATH, "/html/body/div[1]/div[3]/form")
search_button.click()

これで、Chromeブラウザにて検索結果が表示されているかと思います。

上記の方法を利用することで、ログインID&パスワードなどによるBasic認証を突破するスクレイピングプログラムが作成可能になります。

Selenium3,4におけるタブ・ウィンドウの切り替え方法

Selenium3とSelenium4では、それぞれタブ・ウィンドウの切り替え方法が異なります。

Selenium4は新しいドライバーオブジェクトを作成せず、同じセッションで新しいタブやウィンドウを作成し、フォーカスできます。

そのため、Selenium4は新しいタブあるいは新しいウィンドウを作成し自動的に切り替えるAPIである.new_windowが用意されています。

一方でSelenium3は、URLを新しいタブあるい新しいウィンドウを作成後、ハンドルの切り替えswitch_to.window()を実行する必要があります。

Selenium3メソッド
タブの作成driver.execute_script(“window.open()”)
タブの切り替えdriver.switch_to.window(driver.window_handles[1])
Selenium3 – タブ/ウィンドウ作成と切り替え
Selenium4メソッド
タブの作成/切り替えdriver.switch_to.new_window(“tab”)
ウィンドウの作成/切り替えdriver.switch_to.new_window(“window”)
Selenium4 – タブ/ウィンドウ作成と切り替え

どちらもタブ・ウィンドウ作成後、前のタブ・ウィンドウに戻したい場合はハンドルの切り替えで調整しましょう。

仮に作成後のタブ・ウィンドウの作業が終了し、 ブラウザーで最後に開いたウィンドウまたはタブではない場合、以前使用していたタブ・ウィンドウに切り替える必要があります。

ウィンドウを閉じた後に、別のウィンドウハンドルに切り替えを忘れると、現在閉じられたページでWebDriverが実行されたままになり、No Such Window Exceptionといったエラーが発生します。

Seleniumの実行を継続するには、有効なウィンドウハンドルに切り替える必要があるため注意しましょう。

例えば、対象サイトの検索結果一覧ページを表示しながら、別タブで詳細ページを表示してスクレイピングを実行するといったケースで役立ちます。

SeleniumのWebDriverWaitの使い方

Seleniumを利用してブラウザ操作する場合、ブラウザに対する待機時間もうまく処理する必要があります。

また、Seleniumにおけるエラーの原因は、指定した要素が見つからないことがほとんどです。

人間の操作より遥かに速い操作でプログラムが処理するため、指定要素の存在有無でエラーを引き起こします。

ここでは以下に3つの待機処理を紹介します。

主な待機処理
  • .implicitly_wait()による暗黙的な待機処理
  • WebDriverWait.until()による明示的な待機処理
  • time.sleep()の待機処理

また、Seleniumで待機処理を実施する場合に以下のWebDriverWaitモジュールをインポートしておきます。

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

SeleniumによるWebDriverWaitの使い方(各待機処理の方法)を知りたい人は、「【Python】 SeleniumにおけるWebDriverの使い方を徹底解説!」を一読ください。

本格的にエンジニアへのキャリアチェンジを考えてる人へ

プログラミングスキルを社内やプライベートで活用している人が増えています。

▼プログラミングスキルの活用事例
  • 一部業務プロセスの効率化/自動化
  • 分析システム構築による担当業務改善
  • 社内公開によるチーム/プロジェクトの業務時間短縮

Pythonは特にデータ収集や分析に特化したライブラリが豊富なため、業務プロセスの一元管理やDX化に貢献しています。

また、プログラミングに触れてエンジニアへのキャリアチェンジを実現したい人の人材規模も年々高まっています。

一度、あなたのキャリアプランを振り返ってみてください。

▼現在の状況を考える質問
  • 収入アップが見込めている
  • キャリアアップが見込めている
  • 働き方を明確に決めれている

上記の項目をYESと答えられる人は、特に言うことはありません。

現在、エンジニアへのキャリアチェンジでお悩みの方は、「【Python特化】厳選したおすすめプログラミングスクール」を一読ください。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

sugiのアバター sugi SUGI

【経歴】玉川大学工学部卒業→新卒SIer企業入社→2年半後に独立→プログラミングスクール運営/受託案件→フリーランスエンジニア&SEOコンサル→Python特化のコンテンツサイトJob Code運営中

コメント

コメントする

目次