前回の値設定をすこし組み替えて、要素をクリックできる関数を作ってみました。
今回のチャーミングポイントは、検索対象のタグにoptionとかaとかdivも追加して、いろんな要素をクリックできるようにしてみたところです。
検索結果がoptionタグだったときは、ClickではなくてSelected=Trueします。(普通にselectにValueセットでもできるんだけども。)
頭の関数「Sub ClickElementIE(ie, keyArgs)」以外は、前回の使い回しです。
'■ 特定キーを含むタグをクリックする。
'■ ie : 取得済みIEオブジェクト
'■ keyArgs : Valueをセットしたい対象タグに含まれるキーワードを配列で指定する。
Sub ClickElementIE(ie, keyArgs)
Dim aryElm, ans, Elm
Set aryElm = CreateObject("System.Collections.ArrayList")
Set aryElm = CollectElementsFromKeywords(ie.document, keyArgs, aryElm)
If aryElm.Count = 0 Then
ans = MsgBox("指定のキーワードではHTML要素を見つけられませんでした。" & vbNewLine & "・キャンセル ⇒ スクリプトを強制終了", vbOKCancel, "vbscript - IE要素検索に失敗")
If ans = vbCancel Then
MsgBox "スクリプトを終了します。", vbInformation, "vbscript - ユーザ介入強制終了"
WScript.Quit
End If
ElseIf aryElm.Count = 1 Then
Select Case LCase(aryElm(0).TagName)
Case "option"
aryElm(0).Selected = True
Case Else
aryElm(0).Click
End Select
Else
ans = MsgBox("指定のキーワードで" & aryElm.Count & "個の要素を見つかりました。" & vbNewLine & "クリック操作は一括ではできません。", vbInformation, "vbscript - IE要素検索で多数Hit")
End If
End Sub
'■ 子フレームも含め、IE内のすべてのDocumentから指定キーワードで要素検索 https://yizm.work/sample_code/vbscript/vbs-ie-setvalue/
Function CollectElementsFromKeywords(doc, keyArgs, aryElm)
Dim url, ifrm, i
Set aryElm = SerchElementsFromKeywords(doc, keyArgs, aryElm)
On Error Resume Next
Set ifrm = doc.frames
For i = 0 To ifrm.Length -1
If Err.Number = 0 Then
Set aryElm = CollectElementsFromKeywords(ifrm(i).document, keyArgs, aryElm)
End If
Next
On Error GoTo 0
Set CollectElementsFromKeywords = aryElm
End Function
'■ 指定キーワードリストが含まれるタグをコレクションに追加して返す。 https://yizm.work/sample_code/vbscript/vbs-ie-setvalue/
Function SerchElementsFromKeywords(doc, keyArgs, aryElm)
Dim Elm, txtTag, keyMatch, Tags
' 入力系のタグを検査
SrchTags = Array("textarea", "input", "select", "button", "option", "a", "div")
For Each SrchTag In SrchTags
For Each Elm In doc.getElementsByTagName(SrchTag)
txtTag = Replace(Elm.OuterHtml, Elm.InnerHtml, "")
' 1つでも含まれないキーワードがあったらFalseにする。
keyMatch = True
For Each Arg In keyArgs
If InStr(txtTag, Arg) = 0 Then
keyMatch = False
End If
Next
If keyMatch Then
aryElm.Add Elm
End If
Next
Next
Set SerchElementsFromKeywords = aryElm
End Function
'■ vbsで指定タイトル・URLの起動中IEのオブジェクトを取得 https://yizm.work/sample_code/vbscript/vbs-getie-object/
Function getObjIE(Key)
Dim KeyWord, ie, Reg
Set ie = Nothing
Set Reg = CreateObject("VBScript.RegExp")
Reg.Pattern = ".*" & Key & ".*"
On Error Resume Next
For Each obj In CreateObject("Shell.Application").Windows
If TypeName(obj.Document) = "HTMLDocument" Then
If Reg.Test(obj.LocationName) Or Reg.Test(obj.LocationURL) Then
Set ie = obj
End If
End If
Next
On Error GoTo 0
Set Reg = Nothing
If ie Is Nothing Then
MsgBox "指定のieが見つかりませんでした。"
Else
Set getObjIE = ie
End If
End Function
前回同様、こんな感じで呼び出せばいい感じにクリックしてくれます。
ClickElementIE ie, Array("button", "reset")
