Webページで指定したIdの要素有無を確認し処理を分岐する【ExcelVBA × SeleniumBasic】

実際にデータを取得していったページ

https://vba.company/data20230215 → テーブルデータがあるページ

https://vba.company/data20230216 → テーブルデータがないページ

https://vba.company/data20230217 → テーブルデータがあるページ

https://vba.company/data20230218 → ページ自体存在しないページ

https://vba.company/data20230219 → テーブルデータがあるページ

基本的には同一のId属性で取得しているテーブルデータが、その日はデータがない、またはその日はページ自体が存在しない場合

FindElementByIdで取得しているとエラーになる為、取得する前にFindElementsByIdメソッドを使用して指定したIdの要素があるかどうかを確認し

FindElementsById("id").Countで数が0でなければ実行する形にしてエラーを回避し、データのある日だけを集める方法

実際に使用したコード-------------------------------------------------

Option Explicit
Public Sub Sample()

'Chromedriverのインスタンス化
Dim driver As New Selenium.ChromeDriver

'日付型の変数を用意
Dim 日付 As Date
日付 = #2/15/2023#

'driverの記述の省略
With driver

Do While 日付 < #2/20/2023#

'指定したページを開く
.Get "https://vba.company/data" & WorksheetFunction.Text(日付, "yyyymmdd")

'もしsampletabledataというidの数が0じゃなければ
If .FindElementsById("sampletabledata").Count <> 0 Then

'末尾にシートを追加する(日付のyyyymmddのシート名)
Worksheets.Add(after:=Worksheets(Worksheets.Count)).Name = WorksheetFunction.Text(日付, "yyyymmdd")

'sampletabledataというIdのテーブルデータをExcelへ転記
.FindElementById("sampletabledata").AsTable.ToExcel ActiveSheet.Range("A1")

End If

'日付を1日追加する
日付 = DateAdd("d", 1, 日付)

Loop

End With

End Sub

-------------------------------------------------実際に使用したコード

GetメソッドでURLを指定してWebページを開く

変数を用意して日付型にし、最初の日付を入れる ※日付の入れ方は注意 日付 = #月/日/年#

ワークシートの関数のTextを使用し、yyyymmdd形式で入れる #2/15/2023# → 20230215

DateAdd関数 単位、加算時間、日時 単位 yyyyで年やmで月、dで日付

AsTable.ToExcelメソッドで指定した要素のテーブルデータをExcelに入れる

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です