Excel VBAでブラウザ操作
ExcelVBAを使うといろいろな操作が可能となりますよね。
色付けに整形、貼り付けや計算、並び替え、Excel上でできる操作はすべて自動化できるといっても過言ではありません。
しかしExcel内で完結していませんか?
「SeleniumBasic」というものを使うと、Excelでブラウザを操作することが可能となります。
それによってブラウザを操作して、データを取得したりすることが可能となります。
「SeleniumBasic」の導入方法と操作方法を紹介していこうと思います。
まずはこのサイト(https://florentbr.github.io/SeleniumBasic/)から「SeleniumBasic」をダウンロードします。
中央付近の「Download」の「Release page」からダウンロードページに飛びます。
そして「SeleniumBasic v2.0.9.0」をダウンロードします。
インストーラーを起動すると、以下のような画面が表示されます。
利用規約を読んで「Next」をクリックして進みます。

以下の画面では、一緒にインストールするWebDriverを表示されています。
WebDriverとはユーザーエージェント (Webブラウザ) を外部のソフトウェアから操作するためのものです。
自分が操作したいWebブラウザにチェックが入っていることを確認して進みます(基本的には全部にチェックが入っています)。

次にインストールの確認画面が出ます。
この時に表示されるインストール場所をよく確認しておきましょう。
Webドライバーはブラウザのバージョンアップに合わせて最新版と差し替える必要があるので、このフォルダに入っている古いのと取り換える必要があります。

「Finish」をクリックして終了です。
最新版のChromeドライバに対応させるため、ダウンロードして上書きします。以下のサイトに飛びます(https://sites.google.com/a/chromium.org/chromedriver/)。
自分が見たときは安定板とベータ版の2つが並んでいたので、自分は安定版にしました。

自分に合ったPCのバージョンをダウンロードします(自分はWindows)。

解凍すると chromedriver.exe が1ファイルあります。
このファイルを先ほどインストールして確認した、Selenium Basicをインストールしたフォルダに上書きします。
※隠しファイルになっていて見えないかもしれません。その場合は「表示」タブの「隠しファイル」にチェックを入れると見えるようになります。
このままではコードを書いても高確率で
「実行時エラー’-2146232576(80131700)
オートメーションエラーです。」
と表示されてマクロが実行されません。
SeleniumBasicの実行には.NET Framework 3.5のランタイムが必要なため、ダウンロードしてインストールします(https://www.microsoft.com/ja-jp/download/details.aspx?id=21)。
言語を選択して「ダウンロード」をクリックします。

他にソフトウェアをダウンロードしないか聞かれますが、そのままダウンロードします。

ダウンロードしたアプリケーションを実行するとウィンドウが出てくるので、「この機能をダウンロードしてインストールする」を選択します。
これで必要なファイルがダウンロードされます。
ExcelにSelenium Basicを参照できるように設定します。
Excelを起動し、「Alt」+「F11」でVBE(Visual Basic Editor)を開きます。
「ツール」→「参照設定」に進んで、「Selenium Type Library」を選択し「OK」を選択します。

基本構文としては、
driver.Get(“http://xxxxxx”)
でwebページを開いてやりたい操作をしたのち、
で開いたwebページを閉じます。
Seleniumの操作では、
- 操作したい要素の情報はデベロッパーツールを起動して確認すること
- 要素のidやclassが取りにくい(わからない)場合は、XPathを利用すること
の2つがポイントになります。(参考サイトhttps://shigetin.com/20181220/246#toc5)
サンプルとして、Amazonで「燻製」というキーワードで、カテゴリー「本」を検索し、新しい順に並べて上から3つの商品の情報を取得するコードを書いてみます。
まず、Amazonのトップページを開きます。
F12を押してデベロッパーツールを開き、左上の要素を選択するモードになるアイコンをクリックします。
検索ウィンドウをクリックすると、その部分のHTMLが分かるので読むと、idが「twotabsearchtextbox」という名前だとわかります。
なのでidとFindElementByIdメソッドで要素を取得し、SendKeysメソッドをつかって値(この場合は燻製)を設定します。
検索ボタンのXPathを調べて、Clickメソッドでクリックして検索を開始します。
先ほどのように要素のHTMLを探し出し、右クリック→Copy→Copy XPathでコピーできます。
ちなみにコピー時のXPathは「”nav-search”」でしたが、エラーが出たので「’nav-search’」に直しました。
本のみに絞り込むため、カテゴリーから本を選択してクリックします。
そしてほしい情報のIDやXPathなどを指定して取り出します。
以下がサンプルコードと実行結果です。
