【Python】Seleniumとは?

Seleniumについての解説ページアイキャッチ

このページにはプロモーションが含まれています

このページでは、Selenium について紹介を行なっていきます。

基本的には、このページでは Selenium がどんなものであるのか?という観点での説明を行なっていきます。特に、Python の Reqeusts というライブラリと比較しながら説明を行なっていきます。SeleniumReqeusts も同じ目的で利用することがありますが、両者には決定的な違いがあります。その違いを考えながら、Selenium の特徴を説明していきたいと思います。

Selenium の「使い方」については下記ページで解説していますので、使い方を知りたいという方は下記ページを参照していただければと思います。

PythonでのSeleniumの使い方の解説ページアイキャッチ 【Python】Seleniumの使い方【ウェブブラウザ操作の自動化】

また、このページでは「Selenium とは何なのか?」という観点に対して一般的な説明を行なっていくため、ところどころ Python 特有の話はあるものの、他のプログラミング言語を利用している方にも理解していただける内容になっています。ですので、他のプログラミング言語利用者の方も、是非この後の解説を読み進めていただければと思います!

Selenium とは

では、早速 Selenium について説明していきます。

Selenium とは、ウェブブラウザ操作の自動化フレームワークの1つとなります。

まずは下のアニメを見てみてください。これは、私が手動で行なったウェブブラウザ操作ではなく、Selenium を利用した Python によって実行されたウェブブラウザ操作になります。Selenium を利用した場合、こんな感じでウェブブラウザ操作を自動化することができます。

Seleniumからのウェブブラウザの操作を示すアニメ

そして、ウェブブラウザ操作を自動化することで、ウェブスクレイピングやウェブアプリの動作確認等を自動化することも可能となります。

Python には、こういった「操作を自動化するライブラリ」の1つに PyAutoGUI が存在します。下記ページでも詳細を解説していますが、PyAutoGUI ではクリック操作やマウス操作を自動化することができ、それによりパソコン上での操作全般を自動化することができます。 

PyAutoGUIの解説ページアイキャッチ 【Python】PyAutoGUIで作業の自動化・業務の効率化【RPA】

Selenium に比べて汎用性は PyAutoGUI の方が高いですが、ウェブブラウザ操作に特化している分、Selenium の方がウェブブラウザ操作の自動化には向いており、簡単かつ楽に自動化することができます。また、HTML の取得などもできるため、Selenium はウェブブラウザ操作だけでなくウェブスクレイピングに利用することも可能です。

Selenium の公式ページにも下記のように記載されており、何を自動化するかはあなた次第になります。ただ、Selenium でどんなことができるかを知らないと自動化のアイデアも出てこないと思いますので、このページで Selenium がどんなものであるか?そして、どんなことが出来るのか?について理解していっていただければと思います。

Selenium はブラウザを自動化します。それでおしまい!
その力を使って何をするかは完全にあなた次第です。

主に、テスト目的で Web アプリケーションを自動化するためのものですが、それだけに限定されるわけではありません。

退屈な Web ベースの管理タスクも自動化できます (またそうすべきです)。

引用元:Selenium 公式

Selenium の特徴

前述の通り、Selenium はウェブブラウザ操作の自動化フレームワークになります。Selenium を利用することでウェブブラウザに対して様々な操作を行うことが可能となり、それによってウェブスクレイピングやウェブアプリの動作確認を行うことができます。

seleniumの説明図

ただし、ウェブスクレイピングやウェブアプリの動作確認を実現可能なライブラリやフレームワークは Selenium 以外にもたくさん存在します。例えば Python であれば、これらを行うために Requestshttp.client などが利用されることもあります。

ですが、これらのライブラリと Selenium とでは、ウェブスクレイピングやウェブアプリの動作確認を実現する方法が全く異なります。

ここからは、比較対象として Requests を取り上げ、Requests と比較しながら Selenium の特徴を説明していきたいと思います。

スポンサーリンク

“ウェブブラウザの操作” の実行が可能

前述でも述べたとおり、Selenium では “ウェブブラウザの操作” を実行することが可能です。この点が Selenium の最大の長所・特徴となります。そして、これにより、ウェブアプリの動作確認などを人間が手作業で行うのではなく、Python に実行させることが可能となります。

人間が行っていた操作をSeleniumが行う様子

