ExcelVBAとSleniumでブラウザ操作

こんにちは、現役エンジニアのまさです。

  • Excelでブラウザ操作を行いたい
  • Excelでスクレイピングを行いたい

そんな悩みをSeleniumを使って解決していきます。

Excel側の設定やサンプルコードにフォーカスして紹介していくので、

PCへのインストールに関しては別投稿を参考にインストールをお願いします。

Seleniumのインストールがまだの方はこちら

目次

ExcelでSeleniumを使う準備をしよう

STEP
Excelを開く

開発タブが表示されている方はSTEP5まで飛ばしてください

STEP
ファイルをクリック
STEP
オプションをクリック
STEP
「リボンのユーザー設定」から「開発」にチェックを入れ「OKボタン」をクリック
STEP
追加された「開発」タブを選択して、「Visual Basic」をクリック
STEP
表示された画面の「ツール」タブから「参照設定」をクリック
STEP
この画面が表示されたらキーボードの「S」を押下してSで始まるライブラリまでジャンプ
STEP
「Selenium Type Library」にチェックを入れて「OKボタン」をクリック
STEP
準備完了

ブラウザを起動させてみよう

STEP
Visual Basic画面から開いているExcelファイルのThisWorkbookをダブルクリック
STEP
コードを記述します
Sub testSelenium()
    Dim Driver As New Selenium.ChromeDriver

    With Driver
        .Get "https://mokumoku-stack.com/"
        .Wait 5000
        .Close
    End With

End Sub
STEP
カーソルをSub〜End Subに置いた状態で「F5」キーを押下

実行ボタンでも実行できます(

STEP
ブラウザが立ち上がりこのブログのTOPページが表示され、ブラウザが閉じる

Seleniumから立ち上げたブラウザは赤枠のメッセージが表示されています

ブラウザの起動ができました!

ブログ記事タイトルを抽出してみよう

ブラウザが起動するところまでは確認できたので、

どのように情報を抽出してくるのか簡単な例を用いて紹介します。

スクレイピングのやり方も軽く紹介します。

STEP
抽出する情報の所在地を確認します

今回はmainタグ(赤枠)のなかにある各投稿のタイトル(黄枠)を抽出します。

STEP
抽出する情報に確実にたどり着くための方法を考える
まさ

mainで一度範囲を狭めて、クラス名で絞れば指定範囲の各投稿のタイトルを取得できそうですね

STEP
実際にコードに落としていく
Sub testSelenium()
    Dim Driver As New Selenium.ChromeDriver
    Dim Main As Object
    Dim Titles As Object
    Dim title As Object

    With Driver
        .Get "https://mokumoku-stack.com/"
        Set Main = .FindElementByTag("main")
        Set Titles = Main.FindElementsByClass("p-postList__title")
    End With
    
    For Each title In Titles
        Debug.Print title.Text
    Next title
    
    Driver.Close

End Sub
STEP
イミディエイトウィンドウを開いておく

Debug.Printで抽出したタイトル名を確認できるようにしているので、

アウトプット先となるイミディエイト ウィンドウを開いておきます。

STEP
コードを実行して結果を確認(F5押下)
よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次