大人の教養サロン

大人の教養サロンのテーマに関する記事や有益情報のまとめをしていきます。

VBAでEdgeを使用する方法 ②コード編

f:id:kyoyo_salon:20210302135413p:plain

はじめに
定義

Dim driver As New Selenium.EdgeDriver
Dim keyword as String, myString as String
Dim elm As Selenium.WebElement (Dim elm As Object でもOK)

URLを指定して開く

driver.Get "https://kyoyo-salon.hatenablog.com/archive"

URLを取得

driver.URL

待機(単位はミリ秒)*1

driver.Wait 100 など

各種エレメントを取得

driver.FindElementByClass(keyword)
driver.FindElementByCss(keyword)
driver.FindElementById(keyword)
driver.FindElementByLinkText(keyword)
driver.FindElementByName(keyword)
driver.FindElementByPartialLinkText(keyword)
driver.FindElementByTag(keyword)
driver.FindElementByXPath(keyword)

Internet Explorer (IE) の操作でIdで取得する場合は、driver.FindElementById(keyword) のようにsなしの単数形で、Id以外で取得する場合は、driver.FindElementsByName(keyword) のように複数形でコレクションとなる。

一方、EdgeDriverの場合はすべてに対して単数形(一つの要素)と複数形(コレクション)がある。つまり次の2つは同じ要素を取得する。

driver.FindElementByName(keyword)
driver.FindElementsByName(keyword)(0)

要素の数を数える

driver.FindElementsByName(keyword).Count *2

以下、driver.FindElementByName(keyword)などの要素を「elm」と記載する。*3

値を入力

elm.Clear *4
elm.SendKeys (myString)

ドロップダウン(プルダウン)メニューの選択

elm.AsSelect.SelectByText keyword
elm.AsSelect.SelectByIndex 2 など

値を取得

文字列 ele.Text

リンク elm.Attribute("href")

ボタンをクリック

elm.click

typeがsubmitの要素では、elm.submitもOK

複数画面の処理

クリックして新しいウインドウが開きそちらを取得したい場合

elm.click
driver.SwitchToNextWindow

元のウィンドウを取得したい場合

driver.SwitchToPreviousWindow

名前で指定して取得したい場合

driver.SwitchToWindowByName(keyword)
driver.SwitchToWindowByTitle(keyword)

ポップアップ(アラート)の処理 *5

driver.SwitchToAlert.Accept *6

f:id:kyoyo_salon:20210302111050p:plain

 

*1:通常ページ遷移が完了するまで待機してくれるがそうでない場合に適宜利用する

*2:配列の開始番号は0ではなく1となる。なおIEではCountではなくLengthである。

*3:Set elm=driver.FindElementByName(keyword) などを想定。

*4:既存の値がある場合は消去してから値を入力する。はじめから空白の場合は不要。

*5:IE自動化のVBAではJavascriptで処理をした。

*6:ほかの選択肢はVBEの候補機能で確認できる