また、前述の通り、ウェブスクレイピングやウェブアプリの動作確認には Requests ライブラリが使用されることもあります。ですが、RequestsSelenium とでは、これらの実現手段が全く異なります。

Selenium ではウェブブラウザの操作を実行することによって、ウェブスクレイピングやウェブアプリの自動テストを実現するのに対し、上記で挙げたようなライブラリではデータの通信を実行することによって、これらを実現することになります。

SeleniumとRequestsの違いを示す図

そして、この2つの違いが、他のライブラリに比べた Selenium の詳細な特徴となります。

ウェブブラウザの操作とデータ通信の違い

ということで、次は「ウェブブラウザの操作」と「データの通信」の2つの違いや関連性について解説していきたいと思います。この2つを理解しておくことで、Selenium と他のライブラリの使い分けを正しく行うことができるようになります。

まず、多くのウェブアプリやウェブサイトでは、ウェブブラウザから「ボタンをクリック」してデータの登録を行なったり「リンクをクリック」して他のページに移動したりすることが可能です。これらが実現できるのでは、これらの操作が行われた際にウェブブラウザからサーバーに対してデータの通信が行われるからになります。

ウェブブラウザからサーバーに対してデータの通信が行われる様子

例えば、フォームの各種フィールドにデータを入力して送信ボタンを押した場合、各種フィールドに入力されたデータがサーバーに送信されることになります。そして、そのフォームの種類に応じた処理がサーバー側で実行されることになります。

分かりやすいのが「ユーザー登録フォーム」です。ユーザー登録フォームで送信ボタンを押せば、各種フィールドに入力されたデータがサーバーに送信され、そのデータがデータベース等に保存されることで、ユーザー登録が実現されることになります。

ウェブブラウザの操作によってデータが送信される様子

つまり、ウェブブラウザでの操作の多くは、データの通信を行うことを目的に実施されるものが多いです。で、この場合、ユーザーの目的を達成するために必要なのは、ウェブブラウザで操作を行うことではなくデータの通信を行うこととなります。

極端な例で言えば、前述のユーザー登録フォームにおいて、送信ボタンを押してもデータの通信が行われなければサーバーはデータを受け取ることができず、ユーザー登録も行えないことになります。

ウェブブラウザの操作を行なっても通信が開始されない様子

逆に、送信ボタンを押さなくても、必要なデータさえウェブサーバーに送信できれば、ウェブサーバーは受け取ったデータに応じたユーザー登録を行ってくれることになります。

そして、このデータの通信は前述で紹介した Requests 等の多くのライブラリで実現することができます。やろうと思えばソケット通信さえできれば、上記のようなデータの通信は実現できます。

Requestsから直接サーバーに対してデータを送信してユーザー登録する様子

つまり、ウェブブラウザを操作しなくても、データの通信さえ行えば、上記で例として挙げたユーザー登録も実現できるということになります。

ここではウェブアプリのボタンを押した際の動作について説明しましたが、単にウェブページを表示する場合でも同様で、ウェブブラウザの操作でウェブページを表示する際には、リンクをクリックしたり、URL バーに URL を指定する操作を行うことになります。

この場合も結局は、URL に対応するページを表示したいというリクエストをウェブサーバーに送信していることになります。そして、そのレスポンスとして HTML を受け取り、それをウェブブラウザがページとして描画することで、ユーザーは要求したページを表示することができることになります。

ページの表示をウェブブラウザの操作によって行う様子

ただ、基本的にはリクエストをウェブサーバーに正しく送信さえすればウェブサーバーがレスポンスとして HTML を送信してきてくれるはずなので、これもウェブブラウザの操作ではなく、データの通信処理によっても実現可能です。

HTMLの取得をRequestsによって行う様子

そして、この送信されてくる HTML を解析することがウェブスクレイピングとなります。つまり、データの通信によって、ウェブスクレイピングを実現することが可能です。

このように、ウェブブラウザでの操作で実現できることの多くは、データの通信をサーバーと直接行うことでも実現することができます。

要は、Python スクリプトからウェブブラウザの操作を介してデータの通信を行うか、Python スクリプトから直接サーバーとデータの通信を行うかの違いしかありません。そして、前者を行うのが Selenium であり、後者を行うのが、例えば Requests であったりします。

SeleniumとRequestsの違いを示す図

