VBScript による IE 入力のタイミング制御
こんにちは。
仕事の自動化にやりがいと達成感を感じるガッくんです。
この記事の目次
目的
乱数で待ち時間を設定して、 VBScript の処理を止める関数を書きます。
関数
ソースコード
この関数は乱数を発生させる範囲を引数で渡して、 VBScript の処理を止める関数です。『VBS』というフォルダの中に『myFunc』というフォルダを作成していて、自作した関数は全て『myFunc』フォルダに保存しています。
Waiting_a-b.vbs
function Waiting(ByVal a, ByVal b)
'-------------------------------------------------------
' a 以上 b 以下の乱数を作成
'-------------------------------------------------------
Lambda = Int(Rnd()*(b-a+1)+a)
'-------------------------------------------------------
' 待ち時間を作成
'-------------------------------------------------------
WaitTime = DateAdd("s", Lambda, Now)
'-------------------------------------------------------
' 待ち
'-------------------------------------------------------
While Now < WaitTime
WScript.Sleep 100
Wend
end function
使い方
作成した Waiting_a-b.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 = "東京"
'_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
' 変数「 a 」~変数「 b 」まででランダムに処理を待つ
'_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
'--- 変数宣言 ---
a = 1
b = 2
'--- 実行 ---
call Waiting(a, b)
'_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
' 文字列「 sto 」が含まれる input タグを取得する
'_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
'--- 変数宣言 ---
TagName = "input"
InString = "sto"
'--- 実行 ---
set sto = getTagByStr(objIE, TagName, InString)
sto.value = "品川"
'_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
' 変数「 a 」~変数「 b 」まででランダムに処理を待つ
'_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
'--- 変数宣言 ---
a = 1
b = 2
'--- 実行 ---
call Waiting(a, b)
'_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
' 文字列「 searchModuleSubmit 」が含まれる input タグを取得する
'_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
'--- 変数宣言 ---
TagName = "input"
InString = "searchModuleSubmit"
'--- 実行 ---
set Btn = getTagByStr(objIE, TagName, InString)
Btn.Click
'_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
' 路線検索結果のため、 IE ビジー状態を待つ
'_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
'--- 実行 ---
call WaitForIE(objIE)
'------------------------------------------------------------------------------
' 終了通知
'------------------------------------------------------------------------------
AutoMsg wscript.scriptname & " の処理が完了しました。", 4
'------------------------------------------------------------------------------
' 自作関数をコールするサブルーチン
'------------------------------------------------------------------------------
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 を操作する間 7 秒〜 13 秒間でランダムに処理を待ちます。
以上