logo-idv ico_pp

非エンジニアにこそ伝えたいSeleniumBasic

エンジニア

title_selenium

はじめに

こんにちは。30歳を目前にライターからエンジニアへの転職を果たしたS山です。昨年、初めて参加したプロジェクトでSeleniumに触れる機会があったので、最近は面倒なブラウザ作業を片っ端から自動化したい衝動に駆られています。
そんな折に、営業さんから「Webサイト上のデータを集計してExcelに出力して欲しい」という相談を受けました。そこで今回は、Excel(VBA)でブラウザ操作を自動化する「SeleniumBasic」を使い、先のご要望にお応えしてみようと思います。

インストール

まずはこちらのサイトからSeleniumBasicを入手します。ページ中段のDownloadからRelease pageに移動後、SeleniumBasic-2.0.9.0.exe をダウンロードして下さい。
https://florentbr.github.io/SeleniumBasic/
※現在はWindowsのみの対応となっているようです
ダウンロードしたインストーラーを起動すると、次のような画面が表示されます。利用規約などを確認のうえ、「Next」を押して進んで下さい。
photo_01
photo_02
photo_03

この画面では、一緒にインストールするWebDriverを選択できます。WebDriverとはユーザーエージェント (Webブラウザ) を外部のソフトウェアから操作するためのものです。今回はMicrosoft Edgeを利用しますが、基本的にすべてのWebDriverを選択した状態で進めば良いかと思います。

photo_04

この画面で「Install」をクリックするとインストールが始まるのですが、ここに表示されるフォルダの場所はしっかり確認しておいて下さい。WebDriverはブラウザのバージョンアップに合わせて最新版と差し替える必要があるので、その都度こちらのフォルダに格納する必要があります。
インストールが完了すると最後にFirefoxのアドオンをインストールするか聞かれるので、チェックを外して「Finish」をクリックすれば完了です。
※上記のアドオンは最新版のFirefoxでは利用できないため、今回はインストールしませんでした。
※Microsoft Edgeを利用する場合は、上記の作業に加えて最新のWebDriverを用意する必要があります。下記のサイトからダウンロードして下さい(「スタート」→「設定」→「バージョン情報」→「Windowsの仕様」から、「OSビルド」と一致するものを取得します)。
https://developer.microsoft.com/en-us/microsoft-edge/tools/webdriver/
ダウンロードした後は、先ほどSeleniumBasicをインストールしたフォルダに「edgedriver.exe」とリネームして格納します。すでに「edgedriver.exe」が存在する場合は上書きしてしまって構いません。

セッティング

まずはExcelを起動し、「Alt」+「F11」でVBE(Visual Basic Editor)を開きます。「ツール」→「参照設定」に進むと参照可能なライブラリの一覧が表示されるので、ここから「Selenium Type Library」を選択し、「OK」をクリックして下さい。
photo_05

動作確認

ここからは実際にコードを書いて、Webスクレイピングを体験してみたいと思います。データ抽出対象は、短期バイト・単発アルバイト・日払いの求人情報が集まる「ショットワークス」です。決して自社サービスの宣伝というわけではありません。決して。
http://shotworks.jp/
ExcelからVBEを開いた状態で、まずは下記のコードを記述します。

photo_06

ここではWebDriverにEdgeDriverを指定し、ショットワークスのサイトにアクセスして、画面表示を最大化しています。この状態で「F5」キーを押下するとマクロの選択画面が表示されるので、「実行」をクリックしてみて下さい。Microsoft Edgeが起動し、ショットワークスのトップページが表示されれば成功です!
※EdgeDriverが実行できなかった場合は、IEDriverに変更してみて下さい。

サンプルコード

画面は表示できたので、今度は検索条件を指定し、絞り込んだ求人情報の中から「給与」のデータをExcelに出力していきます。サンプルの検索条件は下記のとおりです。

■勤務開始日:今日
■フリーワード:現金
■こだわり条件:新着・日払い

まずは先ほど開いたトップページから、「勤務開始日」が「今日」のアルバイトに絞り込んでみたいと思います。コードを記述する前に、実際のブラウザからページを確認してみましょう。Microsoft EdgeはSeleniumBasicで使用するので、GoogleChromeからショットワークスにアクセスしてみます。

photo_07
「勤務開始日から探す」の「今日」をクリックすると検索画面に遷移するので、まずはこの処理を追記してみましょう。GoogleChromeを開いた状態で「F12」を押すとデベロッパーツールが開くので、左上の矢印ボタンを押すか、「Ctrl」+「Shift」+「C」を押してから「今日」をクリックしてみます。

photo_08

今日と書かれた行が選択状態になりました。この行の上で右クリックすると、要素に対する操作が可能になります。今回はボタンをクリックする処理を記述したいので、「Copy」→「Copy selector」を選択して下さい。

クリップボードにボタンの位置を示すselectorが保存されます。再びVBEに戻り、selectorで指定したボタンをクリックする処理を追記しましょう。

 

「F5」から実行すると、「今日」のボタンを押して検索画面に遷移することが確認できるはずです。同じ要領で、「こだわり条件」の「新着」チェックボックスをクリックする操作も記述しましょう。「フリーワード」は任意の文字列を入力する必要があるため、要素を指定した後にdriver.SendKeys()を利用して「現金」と入力します。ここまで出来たら、最後に「検索する」ボタンをクリックする処理を記述して下さい。
※「検索する」ボタンのクリックが早過ぎると正常に検索できない恐れがあるので、今回は簡易的にWaitメソッドで5秒待ってからクリックしています。

最後に、検索結果の各ボックスから「給与」のテキストを抽出してExcelに出力しましょう。今回のように検索結果が変動するデータを扱う場合は、少し工夫が必要になります。まずは検索結果のボックスの要素から確認してみましょう。
それぞれのボックスにはworkinfo_wrapperというクラスが割り当てられており、「給与」のテキストはその中に含まれていることが分かりました。つまり、workinfo_wrapperの合計を取得して、その回数分だけ「給与」の取得を繰り返せば、検索結果に応じたデータを得られるということになります。繰り返しの処理を行う場合はFor文を使いましょう。

これで一通りの処理は完了です。ExcelでSheet1をご確認頂くと、目的の「給与」が入力されているかと思います。もしも正常に入力されていなかったら、高確率で私のミスです。ごめんなさい。
後半はかなり駆け足の解説になってしまいましたが、大まかな流れは掴んで頂けたのではないでしょうか。VBAやHTMLに関する知識が多少必要になりますが、定期的にWeb上のデータを取得・集計する際は非常に役立ちますので、ぜひご活用頂ければと思います。

執筆者プロフィール

ゲームと小説とシュークリームをこよなく愛する30歳。最近はUnityでゲームを開発することに夢中のご様子。個人で運営しているブログのアクセスが全く伸びず、頭を抱えている。