ここまでの説明を聞くと「じゃあ Selenium をわざわざ使う必要ないじゃん」と感じる人も多いかもしれません。これはまさにその通りで、Requests でも頑張ればウェブブラウザ操作時と同様の結果を取得し、それを使ってウェブスクレイピングをしたり、ウェブアプリの動作確認等も行うことができます。

ただ、Selenium を使う方がこれらを実現するのが楽&簡単です。その理由は下記の3つになると思います。次は、これらの理由について解説していきたいと思います。

  • 高度な知識や技術が不要
  • ウェブブラウザの機能が利用可能
  • 直感的な実装が可能

高度な知識や技術が不要

Selenium を利用することで得られるメリットの1つは、高度な知識や技術なしにウェブスクレイピングやウェブアプリの動作確認を実現できる点にあります。

送信するデータに関する知識は不要

例えば、先ほど説明した「送信ボタン」の例で考えれば、ウェブブラウザは送信ボタンがクリックされた際にサーバーに対してデータの送信を行なってくれます。

この際には、送信するデータはウェブブラウザが自動的に生成し、そのデータをサーバーに送信してくれます。したがって、ユーザーはサーバーに送信するデータの中身をほとんど意識する必要はありません。”ほとんど” と限定詞をつけたのは、送信ボタンをクリックする際に、送信したい情報はユーザーが予めフィールドに入力しておく必要があるからになります。

ですが、それさえ行えば、送信されるデータの中身をユーザーは意識する必要がありません。送信が必要な情報をウェブブラウザが集め、その情報から適切な形式のデータをウェブブラウザが作成してくれます。

もちろん、Selenium を利用する場合も、ウェブブラウザを操作して操作ボタンを押すことになるため、サーバーに送信するデータの中身を意識する必要はありません。したがって、Selenium を利用すれば、サーバーに送信するデータの形式や必要な情報の知識は不要となります。

プログラマーがボタンのクリックを行う処理のみを実装すればサーバーに適切なデータが送信されることを示す図

それに対し、ウェブブラウザを利用せずに Requests 等のライブラリでデータの送信を行う場合、その送信するデータはプログラマーが明示的に生成する必要があります。したがって、この場合、サーバーに送信するデータの形式や必要な情報の知識が必要となります。

プログラマーが送信するデータの生成処理も実装しないとサーバーに適切なデータが送信されないことを示す図

単純に、送信ボタンが押された際に各種フィールドに入力された情報を送信するだけであればそれほど難しくはありませんが、ウェブアプリやウェブサイトの多くでは認証機能を搭載していたりセキュリティ対策が施されたりしていますので、これらを潜り抜けるための情報も一緒に送信する必要があります。そのため、認証やセキュリティ対策に関する知識や技術が必要となります。

例えば、Django で開発したウェブアプリでは自然と CSRF 対策が行われるようになり、フォームからデータを送信する際には CSRF トークンと呼ばれるデータも一緒に送信する必要があります。こういった知識も必要となりますし、こういった知識を持った上で Python スクリプトを実装する必要が出てきます。

ですが、Selenium を利用する場合、こういった知識は不要です。Seleniumから各種フィールドに対して情報を入力して送信ボタンをクリックさえしてやれば、あとは必要な情報をウェブブラウザが自動的に収集し、収集した情報から適切な形式のデータを生成してサーバーに送信してくれます。

このように、データを送信するだけでも、Selenium を利用するかしないかではプログラマーに必要な知識や労力に大きな差が出ることになります。

ウェブブラウザの機能が利用可能

Selenium を利用するメリットの2つ目はウェブブラウザの機能が利用可能である点になります。

先ほど挙げたデータの送信も同様で、Selenium を利用することでウェブブラウザの持つデータ送信機能が利用できるようになるため、データの送信に関する知識や技術がプログラマーに不要になります。

データの送信だけでなく、他にもウェブブラウザには様々な機能が存在し、それを利用することでウェブスクレイピングやウェブアプリの動作確認で実現可能なことが増えます。

ページの描画が可能

ウェブブラウザの重要な機能の1つとしてページの描画が挙げられます。

ウェブブラウザはユーザーからページ表示の操作(リンクのクリックなど)を受けた場合、ページ表示のリクエストをサーバーに送信し、サーバーから返却される HTML や CSS・JavaScript に基づいてページの描画を行います。そして、ユーザーは描画された結果を閲覧し、表示されている内容を認識することが可能です。

