VBSを使う理由
特にこれという理由はありません。
以前の職場で使っていたのと、調べ物をしているときにIEの自動化の記事を見かけたのでこの言語を選びました。
環境
Windows10
VBSを動かすための環境構築などはしてないので、最初から使えるのかもしれません。
実現したかったこと
- 勤務先のポータルサイトから開けるメールのページ(Outlook)へアクセスすること
やったこと
主に以下の3つ。
- IEを開いて目的のページへ飛んだりするページ遷移
- ログインが必要な箇所でのフォーム入力
- フォーム入力後のログインボタンのクリック
ソースコード
ページ遷移
※コードの全部は最後のリンクから飛んだ先に置いてるので、ここでは少し省略してます。
automate.vbs
Dim objIE
'オブジェクトの作成
Set objIE = CreateObject("InternetExplorer.Application")
'IEを表示させる。Trueで表示
objIE.Visible = True
'指定したURLを開く
objIE.Navigate2 "ポータルサイトのURL"
'ページが読み込まれるまで待つ
Do While objIE.Busy = True Or objIE.readyState <> 4
WScript.Sleep 100
Loop
フォーム入力
automate.vbs
'IDとパスワードを入力する
With objIE.document
.getElementsByName("loginName")(0).Value = "ログインID"
.getElementsByName("password")(0).Value = "パスワード"
End With
Dim objbutton
'button要素をコレクションとして取得
Set objbutton = objIE.document.getElementById("btn_login")
objbutton.click
JavaScriptを書いているのと同じ感じで書けます。
With objIE.document
のところは、下のようにも書けます。
tmp.vbs
objIE.document.getElementsByName("loginName")(0).Value
objIE.document.getElementsByName("password")(0).Value
今回はinput
要素のname
に対してvalue
を設定していますが、
IDがあればそれを使ったほうが自分にとっては楽です。
ボタンのクリック
automate.vbs
Dim objbutton
'button要素をコレクションとして取得
Set objbutton = objIE.document.getElementById("btn_login")
objbutton.click
上記の処理を何度か繰り返して、目的のページにたどりつくといった感じです。
これだけだとあまり恩恵は感じられませんが。。。
デバッグ用コード
変数の中身などを確認する際に使いました。
ログファイルに値を出力します。
automate.vbs
Sub logging(str)
Dim fso, fi
Set fso = CreateObject("Scripting.FileSystemObject")
'ファイルを開く
'もしも存在しない場合には作成する
Set fi = fso.OpenTextFile("ログファイル名", 8, true)
fi.WriteLine (Date() & " " & Time() & ": " & str) 'ログを書き込む
Set fi = Nothing
End Sub
ソースコードはこちら
上に書いてあるのを全部くっつけただけのやつです。
https://gist.github.com/itsumoonazicode/6677df4c4286c5637162421bda14d314