VBScript による IE への入力
こんにちは。
仕事の自動化にやりがいと達成感を感じるガッくんです。
この記事の目次
目的
Web ページを操作する為に操作したいタグオブジェクトを取得する関数を作成します。
関数
ソースコード
この関数は上位オブジェクト、タグ名、タグに含まれる文字列を引数としてタグオブジェクトを返す関数です。タグが見つからなければ Nothing を返します。『VBS』というフォルダの中に『myFunc』というフォルダを作成していて、自作した関数は全て『myFunc』フォルダに保存します。
getTagByStr-objUpper-TagName-InString.vbs
Function getTagByStr(objUpper, TagName, InString)
'-------------------------------------------------------------------------------------------------------------------
' TagName タグの内、 InString を含むタグを取得
'-------------------------------------------------------------------------------------------------------------------
Set objTags = objUpper.document.getElementsByTagName(TagName)
set LookAtTag = Nothing
for i = 0 To objTags.Length - 1
if Instr(objTags(i).outerHTML, InString) then
Set LookAtTag = objTags(i)
exit for
end if
Next
'-------------------------------------------------------------------------------------------------------------------
' 対象IEオブジェクトがあった場合
'-------------------------------------------------------------------------------------------------------------------
if LookAtTag is Nothing then
Msgbox "対象の " & InString & " を含む <" & TagName & "> タグを見つけることが出来ませんでした。"
end if
Set objTags = Nothing
Set getTagByStr = LookAtTag
End Function
使い方
作成した getTagByStr_objUpper-TagName-InString.vbs ファイルを呼び出して使うプログラムを書きます。このプログラムは『VBS』フォルダの直下に保存します。
main.vbs
'------------------------------------------------------------------------------
' 自作関数のインクルード
'------------------------------------------------------------------------------
call IncludeFunction()
'_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
' IE を開く
'_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
'--- 変数宣言 ---
targetURL = "https://transit.yahoo.co.jp/"
'--- 実行 ---
call newIE(targetURL)
'_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
' IE オブジェクトを取得する
'_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
'--- 変数宣言 ---
targetURL = "https://transit.yahoo.co.jp/"
'--- 実行 ---
Set objIE = getObjectIE(targetURL)
if objIE is nothing then
'--- オブジェクトが無いので強制終了 ---
WScript.Quit
else
'--- 続行 ---
end if
'_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
' 文字列「 sfrom 」が含まれる input タグを取得する
'_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
'--- 変数宣言 ---
TagName = "input"
InString = "sfrom"
'--- 実行 ---
set sfrom = getTagByStr(objIE, TagName, InString)
sfrom.value = "東京"
'_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
' 文字列「 sto 」が含まれる input タグを取得する
'_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
'--- 変数宣言 ---
TagName = "input"
InString = "sto"
'--- 実行 ---
set sto = getTagByStr(objIE, TagName, InString)
sto.value = "品川"
'_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
' 文字列「 searchModuleSubmit 」が含まれる input タグを取得する
'_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
'--- 変数宣言 ---
TagName = "input"
InString = "searchModuleSubmit"
'--- 実行 ---
set Btn = getTagByStr(objIE, TagName, InString)
Btn.Click
'------------------------------------------------------------------------------
' 終了通知
'------------------------------------------------------------------------------
MsgBox wscript.scriptname & " の処理が完了しました。"
'------------------------------------------------------------------------------
' 自作関数をコールするサブルーチン
'------------------------------------------------------------------------------
sub IncludeFunction()
'----------------------------------------------------------------------------
' 自分(=VBSファイル)のディレクトリを取得する
'----------------------------------------------------------------------------
FullPath = wscript.scriptfullname
FileName = wscript.scriptname
pathLen= len(FullPath) - len(FileName)
crrDir = left(FullPath, pathLen)
chiDir = "myFunc"
crrDir = crrDir & chiDir
'----------------------------------------------------------------------------
' ファイルシステムを扱うオブジェクトを作成
'----------------------------------------------------------------------------
Set objFileSys = CreateObject("Scripting.FileSystemObject")
'----------------------------------------------------------------------------
' フォルダのオブジェクトを取得
'----------------------------------------------------------------------------
Set objFolder = objFileSys.GetFolder(crrDir)
'----------------------------------------------------------------------------
' FolderオブジェクトのFilesプロパティからFileオブジェクトを取得
'----------------------------------------------------------------------------
For Each objFile In objFolder.Files
'--------------------------------------------------------------------------
' 自作関数のコール
'--------------------------------------------------------------------------
FuncFile = objFile.Name
if instr(1, FuncFile, ".txt") = 0 then
Set objFile = objFileSys.OpenTextFile(crrDir & "\" & FuncFile)
ExecuteGlobal objFile.ReadAll()
objFile.Close
end if
Next
'----------------------------------------------------------------------------
' メモリ解放
'----------------------------------------------------------------------------
Set objFile = Nothing
Set objFolder = Nothing
Set objFileSys = Nothing
end sub
コメント
これで、 main.vbs を実行すると 東京から品川までの路線検索が出来たんでは無いでしょうか?
IE の オブジェクトから TagName で指定したタグを抽出し、 InString で指定した文字列が含まれているタグのオブジェクトを取得して、操作しています。
タグのオブジェクトが見つからない時は Nothing を返します。
以上