VBA[001]SeleniumBasic Tips
<SeleniumBasic の保存フォルダを開く>
Sub OpenSeleniumFolder() Const LOCAL_APPDATA As Long = 28 With CreateObject("Shell.Application") .Explore .Namespace(LOCAL_APPDATA).self.Path & "\SeleniumBasic" End With End Sub
<プログラム終了後にブラウザを閉じない>
- プロシージャの外部(宣言部)でドライバの変数を宣言する。
Option Explicit Private webDrv As New Selenium.WebDriver '// 宣言部で変数宣言 Sub OpenYahoo() With webDrv .Start "Edge" .Get "https://www.yahoo.co.jp/" End With End Sub
<アラートの[OK]ボタンを押す>
webDrv.SwitchToAlert.accept
<要素の属性の値を取得する>
- コード例:onClick属性の値を取得
val = webDrv.FindElementByName("hoge").Attribute("onClick")
<チェックボックスの on、off を切り替える>
'// 未チェックならチェックする With webDrv.FindElementByName("hoge") If Not .IsSelected Then .Click End With
<ページが読み込まれるまで待つ>
- Selenium側で自動的に待機してくれるが完璧ではない。
- Busyプロパティや、ReadyStateプロパティのようなものはないので、指定した要素が読み込まれるまで一定時間の待機を繰り返す。
- コード例:name属性が "user_id" の要素が読み込まれてない場合は200ミリ秒待つ
Dim n As Long Dim t As Long Do While n < 1 n = webDrv.FindElementsByName("user_id").Count webDrv.Wait 200 '// 無限ループにならないように最大20秒で終了する t = t + 200 If t > 20000 Then MsgBox "ブラウザの応答がありません。" Exit Do End If Loop
<テキストボックスへの入力>
- SendKeysメソッドは追記されるので、一旦テキストボックスをクリアにしてから入力する。
- コード例:
With webDrv.FindElementByName("userName") .Clear .SendKeys "Bill Gates" End With
<JavaScriptを実行する>
- コード例:
Dim jsStr as String jsStr = "setUserId('A0001'), onForcusSubmit('/system/UserChangeAction.action', 'userChange')" webDrv.ExecuteScript jsStr
<画像をクリックする>
- src属性に含まれている画像のファイル名で img要素を特定する。
- コード例:
Dim elm For Each elm In webDrv.FindElementsByTag("img") If InStr(elm.Attribute("src"), "hoge.png") > 0 Then elm.Click Exit For End If Next elm
<操作対象をポップアップウィンドウに切り替える>
webDrv.SwitchToNextWindow
<指定した要素までスクロールする>
- コード例:4番目の aタグまでスクロールする場合
webDrv.FindElementsByTag("a")(3).ScrollIntoView
<Windowのタイトルを取得する>
- コード例:
Dim wTitle as String wTitle = webDrv.Window.Title
<エラーで終了した場合にプロセスが残らないようにする(例外処理)>
Sub Main() On Error Goto label '--- '--- '--- Exit Sub label: webDrv.Quit End Sub