Tl: dr: мне нужно иметь возможность отправить форму HTML с помощью PowerShell, когда параметр action
не содержит полного доменного имени.
Я хочу нажать кнопку votea
в следующей форме, используя PowerShell:
<form action="submit.aspx#submittop" method="post" id="submit-control-form" name="form1">
<input type="hidden" name="add_id" value="123456789">
<input type="hidden" name="nextfive" value="<form action="submit.aspx#submittop" method="post" id="submit-control-form" name="form1">
<input type="hidden" name="add_id" value="123456789">
<input type="hidden" name="nextfive" value="123456789,123456789,123456789,123456789,123456789,123456789,70974215,123456789,123456789,123456789,69717999,123456789,123456789,123456789,123456789,123456789,123456789,123456789,123456789,123456789,123456789,123456789,123456789,123456789,123456789,123456789,123456789,91092904,123456789,123456789,123456789,123456789,123456789,123456789,123456789,123456789,123456789,123456789,123456789,123456789,123456789,123456789,123456789,123456789,123456789,123456789,123456789,123456789">
<input type="hidden" name="p_Id" value="123456789">
<input type="hidden" name="u_Id" value="123456789">
<input type="hidden" name="sp_Id" value="1234">
<input type="hidden" name="lv_dt" value="04/01/2016 08:57:23 AM">
<input type="hidden" name="username_vote" value="someusername">
<input type="hidden" name="h" value="0">
<input type="hidden" name="s" value="0">
<button type="submit" class="submit-no-button" id="submit-button-no-var" name="votec" value="3">No</button>
<button type="submit" class="submit-yes-button" id="submit-button-yes-var" name="votea" value="1">Yes</button>
</form>">
<input type="hidden" name="p_Id" value="123456789">
<input type="hidden" name="u_Id" value="123456789">
<input type="hidden" name="sp_Id" value="1234">
<input type="hidden" name="lv_dt" value="04/01/2016 08:57:23 AM">
<input type="hidden" name="username_vote" value="someusername">
<input type="hidden" name="h" value="0">
<input type="hidden" name="s" value="0">
</form>
Вот мой исходный код:
function Invoke-DomainLogin([Parameter(Mandatory=$True)][System.Management.Automation.PSCredential]$Credential){
$URL = "example.com"
$BSTR = [System.Runtime.InteropServices.Marshal]::SecureStringToBSTR($Credential.Password)
$ptPassword = [System.Runtime.InteropServices.Marshal]::PtrToStringAuto($BSTR)
[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
$LoginBody = @{
username = $Credential.UserName
password = $ptPassword
}
Do {
$Login = Invoke-WebRequest $URL/viewrespond.aspx -SessionVariable Domain -Method Post -Body $LoginBody
if ($Login.Content -like "*Your email or password were entered incorrectly*"){
Throw "Credentials incorrect"
}
$submit = Invoke-WebRequest ($mmURL = "$URL/submit.aspx#submittop") -WebSession $Domain -Method Post
$Click = $submit.ParsedHtml.body.getElementsByTagName("button")|Where-Object {$_.name -eq "votea"}
$Click.click()
$Obj = New-Object PSObject
$Obj|Add-Member -MemberType NoteProperty -Name Username -Value ($submit.Forms|Where-Object Id -eq "submit-control-form").Fields.username_vote
$Obj|Add-Member -MemberType NoteProperty -Name Link -Value ("{0}/{1}" -f $URL,($submit.Links|Where-Object innerHtml -Eq "View Profile").href)
$Obj
Start-Sleep -Seconds 1
}
while($fakestring -ne "fakestring")
}
Invoke-DomainLogin $Cred
Когда я выполняю $Click.click()
, если IE не установлен в качестве браузера по умолчанию, я получаю диалоговое окно для открытия файла с вопросом, какое приложение я хочу использовать (Что ?!) - поэтому я установил браузер по умолчанию временно в IE, и я обнаружил, что в URL-адресе действия формы отсутствует имя домена, поэтому URL-адрес в браузере будет /submit.aspx#submittop
и не будет содержать URL-адрес, поскольку в URL-адресе действия формы не указано полное доменное имя.
У меня нет доступа к изменению формы каким-либо образом, как я могу заставить PowerShell манипулировать URL-адресом действия в форме, чтобы он был example.com/submit.aspx#submittop
?