本記事では初心者向けにWebDriverの基礎知識やインストール手順・基本的な使い方について解説します。
Selenium WebDriverとは
Selenium(セレニウム)は、Webアプリケーションのテストの自動化をサポートするオープンソースフレームワークであり、2004年に開発されました。多くのブラウザ操作を外部のプログラムから直接制御するAPIを提供しています。
そして、Selenium WebDriverはその中核を成すツールです。「Selenium1(Selenium RC)」と「WebDriver」を統合する形でSelenium 2.0に導入され、2011年にリリースされました。そのため「Selenium2」と呼ばれることもあります。
Chrome/Firefox/Internet Explorer/Opera/Android/iOSなどのブラウザに対応しており、Java/C#/Python/Rubyなどの言語が利用できます。Selenium WebDriverには「FirefoxDriver」や「ChromeDriver」といった、各WebブラウザをコントロールするAPIがそれぞれ実装されていて、それぞれを「WebDriver」とします。Seleniumはほかにもテストケースを記録・再生するブラウザ拡張機能「Selenium IDE」やテストスクリプトを複数のブラウザ/OSで並行して実行する「Selenium Grid」といったコンポーネントを提供しており、それぞれ異なるテストニーズに対応しています。で導入されました。
Selenium1との違い
Webブラウザを自動で操作するという面では「Selenium1(Selenium RC)」と同じですが、Selenium WebDriverでは、ブラウザの拡張機能やOSの機能を利用してブラウザを操作できるため、Selenium1のように、セキュリティ制限を受けずに済みます。
WebDriverの仕組み
Seleniumは、Pythonをはじめとするプログラミング言語で実行します。例えば、Google Chromeを開きたい場合、プログラムでブラウザを開くようSeleniumに指示すればSelenium側で処理を行い、Chrome用のドライバーにブラウザを開くよう指示をします。
WebDriverでできること
Selenium WebDriverはWeb ページへの移動やユーザ入力、JavaScript の実行など、多様な機能を提供します。Web画面操作の実行テストやスクリーンショット撮影、ブラウザによる表示の違いの比較など、Webアプリ開発の役に立ちます。
WebDriverの主な活用例
Webアプリケーションテスト
Webアプリケーション開発において、正常に動作するかを確認するテストは欠かせません。Selenium WebDriverは、テスト工程の自動化に利用されることが多いです。テスト結果の正確性を上げる機能も利用できます。また、メッセージングアプリと連携すればテスト結果をリアルタイムで確認できます。
Webスクレイピング
Webスクレイピングでも、Selenium WebDriverを使用してテストを行う場合があります。スクレイピングとは、任意のWebサイトやプログラムなどから入手したデータを解析し、不要な部分を取り除いて特定の情報のみを抽出し、ソフトウェアで処理がしやすいように整形するコンピュータソフトウェア技術のことでデータ分析やマーケティングに役立ちます。Seleniumは、HTMLだけでなくJavaScriptにも対応しているため動的なページのWebスクレイピングにも適しているのです。この際、「Beautiful Soup」や「Requests」などのほかのライブラリと組み合わせて用いられます。
利用手順
本記事ではPythonでブラウザを自動操作する手順を紹介します。
Seleniumのインストール
コマンドプロンプトで下記コマンドを実行します。
pip install selenium
次のように表示されればインストール完了です。
Installing collected packages: selenium
Successfully installed selenium-(バージョン)
pipのupgradeが必要な場合は、下記コマンドでpipを更新してから再度実行してください。
pip install --upgrade pip
WebDriverのインストール
現在のブラウザのバージョンを確認
Webドライバーのバージョンをブラウザのバージョンと合わせる必要があります。ブラウザごとの確認方法を以下に示します。
対応するバージョンの調べ方
ブラウザ | バージョンの確認手順 |
Google Chrome | ブラウザのバージョン番号に対応 (ブラウザが114.0.xxxであればドライバーは114.0.xxx) |
Microsoft Edge | ブラウザのバージョン番号に対応 |
Firefox | ダウンロードページのリリースノートに記載されている (Firefox version is xxx) |
現在のChromeバージョンを確認する
Chromeの場合、ブラウザの右上の3点マーク>ヘルプ>「Google Chromeについて」 で確認できます。
【パスを通している場合】現在のChromeDriverのバージョンを確認する
chromedriverの場所を確認する
ChromeDriverのバージョンを確認するには、ChromeDriverのある場所を確認します。コマンドプロンプトを起動し、次のコマンドを実行しましょう。
where chromedriver
パスが通っているとChromedriverのパスが表示されます。
chromedriverのある場所に移動する
そのうち、「\chromedriver.exe」を省く部分をコピーします。カーソルを当てた状態で[Enter]キーを押すことでコピーできます。また、右クリックすればコピー内容をペーストできます。
cd whereコマンドの実行結果のディレクトリ
(例)cd C:\Program Files\selenium
chromedriverを起動する
次のコマンドでChromedriverを起動します。
chromedriver.exe
※パスを通していない場合はこの方法は使用できません。
ドライバーのインストール
Chrome Driverのインストール
【方法1】ChromeDriverをインストールする
ChromeDriverは、Google社が提供するドライバーです。
ダウンロードページにアクセスし、ドライバーをダウンロードします。バージョンが完全に一致してない場合は、Chromeのバージョンより数値が小さいものの中で最新のものを選びましょう。
【方法2】chromedriver-binaryを利用する場合
chromedriver-binaryは、サードパーティ製品で、ドライバーのダウンロードとパスを通す設定もしてくれます。コマンドプロンプトからpipインストールをします。目的に応じて適したバージョンをインストールしましょう。
最新バージョンをインストールする場合
pip install chromedriver-binary
Chromeのバージョンに自動で合わせる場合
Chromeのバージョンに対応するドライバーを自動でダウンロードします。
pip install chromedriver-binary-auto
バージョンを指定してインストールする場合
バージョンを指定する場合はバージョン番号を明記しましょう。
pip install chromedriver-binary == バージョン
2種類の方法がありますが、初心者はchromedriver-binaryを使う方法がおすすめです。この方法では「適切な場所にインストーラを配置する」手順が不要になるためです。
Microsoft Edge WebDriverのインストール
公式ページから自身の環境に応じたインストーラを選択しインストールします。PCのスペックはスタート>設定>バージョン情報で確認できます。
Firefox Driverのインストール
公式ページから自身の環境に応じたインストーラを選択しインストールします。PCのスペックはスタート>設定>バージョン情報で確認できます。
適切な場所にインストーラを配置する
※chromedriver-binaryでインストールした場合は不要
ChromeDriverの置く場所はどこでもかまいませんが、プロジェクトが増えた場合にしっかり管理できていないとドライバーの位置を把握しずらくなってしまいます。そのため適した位置に配置するのが望ましいでしょう。
システム全体で同じバージョンを使う場合
PythonからSelenium WebDriverでドライバーを起動する場合、パスが通る場所に格納すればコード内でパスを明記しなくても問題ありません。システムのパス環境変数に含まれる場所に置けば実行時にパスを記載しなくて済みます。「C:\Windows」「C:\Windows\system32(または64)」「C:\Windows\System32(または64)\Wbem」のいずれかに置きましょう。この場合、ソース内でパスを通す必要はありません。ただし、配置箇所を忘れないよう注意が必要です。
プロジェクトごとにドライバーのバージョンを変える場合
Pythonプロジェクトと同じフォルダに格納して問題ありません。ただし、別のプロジェクトでドライバーを使用する場合はコード内でパスを指定する必要があります。
ドライバーを置き換える場合は必ずプログラムを止めてから配置しましょう。プログラムの実行中は配置できないことに注意が必要です。
ブラウザを操作するコードの作成
ブラウザを操作するコードを作成します。コード作成にはVisual StudioなどのIDEやVSCodeなどのエディタを使用しましょう。なお、サンプルコードはGoogleのトップページを開き、5秒後にブラウザを閉じる場合のPythonコードになっています。
Chromeを自動操作する場合
from selenium import webdriver
import time
driver = webdriver.Chrome()
driver.get('https://www.google.com/?hl=ja')
time.sleep(5)
driver.close()
(chromedriver-binaryでインストールした場合)
from selenium import webdriver
import chromedriver_binary
import time
driver = webdriver.Chrome()
driver.get('https://www.google.com/?hl=ja')
time.sleep(5)
driver.close()
Edgeを自動操作する場合
driverのインスタンス化の部分を下記コードに変更します。
driver = webdriver.Edge()
Firefoxを自動操作する場合
driverのインスタンス化の部分を下記コードに変更します。
driver = webdriver.Firefox()
注意点
ブラウザごとにインストールが必要
WebDriverはクロスブラウザに対応していますが、Chromeであればchromedriverというようにブラウザごとにドライバーをインストールする必要があります。
定期的なドライバーの更新が必要
ブラウザのバージョンは日々更新されているのでドライバーもそれに合わせて更新しましょう。ブラウザとドライバーのバージョンが異なっている場合、エラーが出てSelenium WebDriverが実行できない可能性があります。
Selenium WebDriverの基本的な使い方
下記コードをコピペして実行してみましょう。これはGoogleのトップページを開き、5秒後にブラウザを閉じるPythonコードです。
【サンプルコード】
from selenium import webdriver
import time
driver = webdriver.Chrome()
driver.get('https://www.google.com/?hl=ja')
time.sleep(5)
driver.close()
ブラウザが自動で開いて5秒後に閉じていれば成功です。
Selenium WebDriverでブラウザを開くと、ログアウト状態でブラウザが起動し、「Chromeは自動テスト ソフトウェアによって制御されています。」と表示されます。
もし、次のように表示された場合は
‘chromedriver’ executable needs to be in PATH
ChromeDriverの場所を明示して実行します。
driver = webdriver.Chrome(r'C:\Users\~~~\chromedriver')
※「r」はPythonでパスをエスケープせずに記述する方法です。
プロジェクトごとにドライバーのバージョンを分けている場合はほかのプロジェクト内のドライバーを認識してしまわないよう明示するのがいいでしょう。
主要なメソッド【一覧】
Selenium WebDriverでよく使用するメソッドを一覧でまとめています。本記事ではPythonでの記述方法を紹介しますが言語によって書き方は異なるので注意してください。
▼ブラウザを起動する
driver = webdriver.xxx()
ブラウザ | メソッド |
Google Chrome | webdriver.Chrome() |
Edge | webdriver.Edge() |
Firefox | webdriver.Firefox() |
▼指定のURLに遷移する
driver.get('URL')
▼一つ前に戻る
driver.back()
▼一つ先に進む
driver.forward()
▼ブラウザを更新する
driver.refresh()
▼現在のURLを表示する
driver.current_url
▼ソースを取得する
driver.page_source
▼要素を取得する
driver.find_element_by_class_name("classname") #classで指定
driver.find_element_by_id("id") #idで指定
driver.find_element_by_xpath("xpath") #xpathで指定 単数
driver.find_element_by_xpaths("xpath") #xpathで指定 複数
▼要素をクリックする
driver.find_element_by_xpath("XPATH").click()
▼スクリーンショットを撮る
driver.save_screenshot(‘C:\test\screenshot.png’) #拡張子は.png、フルパスで指定する
▼スクロールする
driver.execute_script(‘window.scrollBy(x, y);’) #ピクセルで指定する
(例)
driver.execute_script('window.scrollBy(0, 100);') #垂直方向に100ピクセルスクロールする
driver.execute_script('window.scrollTo(0, document.body.scrollHeight);') #最下部にスクロールする
▼全画面表示にする
driver.maximize_window()
▼現在のブラウザを閉じる
driver.close()
▼すべてのブラウザを閉じる
driver.quit()
まとめ
SeleniumはもともとUIテストを自動化するのを目的として開発されましたが、現在はそれだけでなく、Webスクレイピングや繰り返し作業の効率化など、幅広い用途で利用されています。昨今はPower AutomateなどのRPAツールで自動化することも多いですが、テストの自動化にはSeleniumが適しています。RPAツールは有料のものが多いですが、Seleniumはオープンソースなので無料でネット上には豊富に情報があるので、初心者でも安心ですね。
ITスキルの習得方法は?
書籍やインターネットで学習する方法があります。昨今では、YouTubeなどの動画サイトやエンジニアのコミュニティサイトなども充実していて多くの情報が手に入ります。
そして、より効率的に知識・スキルを習得するには、知識をつけながら実際に手を動かしてみるなど、インプットとアウトプットを繰り返していくことが重要です。特に独学の場合は、有識者に質問ができたりフィードバックをもらえるような環境があると、理解度が深まるでしょう。
ただ、ITスキルを身につける際、どうしても課題にぶつかってしまうことはありますよね。特に独学だと、わからない部分をプロに質問できる機会を確保しにくく、モチベーションが続きにくいという側面があります。独学でモチベーションを維持する自信がない人にはプログラミングスクールという手もあります。費用は掛かりますが、その分スキルを身につけやすいです。しっかりと知識・スキルを習得して実践に活かしたいという人はプログラミングスクールがおすすめです。
プログラミングスクールならテックマニアがおすすめ!
ITスキル需要の高まりとともにプログラミングスクールも増えました。しかし、どのスクールに通うべきか迷ってしまう人もいるでしょう。そんな方にはテックマニアをおすすめします!これまで多くのITエンジニアを育成・輩出してきたテックマニアでもプログラミングスクールを開講しています。
<テックマニアの特徴>
・たしかな育成実績と親身な教育 ~セカンドキャリアを全力支援~
・講師が現役エンジニア ~“本当”の開発ノウハウを直に学べる~
・専属講師が学習を徹底サポート ~「わからない」を徹底解決~
・実務ベースでスキルを習得 ~実践的な凝縮カリキュラム~
このような特徴を持つテックマニアはITエンジニアのスタートラインとして最適です。
話を聞きたい・詳しく知りたいという方はこちらからお気軽にお問い合わせください。