SeleniumBasic DictionaryClass 辞書型の利用

リファレンス

概要

 SeleniumBasicのディクショナリー用クラス。VBAの連想配列と類似したクラスでKeyやItemの設定がVBAの連想配列と酷似しています。VBAのDictionaryが型混合ができないのに対し、SeleniumBasicのDictionaryは型混合が可能です。状況に応じて上手く使い分けると良いと思います。

オブジェクト設定

・変数宣言

Dim Dic As Dictionary
Dim Dic As New Dictionary

※Driverから独立して使用する場合は、New付が必須

文法

Dic.Add <Key> , <Item>
Dic.[メソッド]

メソッド・プロパティ

メソッド

スクロールできます
Name解説ShortExample
AddDictionaryに新しい値を追加Dic.Add eles(0).Item(i).Text, eles(1).Item(i).Text
ClearDictionaryをクリアDic.Clear
ContainsKeyキーが存在すればTrue,無ければFalseを返す(完全一致検索)Debug.Print Dic.ContainsKey("Smith")
Get指定キーで登録された値を返す。キーが存在しない場合は第二引数を返す。Debug.Print Dic.Get("hoge", "Not Exist")
Set指定されたキーの値を設定。キーが無ければキーを新たに作成。Dic.Set "hoge", "age"
ToExcelExcelへ出力Dic.ToExcel

※Short Exampleは、動作確認ができたコードを記載しています。

プロパティ

スクロールできます
Name解説ShortExample
Countアイテム数を返すDebug.Print Dic.Count
Itemキーに対する値を返すDebug.Print Dic.Item("hoge")
Keysキーを配列で返すKey = Dic.Keys
Valuesアイテムを配列で返すItem = Dic.Values

※Short Exampleは、動作確認ができたコードを記載しています。

Example

Use_DicAdd

Private Sub Use_DicAdd()
    Dim Driver As New ChromeDriver
    Driver.Get "https://the-internet.herokuapp.com/tables"
    Dim eles(1) As WebElements
    Set eles(0) = Driver.FindElementsByCss("#table1 tbody tr td:nth-child(1)")
    Set eles(1) = Driver.FindElementsByCss("#table1 tbody tr td:nth-child(2)")
    
    Dim Dic As New Dictionary  'Newが必須
    Dim i As Integer
    For i = 1 To eles(0).Count
        Dic.Add eles(0).Item(i).Text, eles(1).Item(i).Text  'キーもアイテムもテキストを登録しているため、Driver配下の処理とはならない。
    Next i
            
    Debug.Print Dic.Count
    Debug.Print Dic.Get("Smit", "Not Exist")
    Dic.Set "hoge", "age"
    Debug.Print Dic.Count
    Debug.Print Dic.Get("hoge", "Not Exist")
    Debug.Print Dic.Item("hoge")
    Debug.Print Dic.ContainsKey("Smith")
        
    Dim Key, Item
    Key = Dic.Keys
    Item = Dic.Values
    For i = 0 To Dic.Count - 1
        Debug.Print Key(i) & " : " & Item(i)
    Next i
    
    Dic.ToExcel
    Dic.Clear
    Dic.ToExcel
    Driver.Quit
End Sub

Get_DicObject

Private Sub Get_DicObject()
    Dim Driver As New ChromeDriver
    Driver.Get "https://the-internet.herokuapp.com/tables"
    Dim eles(1) As WebElements
    Set eles(0) = Driver.FindElementsByCss("#table1 tbody tr td:nth-child(1)")
    Set eles(1) = Driver.FindElementsByCss("#table1 tbody tr td:nth-child(2)")
    
    Dim Dic As New Dictionary  'Newが必須
    Dim i As Integer
    For i = 1 To eles(0).Count
        Dic.Add eles(0).Item(i).Text, eles(1).Item(i)  'アイテムはオブジェクト
    Next i
    Dim ele As WebElement
    Set ele = Dic("Smith")
    Debug.Print ele.Text
End Sub

Get_DriverInfo

Private Sub Get_DriverInfo()
    Dim Driver As New ChromeDriver, ele As WebElement
    Driver.Get "https://google.co.jp"
    Dim info As Dictionary
    Set info = Driver.ExecuteScript("return {" & _
    "agent: navigator.userAgent," & _
    "lang: navigator.userLanguage," & _
    "Name: navigator.appCodeName," & _
    "Activation: navigator.userActivation.hasBeenActive," & _
    "driver: navigator.webdriver," & _
    "cookie: document.cookie };")

    Debug.Print info("Activation")
    Debug.Print info("cookie")
    Debug.Print info("driver")
    
    Driver.Quit
End Sub

Get_EleInfo

Private Sub Get_EleInfo()
    Dim Driver As New ChromeDriver, ele As WebElement
    Driver.Get "https://www.pref.kyoto.jp/kenkoshishin/pdfdown.html"
    Set ele = Driver.FindElementByPartialLinkText("飲酒")
    
    Dim info As selenium.Dictionary
    Set info = ele.ExecuteScript("return {" & _
    "link: this.href," & _
    "agent: navigator.userAgent," & _
    "lang: navigator.userLanguage," & _
    "cookie: document.cookie };")
    
    Debug.Print info("link")
    Debug.Print info("agent")
End Sub
よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

VBAを中心とした自動化、効率化の手法を紹介しています。現在は、SeleniumBasicのexamplesを紹介しています。その内、SeleniumBasic以外の手法も掲載したいと思っております。