| [Home] [Kuri] [Sysad] [Internet?] [Blog] [Java] [Windows] [Download] [Profile] [Flash] [+] |
WSH を使った VBScript なものを作りましたが、
その応用として、某U銀行の預金残高をメールで通知するものや、
イベントログをメールするものを作りました。
メールで流してはよくなさそうなものを扱っている気もしますが、
あくまでも例ということでご容赦ください。
もし実際に試されるときは、リスクを十分承知の上で、ご自分の責任で行ってください。
IE の使い方は こちら、
Outlook の使い方は こちら にあります。
以下のように、サブルーチンにしておきます。
Sub waitPage (objIE)
Do While objIE.busy
Loop
Do While objIE.Document.readyState <> "complete"
Loop
End Sub
Sub getPage (objIE, strURL)
objIE.Navigate(strURL)
Call waitPage(objIE)
End Sub
Sub sendMail (objMail, strTo, strSubj, strBody)
objMail.To = strTo
objMail.Subject = strSubj
objMail.Body = strBody
objMail.Send
End Sub
|
waitPage は、IE がページを取得し終わるまで待つためのものです。
getPage は、指定した URL を IE に取得させるものです。
sendMail は、Outlook にメールを送信させるためのものです。
詳細は割愛します。
ログインするためのフォームは、以下のようになっていました。
<form name="INPUT"> <input type="text" name="tb_no1"> - <input type="text" name="tb_no2"> <input type="password" name="log_pass"> </form> <form name="SEND"> <input type="submit" name="submit" value="ログイン"> </form> |
ログインに必要な ID が tb_no1 と
tb_no2、
パスワードが log_pass です。
ブラウザ上では、ID とパスワードを入力してログインボタンを押せば、
ログインできます。これと同じことをやればいいわけです。
set objIE = WScript.CreateObject("InternetExplorer.Application")
'objIE.Visible = True
Call getPage(objIE, "https://www.u-bank.local/login/index.html")
objIE.Document.INPUT.tb_no1.value = "ひみつ1"
objIE.Document.INPUT.tb_no2.value = "ひみつ2"
objIE.Document.INPUT.log_pass.value = "ひみつ3"
objIE.Document.SEND.submit.Click
Call waitPage(objIE)
|
URL はうそっぱちです。本当の URL は各自でご確認ください。
ひみつ1〜3のところは、本当の値を入れます。
ここでは当然ひみつです。
ID やパスワードとログインボタンが別のフォームになっていてややこしいですが、
(上記では書いていない)JavaScript で書かれた処理は IE がやってくれますので、
気にせずに素直に書きます。
ここまででログイン処理が完了です。
ただし、ここまでを試そうとしても、IE が表示されないので、ちゃんと動いているのか
どうかがわかりません。
コメントされた objIE.Visible = True を有効にすれば、IE が表示されます。
でもって、いま表示されているページに、残高が表示されています。
これをメールします。
Set objApp = CreateObject("Outlook.Application")
Set objMail = objApp.CreateItem(0)
Call sendMail(objMail, "宛先", "[Ub] " & _
Date, objIE.Document.body.innerText)
set objMail = Nothing
set objApp = Nothing
|
宛先 のところに、 宛先となるメールアドレスを入力します。 次の引数はサブジェクトです。 とりあえず "[Ub] 日付" としましたが、気に入らなければお好きなものに変更してください。
某U銀行のログアウトは、2段階になっています。
ログアウトのページに移動して、ログアウトボタンを押さなければいけません。
先ほどの、ログインしたところのページに、ログアウトのリンクがあります。
具体的には、以下のようになっています。
<script language="javascript">
var C_DOC_URL = "https://sso.u-bank.local/logout";
function getDOCURL() {
return C_DOC_URL;
}
document.write('<a href="' + getDOCURL() + '/INYHAOFF.htm">');
</script>
ログアウト</a>
|
すごくまわりくどいですが、getDOCURL() は C_DOC_URL を返すだけなので、
ログアウトのリンクは、
https://sso.u-bank.local/logout/INYHAOFF.htm
です。
ここに移動するのは、こうするだけです。
Call getPage(objIE, "https://sso.u-bank.local/logout/INYHAOFF.htm") |
そして、ログアウトのリンクの先にあるログアウトボタンは、以下の通りです。
<form name="SEND" action="/gogologout"> <input type="submit" value="OK"> </form> |
このボタンを押せば、ログアウト完了です。
objIE.Document.SEND.submit() Call waitPage(objIE) set objIE = Nothing |
以上を連結すると、以下のようになります。
個人情報をもろメールで流すというリスクや、
某U銀行が HTML を変更したらそれにあわせて書き換える必要などありますが、
使い方を間違えなければ、便利なものになる…かもしれません。
そのまま使わずに、いろいろ手を加えて遊んでみてください。
Dim objIE, objMail, objApp
Sub waitPage (objIE)
Do While objIE.busy
Loop
Do While objIE.Document.readyState <> "complete"
Loop
End Sub
Sub getPage (objIE, strURL)
objIE.Navigate(strURL)
Call waitPage(objIE)
End Sub
Sub sendMail (objMail, strTo, strSubj, strBody)
objMail.To = strTo
objMail.Subject = strSubj
objMail.Body = strBody
objMail.Send
End Sub
' Login
set objIE = WScript.CreateObject("InternetExplorer.Application")
'objIE.Visible = True
Call getPage(objIE, "https://www.u-bank.local/login/index.html")
objIE.Document.INPUT.tb_no1.value = "ひみつ1"
objIE.Document.INPUT.tb_no2.value = "ひみつ2"
objIE.Document.INPUT.log_pass.value = "ひみつ3"
objIE.Document.SEND.submit.Click
Call waitPage(objIE)
' Mail
Set objApp = CreateObject("Outlook.Application")
Set objMail = objApp.CreateItem(0)
Call sendMail(objMail, "宛先", "[Ub] " & Date, objIE.Document.body.innerText)
set objMail = Nothing
set objApp = Nothing
' Logout
Call getPage(objIE, "https://sso.u-bank.local/logout/INYHAOFF.htm")
objIE.Document.SEND.submit()
Call waitPage(objIE)
set objIE = Nothing
|
昨日のイベントログを取得して、メールするものを作りました。
WMI のオブジェクトを作成し(といってもよくわかっていません…)、
作成された日時が昨日のログを取得します。
Dim objMail, objApp
Dim nowDate, prevDate
Dim objWMI, colEvents
Dim strBody
nowDate = CDate(Date)
prevDate = DateAdd("d", -1, nowDate)
Set objWMI = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!\\.\root\cimv2")
Set colEvents = objWMI.ExecQuery("Select * from Win32_NTLogEvent " _
+ "Where TimeWritten >= '" & prevDate _
& "' and TimeWritten < '" & nowDate & "'")
For Each objEvent In colEvents
strBody = strBody + _
"File:" & objEvent.LogFile + _
" / Type:" & objEvent.Type + _
" / Category:" & objEvent.Category & vbNewLine + _
"Time: " & objEvent.TimeWritten & vbNewLine + _
"Message: " & objEvent.Message & vbNewLine
Next
Set colEvents = Nothing
Set objWMI = Nothing
|
TimeWritten が昨日以上今日未満のログを取得し、それぞれを文字列にしています。
あとは、変換した文字列をメールするだけです。
Set objApp = CreateObject("Outlook.Application")
Set objMail = objApp.CreateItem(0)
objMail.To = "宛先"
objMail.Subject = "[NTEventLog] : " & Date
objMail.Body = strBody
objMail.Send
Set objMail = Nothing
Set objApp = Nothing
|
こちらは再三出てきてますので、割愛します。
|
|
| [Home] [Kuri] [Sysad] [Internet?] [Blog] [Java] [Windows] [Download] [Profile] [Flash] [-] | |
| usu@usupi.org | Last modified : Tue Jun 15 23:17:05 2004 |