Webページで指定したIdの要素有無を確認し処理を分岐する【ExcelVBA × SeleniumBasic】
実際にデータを取得していったページ
基本的には同一の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に入れる