Как войти в эту плохо отформатированную HTML-форму с помощью powershell

#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()