HTML等を受信し、それに基づいてウェブブラウザがページを描画する様子

Selenium を利用する場合、基本的にはウェブブラウザに描画されたページへの操作を行うことになるため、当然ウェブブラウザによって描画されたページを確認することができます。したがって、ウェブアプリの動作確認時に描画後のページの妥当性の確認等も行うことができますし、ウェブアプリの修正前後のページの違いをスクリーンショット等を利用して比較するようなことも行うことができます。

また、ページとして描画することでページ内にボタン等の操作可能な要素も表示されることになるため、Selenium を利用した場合、こういった要素への操作を行うこともでき、これによって、ボタン等の要素を押した時の動作の確認等も行うことができます。

ページの中に描画されたボタンに対してSeleniumからクリックを行う様子

Requests 等のライブラリでも、ページ表示のリクエストをサーバーに送信し、サーバーから返却される HTML や CSS・JavaScript を受信することは可能です。ですが、ページの描画の機能を持っていないため、描画後のページの確認を行いたい場合は、別途ページの描画を行うような実装を行う必要があります。ただ、それにはかなりの労力が必要となるため、ページの描画結果を確認したいのであれば、Selenium を利用する方が楽だと思います。

JavaScript 実行後にウェブスクレイピングが可能

また、ウェブブラウザの重要な機能の1つに JavaScript の実行も挙げられます。ウェブブラウザは、HTML から読み込まれる JavaScript を受信し、その JavaScript を自動的に実行してくれるようになっています。

例えば、ウェブスクレイピングを行う場合にはサーバーから受信した HTML を解析することになります。前述の通り、HTML の受信は Requests からも行うことが可能です。ですが、Requests が行ってくれるのは HTML や JavaScript の受信のみで、JavaScript を実行するような機能は持っていません。

この点が、ウェブスクレイピングを行う上で不便である場合があります。

JavaScript では、HTML に対してデータを埋め込むようなことが可能です。そのため、受信した HTML は、JavaScript の実行によって変更されるようなこともあります。そして、ウェブブラウザに表示されるページは JavaScript 実行後のものとなります。

JavaScriptによってHTMLが変更される様子

ですので、表示されるページに対応した HTML に対して解析を行いたいような場合、JavaScript 実行後の HTML に対して解析を行う必要があることになります。

Requests で HTML の受信は可能ですし、HTML から読み込まれる JavaScript を受信できるように実装すれば JavaScript を受信することも可能です。ですが、JavaScript の実行は Requests からは行うことはできません。そのため、HTML に対して解析を行なったとしても、ページに表示されている内容とは異なる結果が得られる可能性があります。

簡単な例で考えてみましょう!例えば、下記のような HTML について考えてみましょう!ポイントは、最初の h1 の本文部分が空である点になります。

スクリプトを利用するHTML
<h1 id="page-header"></h1>

<script>
    document.getElementById("page-header").innerHTML = "Hello World!";
</script>

この HTML をウェブブラウザに読み込ませれば、下図のようなページが表示されることになります。画面右側には Chrome の検証機能を利用して表示した HTML を示しています。

表示されるページを示す図

ポイントは、先ほど本文部分が空であった h1 タグに Hello World! という文字列が埋め込まれている点になります。この埋め込みを行なっている処理が <script></script> の部分に記述されており、この処理をウェブブラウザが実行することで h1 タグに Hello World! が埋め込まれ、その結果がページとして表示される事になります。

ですが、単に受信した HTML のみを解析すると、<script></script> の部分が実行されていないため、h1 タグの本文部分の取得時に「空の文字列」が取得されることになってしまいます。つまり、JavaScript の実行の有無によって、HTML の解析結果が変わってしまう事になります。ウェブブラウザに表示されているページに対応する HTML の解析を行いたいのであれば、JavaScript 実行後の HTML に対して解析を行う必要があります。

前述の通り、Requests はデータを受信することはできますが、JavaScript を実行する機能は持ちません。そのため、JavaScript 実行後の HTML に対して解析を行いたい場合、別途 JavaScript を実行する手段を導入し、JavaScript 実行後の HTML に対して解析を行うことができるよう工夫する必要があります。

