【VBA:Selenium】対象のサイトからhtml情報を参照して、Excelに貼り付けたい

実現したいこと

・VBAのSelenium(Webdriver)を使用し、下記のhtmlから商品情報を抽出~Excelに貼付をしたいです。

発生している問題・エラーメッセージ

・データの抽出は出来ているのですが、欲しい情報の全てではない様子です。
(※試した事に参考のコードを記載致します。)
→・おそらくsize_1~やinventory_1 ~の情報はBLの情報しかないです。
(※htmlのClassコードを見る限り、NVやNVSTも同じものではあるように思えます。)

▼現状のDebug.Print

color_1 = BL
color_2 = NV
color_3 = NVST

size_1 = 5
~~~略~~~
size_10 = 23
~~~略~~~
size_27 =

inventory_1 = 在庫あり
~~~略~~~
inventory_10 = 在庫あり
inventory_11 =
~~~略~~~
inventory_27 =

shipping_1 = 1-2日以内発送予定
~~~略~~~
shipping_10 = 1-2日以内発送予定
shipping_11 =
~~~略~~~
shipping_21 =

▼理想のDebug.Print

BK 5 在庫あり いつでも発送可
BK 7 在庫なし 再入荷リスト
~~~略~~~

NVST 5 残りわずか 1-2日以内発送予定
NVST 7 在庫なし 再入荷リスト
~~~略~~~

⇒▼最終的にはExcel A列にcolor_list の一覧、D列に size_stockの一覧…があれば良いと考えています。

該当のソースコード(試したこと)①

VBA

sub zzz  Dim driver As New Selenium.EdgeDriver  '■対象のサイトを開く~最大化  driver.Get Sheets("02_在庫状況").Range("C" & k) ', 10000 '■04_情報を収集 '▼04_01_色の情報を取得 Dim color Set color = driver.FindElementsByClass("model-color") Dim l_01 For l_01 = 1 To color.count  Debug.Print "color_" & l_01 & " = " & color.Item(l_01).text Next l_01 '▼04_02_サイズの情報を取得 Dim size Set size = driver.FindElementsByClass("item-sku-actions-info-size") Dim l_02 For l_02 = 1 To size.count  Debug.Print "size_" & l_02 & " = " & size.Item(l_02).text Next l_02 '▼04_03_在庫情報を取得 Dim inventory Set inventory = driver.FindElementsByClass("item-sku-actions-info-inventory") Dim l_03 For l_03 = 1 To inventory.count  Debug.Print "inventory_" & l_03 & " = " & inventory.Item(l_03).text Next l_03 '▼04_04_発送情報を取得 Dim shipping Set shipping = driver.FindElementsByClass("item-sku-actions-info-shipping") Dim l_04 For l_04 = 1 To shipping.count  Debug.Print "shipping_" & l_04 & " = " & shipping.Item(l_04).text Next l_04 End Sub

該当のソースコード(試したこと)②

Sub zzz_test() Dim driver As New Selenium.EdgeDriver ' ブラウザを開く driver.Get "https://brandavenue.rakuten.co.jp/item/EW3582/?product_color_cd=13&s-id=brn_search_list" ' 商品情報を格納するための配列 Dim productInfo() As String ReDim productInfo(1 To 27, 1 To 4) ' カラー、サイズ、在庫、発送情報 ' カラー情報を取得 Dim colorElements As Object Set colorElements = driver.FindElementsByClass("model-color") For i = 1 To colorElements.count productInfo(i, 1) = colorElements.Item(i).text Next i ' サイズ情報を取得 Dim sizeElements As Object Set sizeElements = driver.FindElementsByClass("item-sku-actions-info-size") For i = 1 To sizeElements.count productInfo(i, 2) = sizeElements.Item(i).text Next i ' 在庫情報を取得 Dim inventoryElements As Object Set inventoryElements = driver.FindElementsByClass("item-sku-actions-info-inventory") For i = 1 To inventoryElements.count productInfo(i, 3) = inventoryElements.Item(i).text Next i ' 発送情報を取得 Dim shippingElements As Object Set shippingElements = driver.FindElementsByClass("item-sku-actions-info-shipping") For i = 1 To shippingElements.count productInfo(i, 4) = shippingElements.Item(i).text Next i ' Excelに貼り付け Dim ws As Worksheet Set ws = ThisWorkbook.Sheets("Sheet1") For i = 1 To 27 ws.Cells(i, 1).Value = productInfo(i, 1) ws.Cells(i, 2).Value = productInfo(i, 2) ws.Cells(i, 3).Value = productInfo(i, 3) ws.Cells(i, 4).Value = productInfo(i, 4) ' ブラウザを閉じる driver.Quit End sub '▼メモ:出力結果> ' BL 5 在庫あり 1-2日以内発送予定 ' NV 7 在庫あり 1-2日以内発送予定 ' NVST 9 在庫あり 1-2日以内発送予定 ' 11 予約受付中 3月初旬発送予定 ' 13 在庫あり 1-2日以内発送予定 ' 15 在庫あり 1-2日以内発送予定 ' 17 在庫あり 1-2日以内発送予定 ' 19 在庫あり 1-2日以内発送予定 ' 21 残りわずか 1-2日以内発送予定 ' 23 在庫あり 1-2日以内発送予定 ' '▼修正したい欲しい点が2点あります。 ' ' 01_これはBLの情報だけですので、一番右の配列はBLとなっているのが正しいです。 ' 02_NV・NVSTの情報も抽出し、同様の書式でExcelに貼り付けたいです。

コメントを投稿

0 コメント