つらつら Excel VBA

私の備忘録です。

ブラウザ操作(Chrome、SeleniumBasic)

GoogleChromeを操作したい。SeleniumBasicが必要とのこと。
事前準備は割愛。
マクロ側からページ内にアクセスする時はロード待ち処理を必ず入れる。
IEで出来てた全選択コピー貼り付けがうまくいかず、、、諦めてデータは直接取得。

Dim driver As Selenium.WebDriver

Sub 一連の流れ()
    
    Set driver = New Selenium.ChromeDriver
    driver.Start "chrome" '"edge"
    
    Dim sURL  As String
    sURL = "URLを入力"
    
    driver.Get sURL
    
    'ページ遷移テスト
    Call ConfirmationByName("名前属性") 'ロード待ち
    driver.FindElementByName("名前属性").Click
    
    '文字の入力
    Call ConfirmationByName("テキストボックス") 'ロード待ち
    driver.FindElementByName("テキストボックス").SendKeys "入力する文字"
    
    'ページ遷移テスト
    driver.Wait 1000 '待機
    driver.FindElementByName("名前属性").Click
    
    
    'ロード待ち
    Call ConfirmationByName("名前属性") 'ロード待ち
    
    
    '----------  データ取得  ----------
    
    Dim wEmt As Selenium.WebElement
    
    Set wEmt = driver.FindElementByClass("クラス属性")
    Debug.Print wEmt.Text
    
    For Each wEmt In driver.FindElementsByClass("複数クラス属性")
        Debug.Print wEmt.Text
    Next
    
    '7番目と8番目のテーブルをエクセルシートに張り付け
    driver.FindElementsByTag("table")(7).AsTable.ToExcel [Sheet1!A1]
    driver.FindElementsByTag("table")(8).AsTable.ToExcel ThisWorkbook.Worksheets("Sheet1").Range("A4")
    
'    Dim arr As Variant
'    arr = driver.FindElementsByTag("table")(8).AsTable.Data
    
    'driver.Close
    'Set driver = Nothing
    
End Sub

'待機処理。指定したName属性のタグが出現するまで待機。
Sub ConfirmationByName(attName As String)
    
    Dim myBy As New By
    Dim cnt As Long: cnt = 0
    
    Do While cnt < 10
        If driver.IsElementPresent(myBy.Name(attName)) Then Exit Do
        driver.Wait 1000
        cnt = cnt + 1
    Loop
    
    If cnt >= 10 Then Debug.Print "タイムアウト( " & attName & " )"
    
End Sub

以上。