Web操作2(Chrome)


Chromeを使う方法

VBAからInternetExplorer(IE)を操作する方法を既に紹介しましたが、ここでは別のブラウザを使ったWeb操作の方法を見てみましょう。


IEの問題点とほかのブラウザを操作する必要性

現在、数多くのブラウザが存在しますがその中でもIEはもはや特殊なブラウザといってよいでしょう。

Windowsに標準搭載されているMicrosoft製のブラウザということで一時はメジャーなブラウザとなった時代もありましたが、ChromeやFirefoxといった優れたブラウザが現れ、徐々に勢いを失ってきました。

特に大きな問題としてはHTML5で必須の技術となっているjavascriptやCSSの一部に対するIE独自の解釈があり、Webサイトを作成する際にIEとそれ以外のブラウザでは別々の実装をする形(クロスブラウザ対応)で開発コストをかけざるを得ないということがWeb開発者の大きな負担となっていました。

MicrosoftでもWindows10では新しいブラウザであるEdgeを搭載しており、IEの開発は終了しています。

VBAからは引き続きIEを操作することができますが、すでに過去のブラウザであるIEのみに対応するためのコストを切り捨てたWebサイトも増えており、IEではそもそもjavascriptが正常に動作しないためページ自体がまともに表示されない(機能が利用できない)ようなケースも見られまし、Microsoft自身がIEを使い続けないことを推奨しているようです。

結論としてはVBAとIEを操作するだけでは現実的に不可能なことが多いため、VBAを使ってWeb操作をしたい場合IE以外のブラウザを操作する方法を知っておく必要があります。


Chromeを操作するための準備

現在の代表的なブラウザであるGoogle ChromeをVBAから操作するための準備をしていきましょう。

IE以外のブラウザを使ってWeb操作する場合、それぞれのブラウザを扱うためのライブラリを用意する必要があります。

①まず、以下のサイトからSeleniumBasicをダウンロードしてください。

SeleniumBasicのダウンロードページ

SeleniumBasicのダウンロードページ

ダウンロードしたらexeファイルを実行し、SeleniumBasicをインストールします。

②次に、以下のサイトからChromeDriverをダウンロードしてください。

ChromeDriverのダウンロードページ※以下の画像は古いページです。

ChromeDriverのダウンロードページ

ChromeDriverのダウンロードページ(新しいサイト)

この時、自分で使っているGoogle Chromeのバージョンと同じものをダウンロードするようにしてください。

③ダウンロードしたchromedriver.exeを、SeleniumBasicをインストールしたフォルダ内のchromedriver.exeに上書きコピーします。

SeleniumBasicフォルダ

VBEのツール-参照設定からSelenium Type Livraryが設定できるようになっていますので、チェックを入れます。

chromedriverの参照設定

以上で、VBAからChromeを操作する準備は完了です。


Chromeを操作してコンテンツを取得する

上記の準備が済んだらあとはVBAからchromedriverを利用するプログラムを作成して実行することができます。

以下はPublicで宣言したChromeDriverを使ってURLを指定してChromeを起動し、終了させるだけのサンプルコードです。

そのままだと一瞬で終了してしまうので、chrome.Quitの行にブレークポイントを設定するかステップ実行して動作を確認してみてください。

Public chrome As New ChromeDriver 'Crhomeドライバ
Sub chrometest()
    URL = "https://vbasokkou.dokkoisho.com/selenium.html" 'このページのURL
    chrome.Get URL 'urlを指定して初期ページを表示
    chrome.Quit 'chromeを終了する
End Sub

基本的にはIEと同様にchrome.FindElementsByClass()やchrome.FindElementsById()でクラスを指定して要素を取得したり、chrome.FindElementsByXPath()を使ってHTMLの構造から取得したい要素をたどって指定したりすることでwebページへアクセスできます。

具体的にXPathを使って要素を指定する方法についてはWeb操作3(XPath)で説明していますので参考にしてください。

また、iframe(アイフレーム)の取り扱いが容易なのもchromedriverを使うメリットであり、chrome.SwitchToFrame()でiframeのIDを指定してiframe内のHTMLを簡単に取得(移動)し、chrome.SwitchToParentFrameで親フレームに戻ることができます。

特にIE上でしか動作しないような特別なサイトを除き、今後VBAからWeb操作をする必要があれば基本的にchromedriverなどを利用するようにした方がよいでしょう。

なお、SeleniumにはFirefoxやEdgeなど主要なブラウザのドライバーも用意されており、Chrome以外のブラウザも同じように簡単に操作することができます。