こんにちは、現役エンジニアのまさです。
- Excelでブラウザ操作を行いたい
- Excelでスクレイピングを行いたい
そんな悩みをSeleniumを使って解決していきます。
Excel側の設定やサンプルコードにフォーカスして紹介していくので、
PCへのインストールに関しては別投稿を参考にインストールをお願いします。
Seleniumをインストールする方法
こんにちは、現役エンジニアのまさです! スクレイピングやウェブのテストを調べていたりすると出てくる「Selenium」。 Pythonの自動化の教科書など呼んだりするとちょ…
目次
ExcelでSeleniumを使う準備をしよう
STEP
Excelを開く
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ページが表示され、ブラウザが閉じる
ブログ記事タイトルを抽出してみよう
ブラウザが起動するところまでは確認できたので、
どのように情報を抽出してくるのか簡単な例を用いて紹介します。
スクレイピングのやり方も軽く紹介します。
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押下)