[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 |