私はInvoke-Webrequestの多くの例を見てきましたが、私はすでに自分でいくつかの成功を収めていましたが、私がログインを自動化しようとしていたサイトは、PowerShell Invoke-Webrequestはサイトと互換性がありませんか?
[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12 # This is required so that HTTPS requests won't fail with Invoke-WebRequest
$r = Invoke-WebRequest -Uri https://order.swisschalet.com -SessionVariable sc
$r.forms[0].fields['form-login-header-email'] = "MyEmail"
$r.forms[0].fields['form-login-header-password'] = 'MyPassword'
$a = Invoke-WebRequest -Uri ("https://order.swisschalet.com" + $r.forms[0].Action) -WebSession $sc -Method POST -Body $r.forms[0]
私はフィドラー4を使って何が起こっているのかを分析しようとしましたが、それだけでさらに混乱しました。私が手作業でウェブサイトに行くと、Fiddlerは元々 'form-login-header-email'と 'form-login-header-password'というフォームに戻って来たものではなく、 'email'と 'password' 。しかし、これらの新しいフィールドを作成してPOSTしようとしても、それはまだ動作しません。 Fiddlerは、ウェブサイトに手動で移動すると、「org.codehaus.groovy.grails.SYNCHRONIZER_TOKEN」と呼ばれる何らかの同期トークンも作成されることを示しています。
$ a.parsedHTML.DocumentElement.InnerTextで私の名前がわかる場所で期待される応答を得ることができないので、Invoke-WebRequestがこのサイトと単に互換性がないかどうか疑問に思っています。代わりに、私はこれを見ると、セッションがすでに切れていることを伝える全ページが戻ってくるだけです。
これもIE Comオブジェクトで試してみましたが、これもうまくいきませんでした。私は何かを見逃しているのですか、それともこのサイトが作られた方法ですか?私は数日間、これと闘っていました(実際には学ぶだけです)。
ありがとうございました!
ありがとうございました!私がこれを考えなかったのは、最初に$ r.form.fieldsを見たときに、「代理人」がすでに「ログイン」に等しく、他のフィールド(id、mode、target)がすでに必要な値も同様です。したがって、私は電子メールとパスワードを投稿するだけです。しかし、あなたが示したように、私はちょうど手動メソッドと同じように、とにかくそれを投稿したはずです。もう一度、ありがとう! – User64738