私はしばらくの間、サイトにログインし、条件を満たしながらファイルをダウンロードしてダウンロードしています。私はPhantomJsで試しましたが、悲惨に失敗しました。Powershellを使用してWebFormにログインします。
私はPowershellのアプローチを試しています。最初のステップをどのように取得して、次のページに行くためにフォームにログインしているかを見てきました。中
私はヒントに従ってきた最後のサイトには、「Webサイトへのログイン」PowerShell Getting Started非常に最後のトピックだった
私がログインしようとしているサイト:ACSMAMGA
それだと、非常に思えます「失敗したログイン」
#Input User and Password - Set UserAgent - Store the WebRequest
$credential = Get-Credential
$uaString = [Microsoft.PowerShell.Commands.PSUserAgent]::FireFox
$webRequest = Invoke-WebRequest -Uri 'http://portal.reti.acsm-agam.it/Portal/Index.aspx?m=200G&area=B2B' -SessionVariable webSession -UserAgent $uaString
#Store the form with id 'form1' into variable - Set fields of the form with the credential inputted before
$loginForm= $webRequest.Forms | Where-Object {$_.Id -eq 'form1'}
$loginForm.Fields.twsTemplate_Content1_twsModule_txtUser = $credential.UserName
$loginForm.Fields.twsTemplate_Content1_twsModule_txtPSW = $credential.GetNetworkCredential().Password
#Set New Request with new data, I change the -uri $loginform.action to the actual site because it actually set it to Index.aspx?m=200G&area=B2B which is just the last part of the actual site "http://portal.reti.acsm-agam.it/Portal/Index.aspx?m=200G&area=B2B" and it will raise an error
$webRequest = Invoke-WebRequest -Uri $loginForm.Action -Method $loginForm.Method -Body $loginForm.Fields -WebSession $webSession -UserAgent $uaString
#Check if login has been successfuf,changed the Where-Object statment to an actual element that can be found in page that get showed after loggin in.
if ($webRequest.Links | Where-Object {$_.id -like ('*' + "twsTemplate_Header1_LogOff1_LnkLOF" + '*')}) {
Write-Host "Login verified!"
} else {
Write-Host 'Login unsuccessful!' -ForegroundColor Red -BackgroundColor DarkBlue
}
Ifステートメントの戻り勿論:簡単なログインフォームは、ので、私はこのようなPowerShellのコードをSETP。
リクエストを送信した後にログインページに何か問題が発生している可能性があります。 私はいくつかの入力フィールドが隠されていると指摘しています(それらはいくつかのトークンであると思われます).3つのjavascriptがバックグラウンドで実行されていますが、それらは何も知らず、関数などのラッパーです。
これを誰かが取り除くことができれば素晴らしいだろう。私はこれらのタイプのサイトへのアクセスを自動化しようとしています。 ありがとうございます
編集:08.06.2017 私はもう少しテストをしています。 ログイン後に次のページに移動するのがブロックされているという問題は、入力フィールドがどのように渡されるかということです。 は実際にusgin:
$loginForm.Fields.twsTemplate_Content1_twsModule_txtUser = $credential.UserName
$loginForm.Fields.twsTemplate_Content1_twsModule_txtPSW = $credential.GetNetworkCredential().Password
いけないの仕事を、代わりに同じ値を渡すことが、のような仕事は
$loginForm.Fields['twsTemplate$Content1$twsModule$txtUser']= $credential.UserName
$loginForm.Fields['twsTemplate$Content1$twsModule$txtPSW'] = $credential.GetNetworkCredential().Password
終ら(代わりに 『_』の 『$』と注意していることを「「を」 既にページに設定されている "twsTemplate_Content1_twsModule_btnLogin Login"を追加する必要がありましたが、それでも "$"で "_"を変換して上記の値を設定する必要があります。
私はこの作品がなぜ得られないのですか?実際に働いた...
編集17.07.2017 私は前に知っていたはずですが、私は仕事ではないので空き時間だけprogramminの対象になります。 postメソッドのような "$"を持つフィールドは、フィールドのname属性を渡す必要があります。私の場合は$を持つものです。
'$ webRequest'の代わりに' $ webResponse'がより良い変数名かもしれません。レスポンスの内容は何ですか? – gms0ulman
変数名についてのアドバイスをありがとう。実際、Webリクエストの内容はログインページと同じです。同様のページにリダイレクトされたようなものはありませんでした。 – Mohican1989