定期的にWindowsOSで、ブラウザを立ち上げ、
WEBのアプリケーションを開き、Windowsのあるローカルファイルの
内容を貼り付けるという単純作業をひたすらやることになった。
当然この作業を自動化する。
【作業の流れ】
(1) ブラウザを立ち上げ、アプリケーションを開く
(2) 専用のユーザ名とパスワードを入力してログインする
(3) WEBで必要項目を入力する
① 日時
② とあるチェックボックスを選択
③ ファイルの内容を貼り付け
【自動化するスクリプトに何を選ぶか】
候補は3つ。
(1) JScript
(2) VBScript
(3) PowerShell
(1)と(2)をまとめてWSH(Windows Scripting Host)というらしい。
調べたところ、WSHからPowerShellへ徐々に移行してくるようなことが書いてある。
ならばPowerShellを使うべきだろうか。しかしコードを見る限り直感的に使いたいと思わない。
VBScriptも本能的に触りたくない。
技術的判断ではなく、感覚的な意見で嫌だ嫌だと言っているのは
Windowsというプラットフォームに意欲がそがれてしまうからなのか。
それはさておき、もう少しそれぞれのスクリプトを見ていると
JScriptはJavaScriptにコードが似ていることに気がついた。
JavaScriptの実装になっており、同じランタイムを利用している様子。
言語の設計思想は大きく異なるようだが、まあいいだろう。
少しだけやる気がわく。ということで、本能を頼りに、JScriptを利用することにする。
【コード】
ファイル名は○○.jsでよい。
// 開くファイルの形式
var TRISTATE_TRUE = -1; // Unicode
var TRISTATE_FALSE = 0; // ASCII
var TRISTATE_USEDEFAULT = -2; // システムデフォルト
// ファイルのオープンモード
var FORREADING = 1; // 読み取り専用
var FORWRITING = 2; // 書き込み専用
var FORAPPENDING = 8; // 追加書き込み
// 開くファイル
file="C:/file1.txt" // ファイル
var fs = new ActiveXObject("Scripting.FileSystemObject");
var file = fs.OpenTextFile(file, FORREADING, true, TRISTATE_FALSE);
var ip = file.ReadAll();
file.Close();
// オブジェクトを解放
fs = null;
dd = new Date();
year = dd.getYear();
month = dd.getMonth() + 1;
day = dd.getDate();
hour = dd.getHours();
minute = dd.getMinutes();
time = year + '/' + month + '/' + day + '/' + hour + '/' + minute;
// 変数内を確認したければ
// WScript.Echo(time);
// WScript.Echo(file);
use_ie();
function use_ie()
{
// IEを起動
var ie = WScript.CreateObject("InternetExplorer.Application")
// 以下のリンクにアクセス
ie.Navigate("http://example.com/hoge1.html");
// アプリケーションを表示
ie.Visible = true;
wait(ie);
// ユーザ名とパスワードを入力
if (ie.document.getElementsByName("UserName").length !=0 ) {
ie.document.getElementsByName("UserName")(0).value = "GS07604" ;
ie.document.getElementsByName("Password")(0).value = "terasakiy68";
ie.document.getElementsByName("_DominoForm")(0).submit();
wait(ie);
};
ie.Navigate("http://example.com/hoge2.html");
wait(ie);
// <a href=~>の上から3番目のリンクへ飛ぶ(当然アプリ依存)
ie.Navigate(ie.document.getElementsByTagName("a")(3).href);
wait(ie);
ie.document.getElementsByName("Restriction")(1).checked = true;
ie.document.getElementsByName("Reason")(0).checked = true;
ie.document.getElementsByName("SMTP_Log")(0).value = log;
ie.document.getElementsByName("RestrictionTo")(0).value = ip;
ie.document.getElementsByName("StartTime")(0).value = time;
}
// IEがビジー状態の間待つ
function wait( ie )
{
while( ( ie.Busy ) || ( ie.readystate != 4 ) )
{
WScript.Sleep( 100 );
}
WScript.Sleep( 1000 )
}