ちまちま。

月曜に終わったと言ってた仕事の件のちょっと仕上げを。
何をするプログラムかと言うと、定期的にローカルにあるCSVファイルをアップロードするだけなんですが、このアップロードが曲者で、httpsである上に、ID/PWを聞いてきたり、セッション管理があったり、どの画面からどういう遷移をしたかとかが『全部』あってないとアップロードできないのですよね。
で、私の取った方法。
WSHを使って、IEをコントロールして、決められた通りの手順で行う。
ファイルのアップロード以外は全部バックグラウンドで出来るんですが、ファイルのアップロードは、お手軽に出来る方法が、

  • IEを前面に持って来る
  • 本当に前面に来るまでちょっとSleep(1000)して待つ
  • ファイルアップロードのファイル名入力テキストボックスにフォーカスを移動
  • 本当にフォーカスが移動するまでちょっとSleep(2000)して待つ
  • WScript.Shellを用いて、キー入力を送りつける
  • formをsubmitする

くらいしか思いつきませんでした。

以下のような感じです。


set ie = CreateObject("InternetExplorer.Application")
set ws = CreateObject("WScript.Shell")
ie.navigate "https://url.of.the.server/login"
Do Until ie.Busy = False
WScript.sleep(200)
Loop
ie.document.form.id.value="id"
ie.document.form.password.value="password"
ie.document.form.submit()
Do Until ie.Busy = False
WScript.sleep(200)
Loop

For i = 0 To ie.Document.links.Length - 1
'CSV入力画面へ遷移するjavascriptの入ったリンクを探す
If ie.Document.links(i).href = "javascript:hogehoge()" Then
ie.Document.links(i).Click 'クリック
Exit For
End If
Next
Do Until ie.Busy = False
WScript.sleep(200)
Loop

ws.AppActivate "ほげほげ" ' IEをアクティブにする
WScript.Sleep(1000)
ie.document.form1.uploadfile.focus();
WScript.Sleep(2000)
ws.SendKeys "c:\items.csv"
ie.document.form1.submit();

誰かの何かの参考になるでしょうかね?