それに対し、Selenium の場合、操作対象のウェブブラウザが HTML から読み込まれる JavaScript を自動的に実行してくれるため、JavaScript 実行後の HTML を描画したページに対して操作を行うことが可能となります。

スポンサーリンク

直感的な実装が可能

また、Selenium を利用するメリットとして直感的な実装が可能という点も挙げられると思います。

操作に対応するメソッドを実行すれば良いだけ

Selenium はウェブブラウザの操作を行うフレームワークですので、Selenium を利用する場合は Python スクリプトに「実行したいウェブブラウザの操作」に対応するメソッドの実行処理を記述していくことになります。

このメソッドは、我々が手動で行うウェブブラウザの操作に対応しているものが多いため、手動で行っていた操作に対応するメソッドの実行処理を実行したい順番で記述していくことになります。要は、いつも行っている操作を思い浮かべながら、それにしたがって直感的に実装していけば良いだけになります。

例えば、下の図のようなログインフォームでログイン操作を行うことを考えてみましょう!ユーザー名には YamadaHanako、パスワードには yh123456 を入力するものとしたいと思います。

ログインフォームの例

手動でログイン操作を行う場合は、下記の3つの操作を行うことになると思います。

  • ユーザー名の入力フィールドに対して YamadaHanako を入力
  • パスワードの入力フィールドに対して yh123456 を入力
  • ログインボタンのクリック

これらの操作を図で表すと下図のようになります。

人間がログインフォームを操作する様子

これらを Selenium を利用する Python スクリプトから実行する場合は、上記の3つの操作に対応するメソッドの実行を行うことになります。ちょっと抽象的な書き方になりますが、下記のような処理を順々に実行することで、上記に対応したログイン操作を実施することができます。send_key がフィールドに対して文字列を入力するメソッドとなり、click がボタン等をクリックするメソッドになります。

  • ユーザー名の入力フィールドに対して send_key('YamadaHanako') を実行
  • パスワードの入力フィードに対して send_key('yh123456') を実行
  • ログインボタンに対して click() を実行

これらの処理の流れを図で表すと下図のようになります。ユーザーからの操作が Selenium のメソッド実行に置き換わっていますが、操作の流れとメソッド実行の流れが同じであることが確認できると思います。

Seleniumがログインフォームを操作する様子

このように、Selenium を利用する場合、いつも自分が行なっている操作を思い浮かべ、その操作に対応するメソッドの呼び出し処理を実装していけば良いことになります。そして、その実装に高度な知識や技術は不要ですので、他のライブラリを使用するよりも簡単にウェブスクレイピングやウェブアプリの動作確認等を実現することが可能となります。

要素の探索 / 取得が必要

ただし、これらの操作を行うためには、事前に操作対象となる要素を探索して取得しておくことが必要となります。Selenium を利用する上では、この要素の探索が一番難しいと思います。逆に、この要素の探索さえ適切に行うことが出来れば、あとは前述のように直感的に実装を行なっていけば良いだけになります。

例えば、人間が手動でボタンをクリックする操作を実現する場合、目でボタンの位置を認識し、そのボタンの位置にマウスカーソル合わせるを合わせることで、クリック対象の要素を特定することになります。そして、マウスのボタンを押してクリックを行えば、ボタンのクリックを実現することになります。

人間がボタンをクリックする際の流れ

このように、人間が手動で操作を行う際にも、事前に操作対象となる要素を特定しておく必要があります。同様に、Selenium を利用する場合も、操作を行う際には事前に操作対象となる要素を探索(特定)しておく必要があります。そして、Selenium の場合は、HTML の構造や HTML のタグの属性を利用して要素を探索することが多いです。

Seleniumがボタンをクリックする際の処理の流れ

例えば、HTML のタグには id 属性を指定することが可能です。この id 属性を利用して、その要素にリンクを設定したりスタイル(見た目)を設定することが可能となります。この id 属性は、基本的には HTML の中に1つしか存在しないことになっているため、この id 属性を利用して要素の探索を行うことができます。

例えば、ボタンの要素のタグに id="send-button" が指定されている場合、下記のように find_element メソッドを利用して、そのボタン要素を探索して取得することが可能です。そして、取得した要素に対して click メソッドを実行させれば、そのボタンをクリックすることができます。

Seleniumでの操作の流れ
# 要素を探索して取得
button = driver.find_element(by=By.ID, value='send-button')

