動的に生成されたファイルをサーバーにダウンロードするように自動化しようとしているので、手動で実行する必要がある手順は次のとおりです-
- 資格情報を使用してサイトにログインします - NTLM を使用して認証します。
- ログイン後、ポストメソッドを使用して詳細をフォームに入力し、サーバーにファイルを生成してサーバーに応答を返します。
最初に、VBScript を使用してそれを行うことを考えました。
IE オートメーション オブジェクトを取得する
ユーザーワード/パスワードを送信する sendkeys
ページに移動してファイルをダウンロードします
Sendkeys to switch to save button - しかし、IE が私が決定できない保存場所を私に要求するので、ここで私は動けなくなりました。また、私はそれを開くことを考えましたが、Excelファイルのオートメーションオブジェクトをこの方法で開くことができません:(
結果のExcelwget
ファイルを提供するためのデータと基礎を投稿する必要があるため、機能しません。
したがって、Web で検索した後、MSXML2.xmlhttp
オブジェクトまたは Java ソケットを使用してそれを実行し、get メソッドを使用してページをダウンロードできることがわかりましたが、ページを開くには資格情報を提供する必要があります。
誰でも、ユーザーを認証してファイルをダウンロードする方法を教えてください。
編集:コード
--ページをダウンロード
objmsXML.Open "GET", url, False
objmsXML.setRequestHeader "Content-Type", "application/x-www-form-urlencoded"
objmsXML.setRequestHeader "Referer", url
objmsXML.setRequestHeader "User-Agent", "Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.110 Safari/537.36"
objmsXML.send
-- 詳細を入力してデータを投稿
If objmsXML.Status = 200 Then
'First Response received.
'get all the response headers
responseHeaders = objmsXML.getAllResponseHeaders()
responseBody = objmsXML.responseText
End If
Dim viewState As String
Dim eventTarget, eventArgument, txtProjectID, btnSubmit, grdReportPostDataValue
Dim eventValidation As String
viewState = Split(Split(responseBody, "__VIEWSTATE")(2), """")(2)
viewState = URLEncode(viewState, False)
eventTarget = ""
eventArgument = ""
txtProjectID = projectID
btnSubmit = URLEncode("Submit")
grdReportPostDataValue = ""
eventValidation = Split(Split(responseBody, "__EVENTVALIDATION")(2), """")(2)
eventValidation = URLEncode(eventValidation, False)
objmsXML.Open "POST", url, False
Dim postData
postData = "__EVENTTARGET=" & eventTarget & "&__EVENTARGUMENT=" _
& eventArgument & "&__VIEWSTATE=" & viewState & "&txtProjectID=" _
& txtProjectID & "&btnSubmit=" & btnSubmit & "&grdReportPostDataValue" _
& grdReportPostDataValue & "&__EVENTVALIDATION=" & eventValidation
objmsXML.send postData
しかし問題は、フォーム投稿の結果として 2 ページ目が表示されないことです。これは、セッション Cookie を追跡できないことが原因であると考えられます。助けてください。