77Lifeworkベータ版

77Lifeworkベータ版

IT関係の話(ツール開発・インフラ構築)をメインとして、その他私の趣味や雑記用のブログです。ここに書いた内容が少しでも参考になれば嬉しいです。

【Excel VBA】GoogleChromeを操作してWebページをスクレイピングする方法

はじめに

こんにちは。今回はExcel VBAでブラウザを操作してWebページからの情報取得をする方法について書いていきます。
この記事では、VBAGoogleChromeを操作するための環境準備についてをメインで説明し、最後にサンプルとしてGoogle検索をVBAから実行してみるという流れとなっています。
動作環境はWindows10で、Excelは2019です。

f:id:J-back:20210925004712j:plain

環境設定

Selenium Basicのインストール

まずはSelenium Basicをインストールしていきます。
Seleniumとはブラウザ操作を自動化できるフレームワークで、これをVBAから呼び出すことでブラウザを制御します。
florentbr.github.io


上記のURLを開き、ページ中段ぐらいの「Download」項目の「Release page」をクリックします。
f:id:J-back:20210925000721p:plain:w600


記事執筆時点での最新は SeleniumBasic-2.0.9.0.exe なので、これをクリックしてダウンロードします。
f:id:J-back:20210925000958p:plain:w600


ダウンロードできたら、SeleniumBasic-2.0.9.0.exe を実行し、インストーラを起動します。
「Next」を押下します。
f:id:J-back:20210925001114p:plain:w600


「I accept the agreement」を押下します。
f:id:J-back:20210925001213p:plain:w600


必要なライブラリにチェックを付けて「Next」を押下します。
今回はGoogleChromeを使用するので、「WebDriver for Chrome」が入っていれば大丈夫です。
f:id:J-back:20210925001402p:plain:w600

f:id:J-back:20210925001420p:plain:w600


内容を確認して「Install」を押下します。
f:id:J-back:20210925001450p:plain:w600


「Finish」を押下します。
f:id:J-back:20210925001515p:plain:w600


これでSelenium Basicのインストールは完了です。

ChromeDriverのダウンロード

次はChromeDriverのダウンロードですね。
Selenium Basicをインストールした際にChromeDriverも一緒にダウンロードされているのですが、実際に使用するGoogleChromeのバージョンに合わせたChromeDriverを使用する必要があるため、別途ダウンロードしましょう。


まずは使用するGoogleChromeのバージョンを確認します。
GoogleChromeを起動し、ウィンドウ右上の設定メニューから「ヘルプ」⇒「Google Chromeについて」を開きます。
f:id:J-back:20210925001916p:plain:w600


するとバージョンが表示されるので、これを確認します。
現状私の環境ではバージョン94.0を使用していることが分かります。
f:id:J-back:20210925002017p:plain:w600


では上記で確認したバージョンに合ったChromeDriverをダウンロードしましょう。
以下のURLを開きます。
chromedriver.chromium.org


ページ中段あたりに、バージョンごとにChromeDriverのダウンロードリンクが表示されているので、
今回はGoogleChromeのバージョン94.0に合った、ChromeDriver94.0のリンクをクリックします。
f:id:J-back:20210925002344p:plain:w600


動作させる環境はWindows10なので、Windows用のChromeDriverをダウンロードします。
f:id:J-back:20210925002559p:plain:w600


ダウンロードしたzipファイルを展開すると「chromedriver.exe」というファイルが格納されています。
これを「C:\Users\ユーザ名\AppData\Local\SeleniumBasic」に配置します。
(すでに同名のファイルが存在すると思いますが、上書きしましょう)
f:id:J-back:20210925002849p:plain:w600


これでChromeDriverのダウンロードは完了です。

VBA上でのライブラリ参照設定

最後にVBAからSelenium Basicを使用可能な状態にします。
Excelを起動し、「開発」タブから「Visual Basic」をクリックし、Visual Basic Editor(VBE)を開きます。
f:id:J-back:20210925003152p:plain:w600


VBEの「ツール」タブから「参照設定」を開きます。
f:id:J-back:20210925003241p:plain:w600


参照可能なライブラリ一覧が表示されるので、「Selenium Type Library」にチェックを入れて「OK」をクリックします。
f:id:J-back:20210925003346p:plain:w600


これでライブラリの参照設定は完了です。

ここまででVBAからChromeを操作する準備が整いました!


VBAのサンプルコード

では試しにVBAからGoogleChromeを操作させてみましょう。
Excelファイルを新規作成し、以下のようにセルに値を入れておきます。
f:id:J-back:20210925003625p:plain:w600


そしてVBEを起動し、以下のコードを記述し保存します。
このサンプルコードはExcelのB2セルから取得したURLを開き、
表示された検索窓にC2セルで指定した検索ワードを入力後、検索を実行するというものです。

Option Explicit
 
Sub main()
     
    Dim chromeDriver As New Selenium.chromeDriver
    Dim targetURL As String, searchKeyword As String
     
    Application.DisplayAlerts = False
    Application.ScreenUpdating = True
     
     
' ================== 処理開始 ==================
     
    MsgBox "Start! Please wait...", vbInformation
     
    targetURL = ThisWorkbook.Worksheets("Sheet1").Range("B2")
    searchKeyword = ThisWorkbook.Worksheets("Sheet1").Range("C2")
     
     
    ' chromeを起動し、対象URLにアクセス
    chromeDriver.Get targetURL
     
    chromeDriver.FindElementByCss("body > div.L3eUgb > div.o3j99.ikrT4e.om7nvf > form > div:nth-child(1) > div.A8SBwf > div.RNNXgb > div > div.a4bIc > input").SendKeys searchKeyword
    chromeDriver.FindElementByCss("body > div.L3eUgb > div.o3j99.ikrT4e.om7nvf > form > div:nth-child(1) > div.A8SBwf > div.FPdoLc.lJ9FBc > center > input.gNO89b").Click
    Stop
         
     
    ' chromeの終了
    chromeDriver.Close
    Set chromeDriver = Nothing
         
     
    MsgBox "Complete!", vbInformation
     
 
End Sub

このコードですが、
Dim chromeDriver As New Selenium.chromeDriver
chromeDriver.Get
この部分でGoogleChromeを起動して指定したURLを開く動作をします。


chromeDriver.FindElementByCss(…)
この部分では開いたWebページの要素を指定して、キータイプやクリック操作を実施しています。
要素の指定方法についての詳細は別の記事で書こうと思います。


chromeDriver.Close
Set chromeDriver = Nothing
ここではGoogleChromeを閉じる処理をしています。

基本的にVBAGoogleChromeを操作する場合、上記の流れとなるのでこれを基本形としてほかの処理を実装する感じになります。

おわりに

今回はExcel VBAGoogleChromeを操作する方法について書きました。
次はもっと実用的なスクレイピングをやってみようと思います。
最後まで読んでいただきありがとうございました。