# 要素に対する操作
button.click()

このように、要素を探索して取得し、取得した要素に対してメソッドを実行させて操作を行うという手順が基本的な Selenium を利用したウェブブラウザ操作、特にウェブアプリ等の動作確認を行う操作の流れとなります。

また、上記では id 属性を利用して要素の特定を行っていますが、Selenium には他にも要素を特定する手段がたくさん用意されています。これらに関しては、下記ページの Selenium の使い方の解説ページで紹介していきたいと思います。

PythonでのSeleniumの使い方の解説ページアイキャッチ 【Python】Seleniumの使い方【ウェブブラウザ操作の自動化】

その他の Selenium の特徴

その他にも、Selenium では様々な操作を行うことが可能となっています。この辺りは、特にウェブアプリの動作確認用途として効果のある操作となると思います。

ウェブブラウザ自体への操作

ウェブブラウザには「戻る」ボタンでブラウザバックを行ったり、「更新」ボタンでページを再読み込みしたりすることができますが、こういった操作も Selenium から実行可能です。

また、ウェブブラウザのウィンドウサイズを変更したり、ウェブブラウザのウィンドウサイズを取得するようなことも可能です。このような操作を行うことで、ウィンドウのサイズ変更後に、ページのレイアウトが崩れたりしないかどうか、なども確認することができます。

このあたりの操作に関してはウェブブラウザ操作を行う Selenium 独自のものであり、Requests からは実行不可になります。

スクリーンショットの撮影

また、Selenium にはスクリーンショットの撮影機能もあります。これにより、ウェブブラウザでのページの表示結果等をスクリーンショット画像として記録しておくことができます。

例えば、ウェブアプリを変更する際、変更前のページのスクリーンショット画像を保存しておけば、その画像と変更後のページのスクリーンショットとの比較を行うことで、ウェブアプリの変更によりページの構造や見た目が変化していないかどうかも自動的に確認することができます。

Selenium の使いどころ

続いて、ここまでの説明を踏まえて Selenium の使いどころについて説明していきます。ここでも Reqeusts 等のデータ通信を行うライブラリと対比しながら説明していきたいと思います。

スポンサーリンク

ウェブアプリの動作確認での使いどころ

Selenium の使いどころの1つにウェブアプリの動作確認が挙げられます。

フロントエンドの動作確認

特に Selenium はウェブアプリのフロントエンド側の動作確認に向いているフレームワークであると言えます。

ウェブアプリにおけるフロントエンドとは要は UI のことで、ユーザーが実際に目にしたり、ユーザーが操作を行う部分のことを言います。このフロントエンドは、基本的にはウェブブラウザ上に表示され、ウェブブラウザの操作によってユーザーから指示を受け付けることになります。

フロントエンドの説明図

なので、開発者はフロントエンドの動作確認をウェブブラウザを操作して行うことになるのですが、ここまでの説明からも分かるように、この動作確認は Selenium を利用して実施することが可能です。例えば、Selenium から入力フィールドに文字列を入力したりボタンをクリックしたりして、これらを行った時の動作を確認することができます。

また、Selenium はウェブブラウザ上にページを描画することができるため、フロントエンドの見た目の確認やスクリーンショットでの画像の保存等を行うこともできます。

このようなフロントエンドの動作確認は、まさに Selenium が得意とする Selenium の使いどころになると思います。もちろん、ウェブブラウザさえれば動作確認は可能なのですが、Selenium を利用すれば、動作確認を自動化するようなこともでき、メリットが大きいです。

逆に、基本的に Reqeusts が行えるのはデータ通信のみなので、これらのウェブブラウザに対する操作やページの描画結果の確認等は行うことができません。

バックエンドの動作確認

フロントエンドに対しウェブアプリのバックエンド側(サーバー側)の動作確認も Selenium で実現することも可能です。ただし、バックエンド単体での動作確認に関しては Reqeusts で実施した方が効率的かもしれません。

ウェブアプリでは、フロントエンド側で行った操作に対するデータがバックエンド側に送信され、それを受け取ったバックエンドが、受け取ったデータに対応した動作を行うことになります。そして、その結果に対応するデータをフロントエンドに返却することで、その結果に対応したページがウェブブラウザに描画されることになります。要は、今までの説明における「サーバー」がバックエンドに対応していると考えていただければ良いです。

