以下のコマンドラインを使用して単純な Web フォームを照会し、後続のフォーム POST を作成するために必要なすべての入力フィールドを特定した場合。ただし、以下のコマンドでは識別されない 2 つの入力フィールドを持つ比較的単純な Web フォームに遭遇しました。
Invoke-WebRequest 'http://URI.com/index.aspx' -WebSession $Save |
select -ExpandProperty inputfields | select name, value
. .
以下の HTML ソースの例では、上記のコマンドは「入力名」(下の html に表示)を持つすべてのものを識別します。ただし、他の入力タイプではありません。「選択」、「テキストエリア」など。以下の HTML ソースの例に示されているすべての入力フィールド タイプを識別できる「その」コマンド ラインを知りたいです。また、Powershell Invoke-WebRequest を介してフォームを POST するために必要なその他の予期しない入力タイプ。
HTML ソース:
..align="right" style="white-space:nowrap;"><input name="MainPage$LastName"..
..align="right" style="white-space:nowrap;"><input name="MainPage$email"..
..align="right" style="white-space:nowrap;"><input name="MainPage$phone"..
..align="right" style="white-space:nowrap;"><select name="MainPage$CountryDropDownList"..
..align="right" style="white-space:nowrap;"><input name="MainPage$Description"..
..align="right" style="white-space:nowrap;"><textarea name="MainPage$DescribeHere"..
. .
PS: POST を実行するときに、上記の Invoke-WebRequest コマンドラインで返される名前を使用する必要がありますか?それとも、以下のコマンドラインで返される名前を使用する必要がありますか? として、それらは異なります。
$r.Forms[0] | $form.fields
編集: 上記の Invoke-WebRequest の結果は (以下) です。ご覧のとおり、 * MainPage_CountryDropDownList*と*MainPage_DescribeHere*が以下にありません。
Key Value
--- -----
__VIEWSTATE /wEPDwULLTE5OT
__EVENTVALIDATION /wEWEALtsrvJAgLkmtI29k...
MainPage__FirstName Craig
MainPage__LastName Smith
MainPage__email CraigSMith@gmail.com
MainPage__phone
MainPage__Project
MainPage__Submit Submit
編集: 私はこれまで VIEWSTATE と EVENTVALIDATION を処理したことがありません。Web セッションを最初に開始したときに受け取ったのと同じ VIEWSTATE 値と EVENTVALIDATION 値を単純に POST できることを確認してもらえますか? Web セッションの開始時に変数に簡単に格納できます。したがって、POST に移動したときに値がそのまま維持されることを願っています。
編集:Fiddlerを提案する人向け。私はすでにそのツールを使用して、POST のフィールド名を取得しています。 以下のソリューションのようなコマンドラインを介してこの情報を取得したかったのです(残念ながら、正規表現は正しくありませんが、正規表現をよく知っている人にとっては、私が何をしようとしているのかがわかります:
$r.RawContent| sls -Pattern "(\<(input|select|textarea) name\=[""'])(?:(?=(\\?))\2.)*?\1" -allmatches | %{$_.matches} | %{$_.value}