PowerShellを使用して、WebサイトへのログインとPDFファイルのダウンロードを自動化します。インターネットでは、これを行う方法(例:Invoke-WebRequest
、WebClient
、HttpWebRequest
、またはInternetExplorer.Application
を使用)が多数ありますが、ほとんどの場合、最初にログインする必要はありません。いくつかはログイン時に表示されますが、動作させることはできません。私はInternetExplorer.Application
を使用してとの緊密なんだ:PowerShellを使用してWebサイトのログインとファイルダウンロードを自動化する
$username = "xxxxx"
$password = "yyyyy"
$url = "https://example.com/login.aspx"
$usernameElementId = "aaaaa"
$passwordElementId = "bbbbb"
$submitButtonElementId = "ccccc"
$ie = New-Object -com InternetExplorer.Application
$ie.Visible = $true
$ie.Navigate($url)
while($ie.ReadyState -ne 4 -or $ie.Busy) {Start-Sleep -m 100}
$ie.Document.getElementById($usernameControlId).value = $username
$ie.Document.getElementById($passwordControlId).value = $password
$ie.Document.getElementById($submitButtonElementId).click()
while($ie.ReadyState -ne 4 -or $ie.Busy) {Start-Sleep -m 100}
Start-Sleep -m 2000
$url = "https://example.com/statements/201607.pdf"
$outFilePath = "C:\Downloads\Statement_201607.pdf"
$ie.Navigate($url)
while($ie.ReadyState -ne 4 -or $ie.Busy) {Start-Sleep -m 100}
# Script works up to this point--the pdf document is shown in IE.
#The file downloaded in the next step is empty.
$ie.Document.body | Out-File -FilePath $outFilePath
私の質問:どのように私は、スクリプトの最後のステップでダウンロードしたPDF文書を入手できますか?
WebClient
とInvoke-WebRequest
と同じタスクを実行しようとしましたが、認証のためにエラーが発生し続けます。私はログイン後、次のリクエストでそれらを渡すが、何もクッキーをキャプチャしようとしました。他の手段を使ってこれを行う実例があれば、私はすべて耳にします。実際、私の好みは可能ならばIEの自動化を避けることですが、私は実用的な解決策をとるでしょう。
理論的には、 'Invoke-WebRequest -Uri $ pdfuri -Credential $ cred -OutFile $ outpath'と同じくらい簡単ですが、私はこれを常時使用していますが、Webサイトではこのようなログインが許可されていない可能性があります。 –
@ Deadly-Bagel私はそれを見ましたが、 '$ cred'オブジェクトを作成するにはどうすればいいですか?私は外部のウェブサイトにログインしていることに注意してください。これは、AD資格情報を使用したActive Directoryログインまたはリモートサーバーログインではありません。資格情報を取得できるのであれば、 'Invoke-WebRequest'を使ってやりたいと思います。 – neizan
@neizan最初に実行すると、サンプルサイトで動作することをテストできます。変数$ credを設定しないと、資格情報の入力が求められます。これは標準のWindows資格情報のプロンプトですが、ADやWindowsログインに関連しないものについても、同じ方法が頻繁に使用されます。 –