バックエンドの説明図

つまり、バックエンド側への指示に関しては、フロントエンド側での操作によって実現することもできますし、直接バックエンドにデータを送信することでも実現することができます。そのため、Selenium でフロントエンド側の操作を行うことでバックエンド側の動作確認を行なっても良いですし、Reqeusts で直接バックエンド側にデータを送信してバックエンド側の動作確認を行うこともできます。

バックエンドの動作確認をSeleniumとRequestsから実施する様子

ただ、バックエンドに対する意地悪テストや負荷テストを行う上では Reqeusts の方が向いているかもしれません。Selenium を利用する場合、フロントエンド側の操作によってデータの送信が行われるため、バックエンドに対してはウェブブラウザが作成した適切なデータが送信されることになります。それに対し、Reqeusts の場合は意図的に適切でないデータを作成して送信するようなことも可能なので、意地悪テストはやりやすいと思います。

また、Reqeusts の方が処理が軽いため、大量のデータをバックエンドに送信するような負荷テストもやりやすいと思います。Selenium の弱点の1つは、ウェブブラウザを起動したり操作したりするため、処理が重いことになると思います。

このような理由より、ウェブアプリをトータルのシステムとして動作確認するのであれば Selenium を利用するのでも良いですが、バックエンド単体での動作確認は Reqeusts の方が向いているのかなぁと思います。

ウェブスクレイピングでの使いどころ

続いてウェブスクレイピングでの使いどころについて解説していきます。

このウェブスクレイピングでの Selenium の使いどころを考える上では、そのウェブスクレイピングを行う対象のページが静的なページであるか動的なページであるかが重要なポイントとなります。

この静的なページ or 動的なページの違いは、そのページが JavaScript の実行によって HTML の構造やタグの中身が変わるかどうかによります。JavaScript 実行後にウェブスクレイピングが可能 でも説明した通り、JavaScript が実行されることによって HTML の変更が行われるようなページが存在します。このようなページを、ここでは動的なページと呼んでいます。

動的なページに対するウェブスクレイピング

こういった動的なページに対してウェブスクレイピングを行いたい場合は Selenium を利用する方が良いでしょう。

Selenium を利用すればウェブブラウザが自動的に JavaScript 実行後の HTML を生成してくれるため、JavaScript 実行後の HTML に対して解析を行うことが可能となります。それに対し、Reqeusts の場合は、Reqeusts 自体に JavaScript 実行の機能がないため、基本的には JavaScript 実行後の HTML に対しての解析は不可となります。

静的なページに対するウェブスクレイピング

また、静的なページに対してウェブスクレイピングを行うのであれば、Selenium でも Reqeusts のどちらを利用するのでも良いと思います。処理の軽さに拘りたいのであれば Reqeusts の方が向いていると言えるでしょう。

ただし、特に Reqeusts の場合はデータ通信を行うことに特化しているため、ウェブスクレイピング用の他のライブラリ、例えば Beautiful Soup などと併用してウェブスクレイピングを行うことをオススメします。もちろん、SeleniumBeautiful Soup を併用することも可能なので、HTML の解析を  Beautiful Soup で行うようにしておけば、HTML の取得手段(Selenium or Reqeusts など)に関わらず、HTML の解析処理は共通的に行うことができるようになります。

PyAutoGUI との違い

Selenium は、人間が行なってきたウェブブラウザの操作をプログラムから実行することで RPA を実現するフレームワークであると言えます。

同様に、Python には RPA を実現するライブラリとして PyAutoGUI も存在します。これらの違いについて、最後に解説を行なっておきます。

ここまでの説明を行なってきた通り、Selenium はウェブブラウザの操作に特化したフレームワークとなります。ウェブブラウザ自体を直接操作したり、ウェブブラウザに表示されるボタン等の要素を操作したり、HTML を取得したりするようなことが得意です。

SeleniumとPyAutoGUIの違いを示す図

それに対し、PyAutoGUI の使い道はもっと汎用的で、人間が行うパソコン上の操作(マウス操作やキーボード操作)のほとんどをプログラムから実行可能とするライブラリとなります。ウェブブラウザの操作もマウス操作やキーボード操作によって実現されるのですから、PyAutoGUI の利用によって、ウェブブラウザの操作をプログラムから実現することも可能です。

