こんにちは、DXCEL WAVEの運営者(@dxcelwave)です!
- Seleniumとは?何ができるの?
- Pythonを用いてSeleniumをどうやって動かすの?
Selenium(セレニウム)とは
Seleniumとは、Webブラウザを起動し操作自動化を実現できるPythonモジュールです。Seleniumを用いると、例えばブラウザ上のフォーム記入、マウスクリック、ブラウザ画面遷移という操作が自動化可能です。
【参考】Selenium学習におすすめの教材
Seleniumによるブラウザ操作について詳しく学習したい方向けにおすすめの教材をご紹介します。
Seleniumでできること
Seleniumを用いたWebブラウザ自動操作により、次のようなことが実現できるようになります。ここでは代表的な「Webブラウザの自動操作」「Webスクレイピング」「テスト自動化」について言及します。
Webブラウザの自動操作
ブラウザ自動操作とは、人間が行う手動操作(検索・入力操作等)をSeleniumによって直接的に実行することを指します。
例えば、次のような操作の自動化検討に際してSeleniumの活用が期待されます。
- Webサイトのフォームを記入する
- 会員サイトにログインしてデータを取得する
- Webサイトからデータをダウンロードする
- 複数サイトを横断しモニタリング(画面キャプチャなど)する
Webスクレイピング
Webスクレイピング(Web Scraping)とは、WebサイトのHTMLからデータを抽出する技術を指します。スクレイピング、Webスクレイピングの他に、Webデータ抽出、データスクレイピング、ウェブ・クローラー、ウェブ・スパイダー等と呼ばれることもあります。
Seleniumは、RequestsやBeautiful Soupのように、Webスクレイピングモジュールとしても活用が可能です。ただしSeleniumの場合、Webブラウザを起動するため、スクレイピング完了に至るまでの処理速度が遅いという課題もあります。
単純なWebスクレイピングであれば、RequestsやBeautiful Soupを活用し、動的なサイトやログインが必要な会員サイトからのWebスクレイピングであればSeleniumを活用するのがおすすめです。
テスト自動化
ITエンジニア向けとして、開発直後のシステムやWebアプリのテストにSeleniumを活用することもできます。例えば、次のような動作テストの自動化には最適と言えます。
- 入力フォームが正しく入力できるか確認する入力テスト
- ボタンクリックが正しく機能するか確認する画面遷移テスト
- 記録としてWebアプリの画面キャプチャを自動出力する
【環境構築】PythonでSeleniumを活用する
Python環境でSeleniumモジュールを利用するには、いくつか初期設定が必要です。
以下に示す手順で環境設定を完了しましょう。
Seleniumモジュールのインストール
Seleniumモジュールをインストールします。以下に示すpipコマンドを用いると良いです。
pip install selenium
Webドライバーのインストール
SeleniumによるWebブラウザの操作では、専用のWebドライバーが必要になります。例えば、WebブラウザにChromeを用いる場合はChromeドライバー、Firefoxを用いる場合はGeckoドライバーが必要です。
お好みのWebドライバーをインストールしましょう。
【Chrome】Chromeドライバーのインストール手順
Windowsの場合
Web Driver for Chromeにアクセスし、Chromeドライバーをインストールします。
Chromeドライバーは、お手元のGoogle Chromeのバージョンと同じものをインストールするようにしましょう。Google Chromeのバージョンは「ツールバーのメニューボタン>設定>Chromeについて」をもとに確認が可能です。
Macの場合
Homebrewを用いてChromeドライバーをインストールできます。ターミナルを開き、下記コマンドを実行します。
brew install chromedriver
※Homebrewのインストールが未済の場合、事前にインストールが必要です。
※Homebrewのインストールは、Homebrew公式ページから対応可能です。
【Firefox】Geckoドライバーインストール手順
Windowsの場合
Mozilla Gecko Driverのgithubリンクを開き、Geckoドライバーのzipファイルをダウンロードします。
zipファイルは解凍してgeckodriver.exe
というファイルを取り出し、Seleniumのコードを記述した作業ファイルと同じディレクトリに配置しましょう。
Macの場合
Homebrewを用いてGeckoドライバーをインストールできます。ターミナルを開き、下記コマンドを実行します。
brew install geckodriver
※Homebrewのインストールが未済の場合、事前にインストールが必要です。
※Homebrewのインストールは、Homebrew公式ページから対応可能です。
Selenium動作チェック
SeleniumモジュールおよびWebドライバーのインストール完了後、Python環境で動作チェックします。
以下のコードを実行した時に、ブラウザが起動しGoogleページが表示されれば動作確認完了です。
【Chrome】Chromeドライバー利用の場合
# Selenium
from selenium import webdriver
from selenium.webdriver.support.ui import Select
from selenium.webdriver.common.keys import Keys
# Chrome Driver
from webdriver_manager.chrome import ChromeDriverManager
# ブラウザインスタンス
browser = webdriver.Chrome(ChromeDriverManager().install())
# リンクを開く
browser.get("https://www.google.co.jp/")
【Firefox】Geckoドライバー利用の場合
# Selenium
from selenium import webdriver
from selenium.webdriver.support.ui import Select
from selenium.webdriver.common.keys import Keys
# ブラウザインスタンス
browser = webdriver.Firefox()
# リンクを開く
browser.get("https://www.google.co.jp/")
【Python】Seleniumを用いたWebブラウザを操作コードの記述手順
Seleniumを用いたWebブラウザ操作実現には、Pythonコードの記述が必要です。Pythonコードの記述は非常にシンプルであり、意識するポイントは①HTML要素を取得し、それに対してい②アクションを付与するという書き方です。
具体的に、ブラウザ操作するコーディング手順は次のように実行されます。1つずつ確認していきましょう。
- Windowsのコンソール画面を開き要素を見つける
- 【Python】対象要素を取得するコードを記述
- 【Python】対象要素にアクションを付与するコードを記述
Windowsのコンソール画面を開き要素を見つける
例えば上図のように「次へ」ボタンを押下する操作を自動化したいと考えたとします。
Windowsのコンソール画面を開き、「次へ」ボタンに該当する要素を見つけ出します。
【Python】対象要素を取得するコードを記述
前述のWindowsコンソール画面では、「次へ」ボタンのHTML要素が以下であると分かったとします。
<button id="btnNext" name="btnNext"><span>次へ</span></button>
上記の場合、ボタン要素を取得するPythonコードは次のように記述できます。
# 要素を取得する
btn = browser.find_element_by_id('btnNext')
指定したブラウザのURLに対してfind_element_by_xxx()
メソッドを用いて要素を取得するという流れです。今回の例ではid
をもとに取得しましたが、他にもいろんな要素取得方法があります。(詳しくは後述)
【Python】対象要素にアクションを付与するコードを記述
前述で取得した要素に対して、アクションを付与します。今回の場合、クリックアクションを付与したいため、次のようなコードを追記します。
# 要素を取得する
btn = browser.find_element_by_id('btnNext')
# アクションを付与する
btn.click()
【Python × Selenium】HTML要素を取得する
この見出しでは、Pythonコードを用いてHTML要素を取得する方法について言及します。
要素を1つ取得する
HTML要素を1つ取得する場合、find_element_by_xxx()
メソッドを用いた次のような方法があります。
メソッド | 取得できる情報 |
---|---|
browser.find_element_by_class_name(‘クラス名’) | CSSクラスが’クラス名’である要素 |
browser.find_element_by_id(‘id名’) | id属性が一致する要素 |
browser.find_element_by_name(‘Name’) | name属性が一致する要素 |
browser.find_element_by_tag_name(‘Name’) | タグ名がNameに一致する要素 |
browser.find_element_by_partial_link_text(‘text’) | textに部分一致する<a>要素 |
browser.find_element_by_link_text(‘text’) | textに完全一致する<a>要素 |
browser.find_element_by_css_selector(‘セレクタ名’) | CSSセレクタにマッチする要素 |
複数の同じ要素情報を一括して取得する場合
複数の同じ要素を全て取得したい場合、find_elements_by_xxx()
メソッドを用いて次のように記述します。
メソッド | 取得できる情報 |
---|---|
browser.find_elements_by_class_name(‘クラス名’) | CSSクラスが’クラス名’である全要素のリスト情報 |
browser.find_elements_by_id(‘id名’) | id属性が一致する全要素のリスト情報 |
browser.find_elements_by_name(‘Name’) | name属性が一致する全要素のリスト情報 |
browser.find_elements_by_tag_name(‘Name’) | タグ名がNameに一致する全要素のリスト情報 |
browser.find_elements_by_partial_link_text(‘text’) | textに部分一致する<a>全要素のリスト情報 |
browser.find_elements_by_link_text(‘text’) | textに完全一致する<a>全要素のリスト情報 |
browser.find_elements_by_css_selector(‘セレクタ名’) | CSSセレクタにマッチする全要素のリスト情報 |
【Python × Selenium】Webブラウザアクション操作を付与する
前述で取得したHTML要素に対して、Webブラウザの操作アクションを付与できるコードを紹介します。
要素が持つデータを取得する
以下に示すメソッドを活用すると、対象要素のデータが取得できます。
メソッド | 説明 |
---|---|
get_attribute(name) | 要素の「属性nameの値」が取得可能なメソッド。 |
text | 要素の「内部テキスト」が取得可能なメソッド。 例えば<span>こんにちは</span>なら’こんにちは’が取得できる。 |
current_url | 現在表示しているURLを取得するメソッド。 |
is_displayed() | 要素が可視の場合True、不可視の場合Falseを渡すメソッド。 |
is_enabled() | Input要素が有効ならTrue、無効ならFalseを渡すメソッド。 |
is_selected() | チェックボックスやラジオボタン要素にチェックがある場合True、 無い場合Falseを渡すメソッド。 |
location | ‘x’と’y’のキーを持つ辞書であり、要素がある座標情報を取得するメソッド。 |
Webブラウザを操作する
指定した要素に対してブラウザ操作を適用したい場合、次のようなメソッドを活用します。
メソッド | 説明 |
---|---|
click() | 指定した要素をクリックする。 |
send_keys(‘入力情報’) | 指定した要素に情報を入力する。 フォームのテキスト入力操作としての利用が多い。 |
browser.back() | ブラウザの[戻る]ボタンをクリックする。 |
browser.forward() | ブラウザの[進む]ボタンをクリックする。 |
browser.refresh() | ブラウザの[再読み込み]ボタンをクリックする。 |
browser.quit() | ブラウザの[ウィンドウを閉じる]ボタンをクリックする。 |
キーボードを操作する
Seleniumではブラウザ操作以外にもキーボード操作が可能です。以下実現可能な操作について言及します。
メソッド | 説明 |
---|---|
Keys.DOWN Keys.UP Keys.LEFT Keys.RIGHT | 矢印のキーを実行する。 |
Keys.ENTER Keys.RETURN | Enter, Returnキーを実行する。 |
Keys.HOME Keys.END | HOME, ENDキーを実行する。 |
Keys.PAGE_DOWN Keys.PAGE_UP | ページアップ・ダウンキーを実行する。 |
Keys.F1 Keys.F2 ・・・ Key.F12 | F1〜F12キーを実行する。 |
Keys.TAB | Tabキーを実行する。 |
Pythonを用いたキーボード操作の実現方法は、こちらの記事で詳しく解説しています。
【Python】Selenium×ActionChainsによるキーボード操作|Webブラウザ上の作業自動化
PythonとSeleniumのActionChains関数を用いて「キーボード操作」を実現する方法について解説します。
【参考】Python×Selenium関連記事
当サイトでは、Seleniumに関する記事を多数配信しております。
【参考】Pythonで面倒な作業を自動化!手法一挙公開中!
当サイトでは日々面倒な作業をPythonで自動化する方法を多数配信しております。日々の作業が飛躍的効率化できること間違いなしですので、以下気になった記事があれば併せてご覧ください。
【面倒なタスクをPythonで解決!】作業効率化の人気記事一覧
【参考】Pythonとは?・実現できること
最後に
お問い合わせフォーム
上記課題に向けてご気軽にご相談下さい。
お問い合わせはこちら