#powershell #login #webpage
#powershell #аутентификация #HTML
Вопрос:
У меня возникла проблема при попытке входа в следующую HTML-форму с помощью powershell: html обновлен, чтобы показывать кнопку входа
<tr>
<tr><td align='right' valign=top bgcolor='#ffffff' width=15%><font face='Arial, Helvetica, Verdana' size=-1 color=#000000 id=copy>User name or Email:</font></td><td valign=bottom><input type='text' name=AutoLogin size=30><tr><td align='right' valign=top bgcolor='#ffffff' width=15%><font face='Arial, Helvetica, Verdana' size=-1 color=#000000 id=copy>Password:</font></td><td valign=bottom><input type='password' name=AutoPassword size=30>
</tr></table>
<br>
<table cellpadding=4 cellspacing=1 border=0 bordercolor=#ffffff width=100% height=*>
<tr>
<tr><td><input type=submit value="Log In">
Код powershell для входа на страницу:
amp; "$env:programfilesInternet Exploreriexplore.exe" 'https://login-url.asp'
$win = New-Object -comObject Shell.Application
$try = 0
$ie2 = $null
do {
Start-Sleep -milliseconds 500
$ie2 = @($win.windows() | ? { $_.locationName -like '*Log In*' })[0]
$try
if ($try -gt 20) {
Throw "Web Page cannot be opened."
}
} while ($ie2 -eq $null)
$ie2.document
$ie2.Document.body.innerHTML
$doc = $ie2.document
$username = 'xxxxx'
$password = 'xxxxx'
#username field
$usernameField = $doc.getElementsByName("desc")
Write-Host "Username field is?"
$usernameField
#password field
$passwordField = $doc.getElementsByName("password")
Write-Host "Password field is?"
$passwordField
$submitButton = $doc.getElementById('submit')
$submitButton.click()
do {sleep 1} until (-not ($ie2.Busy))
Комментарии:
1. Хммм, ИМХО вам нужны только элементы (
getElementsByName
) с именемdesc
иpassword
2. это выдает следующую ошибку:
You cannot call a method on a null-valued expression. At E:getNotes.ps1:14 char:48 $usernameField = $doc.getElementsByName <<<< ("desc") CategoryInfo : InvalidOperation: (getElementsByName:String) [], RuntimeException FullyQualifiedErrorId : InvokeMethodOnNull
Затем я получаю следующий вывод:Username field is?: className : onhelp : onclick : ondblclick :
— и список продолжается…3. Что такое
$doc
? Вы создаете ее с помощьюnew-object -com InternetExplorer.Application
и....Navigate2("http://yoururl")
? Не могли бы вы, пожалуйста, показать немного больше кода?4.
$ie = new-object -com InternetExplorer.Application # Navigate to login page $ie.navigate("https://url-to-login/~account/login/customer.asp") do {sleep 1} until (-not ($ie.Busy)) $doc = $ie.document $username = 'xxxxx' $password = 'xxxxx' try { $usernameField = $doc.getElementsByName("desc")
5. Что ж, пока выглядит неплохо. Возможно, это ваша проблема?
Ответ №1:
для нажатия кнопки использовалось имя формы ввода, весь код, необходимый для ее работы, был:
#username field
$usernameField = $doc.getElementsByName("desc")
($usernameField |select -first 1).value = "xxxxx"
#password field
$passwordField = $doc.getElementsByName("password")
($passwordField |select -first 1).value = "xxxxx"
$ie2.document.getElementById("main").submit()