SeleniumとPyAutoGUIの違いを示す図2

ただし、ウェブブラウザの操作に関しては PyAutoGUI よりも Selenium の方が向いています。Selenium であれば、操作対象となる要素を HTML の特性や構造を利用して特定することができます。例えば、タグに付加された id 属性でクリック対象のボタンなどを特定することができます。また、ブラウザバックなどを行う場合も、単にメソッドを実行するだけで実現可能です。

それに対し、PyAutoGUI の場合は、要素の特定は基本的に画像認識や座標の指定によって行う必要があります。特に画像認識を行うためには、あらかじめ操作対象となる要素の画像を用意しておく必要があって面倒です。また、画像認識の精度によっては、要素の特定に失敗したり、目的の要素とは異なる要素を特定してしまうようなこともあるでしょう。

PyAutoGUIでウェブブラウザ操作を実現する様子

ですが、Selenium であれば、HTML の構造がおかしくなければ、基本的に id 属性等のユニークな識別子によって確実に要素を特定することが可能です。

また、PyAutoGUI の場合は、直接 HTML を取得したり HTML を解析したりするようなことも出来ないため、ウェブスクレイピング等を実現する際にも Selenium の方が向いていると言えます。

ただし、Selenium の場合は、あくまでもウェブブラウザの操作に特化しているため、ウェブブラウザ以外で動作するアプリの操作は Selenium では実現不可です。例えば、デスクトップアプリなどの動作確認に関しては、PyAutoGUI の方が確実に向いていると思います。

要は、自動化したい作業に合わせて使用するライブラリやフレームワークを適切に選択することが重要ということです。これは、今回紹介したウェブブラウザの操作だけでなく、他の作業を自動化する上でも重要なポイントになります。ただ、この選択を適切に行う上では、Python に存在するライブラリ・フレームワークの種類、さらには、これらのライブラリ・フレームワークの特徴の知識が必要となります。

おすすめ書籍(PR)

こういった知識を身につけたいのであれば、個人的には下記の 退屈なことはPythonにやらせよう 第2版 の参考書を読んでみることをオススメします。

この参考書では、このページで紹介した Selenium だけでなく、今回比較対象として取り上げた Requests、さらには前述で少し触れた PyAutoGUI についても解説されています。

また、それだけでなく、ExcelWord電子メール画像等に関する自動化についても解説が行われており、自動化に利用できるライブラリを幅広く知るという意味で非常にオススメな参考書になります。正直、1つ1つのライブラリ・フレームワークに対する解説は薄めです。特に Selenium に関する解説は少ないです…。ですが、それでも Python でどんな作業が自動化できるのかについてを網羅的に学ぶことができるという点でオススメの参考書になります。ライブラリの存在を知っていれば、詳細な情報に関しては後でいくらでもネット上から拾うことができると思います。

序盤では Python の使い方やプログラミングについても解説されていますので、Python に慣れているから Python で作業効自動化・業務効率化を行いたいという人だけでなく、これらに興味がある Python 初心者の方にもオススメの参考書となります。

スポンサーリンク

まとめ

このページでは、Selenium の紹介を行いました!

Selenium はウェブブラウザの操作を Python スクリプトから実行可能とするフレームワークであり、これによりウェブアプリの動作確認やウェブスクレイピング等を実現することが可能となります。また、これらをプログラムから実行させることで、作業や業務の自動化を行うこともできます。

Selenium の特徴はなんと言ってもウェブブラウザの操作をプログラムから実行できる点であり、単にデータの通信を行うライブラリとは一線を画す存在であると言えるでしょう!

Selenium を使うことで、いつもウェブブラウザを操作している時と同様の感覚で直感的に実装を行うことができます。また、ページの描画やページの要素に対する操作も行うことができるため、特にウェブアプリのクライアント側の動作確認に向いていると思います。さらに、操作対象のウェブブラウザが JavaScript を実行してくれるため、JavaScript 実行後の HTML に対して解析を行いたいような場合も Selenium が活躍してくれます。

Selenium の使い方に関しては下記ページで解説していますので、Selenium に興味を持たれた方は下記ページも是非読んでみていただければと思います!

PythonでのSeleniumの使い方の解説ページアイキャッチ 【Python】Seleniumの使い方【ウェブブラウザ操作の自動化】

同じカテゴリのページ一覧を表示