Заполните имя пользователя / пароль на веб-странице с помощью Powershell - PullRequest
1 голос
/ 03 марта 2020

Я пытаюсь ввести имя пользователя и пароль на странице входа в маршрутизатор Motorola. Частично HTML страницы ниже:

<form name="login" onsubmit="return loginSubmit()" action="/goform/login" method="POST"> 
  <div id="moto-login">

    <some divs snipped>

    <div id="moto-username">
    <input name="loginUsername" class="moto-username-input" onfocus="onFocusUsername()" onblur="onBlurUsername()" type="text" value="Username">
    </div>

    <some divs snipped>

  </div>
</form>

Я использую PowerShell и пытаюсь получить указатель на строку значения. Я могу сделать это:

$ie.Document.IHTMLDocument3_getElementById("moto-username").innerHTML

И получить это:

<input name="loginUsername" class="moto-username-input" onfocus="onFocusUsername()" onblur="onBlurUsername()" type="text" value="Username">

… но я не вижу, как установить переменные. Это из-за вложенности <div> s?

Я пробовал различные формы, такие как:

$iePPM.Document.IHTMLDocument3_getElementById("moto-username") = "myusername"

… но ничего не работает.

TIA !

1 Ответ

0 голосов
/ 03 марта 2020

Вы не говорите, как вы находите / просматриваете свои элементы.

Если вы сделали это ...

... что возвращается как элементы?

Пример (ы):

Для вашего сайта - чтобы быть уверенным. Навигация по элементам формы сайта, а не по элементам Inte rnet Explorer

$url = 'https://pwpush.com'

($FormElements = Invoke-WebRequest -Uri $url -SessionVariable fe)   

<#
    StatusCode        : 200
    StatusDescription : OK
    Content           : <!DOCTYPE html>
                        <html>
...
#>



($Form = $FormElements.Forms[0]) | 
Format-List -Force

<#
    Id     : new_password
    Method : post
    Action : /p
    Fields : ...}
#>

$Form | 
Get-Member

<#
       TypeName: Microsoft.PowerShell.Commands.FormObject

    Name        MemberType   Definition                                                        
    ----        ----------   ----------                                                        
    Equals      Method       bool Equals(System.Object obj)                                    
    GetHashCode Method       int GetHashCode()                                                 
    GetType     Method       type GetType()                                                    
    ToString    Method       string ToString()                                                 
    Action      Property     string Action {get;}                                              
    Fields      Property     System.Collections.Generic.Dictionary[string,string] Fields {get;}
    Id          Property     string Id {get;}                                                  
    Method      Property     string Method {get;}                                              
    MSDN        ScriptMethod System.Object MSDN();
#>

$Form.Fields

<#
    Key                          Value                                                                                   
    ---                          -----                                                                                   
    utf8                         ✓                                                                                       
    authenticity_token           2mebmGbAJsseDW+/TeTBXAelq1s8kH5Zgb6W14Pxtba6CyWsAM4SfVqdJWdVmu5HjxIGUCWjEGhy6fLTB38UhA==
    password_payload             Enter the Password to be Shared                                                         
    password_expire_after_days   7                                                                                       
    password_expire_after_views  5                                                                                       
    password_deletable_by_viewer on                                                                                      
    commit                       Push it!  

Или просто просмотр источника сайта на странице

<# 
    <span class='note'>
    (whichever comes first)
    </span>
...
#>


# so you end up here

Clear-Host

$password = '1234'
$loginUrl = 'https://pwpush.com'

$ie = New-Object -com internetexplorer.application
$ie.visible = $true
$ie.navigate($loginUrl)

while ($ie.Busy -eq $true) { Start-Sleep -Seconds 1 }

($ie.document.getElementById('password_payload') | select -first 1).value = $password
Start-Sleep -Seconds 1 

$ie.Document.getElementsByName('commit').Item().Click();
Start-Sleep -Seonds 1 

Вы также можете выполнить сопоставление строк, чтобы найти элементы для делать вещи, чтобы. Например, на этом мульти-странице c страница

$url = 'https://www.aircanada.com/ca/en/ado/profile/sign-in.html'

# Get form elements
($FormElements = Invoke-WebRequest -Uri $url -SessionVariable fe)  

# List all form objects 
$FormElements.Forms
$FormElements.InputFields
$FormElements.ParsedHtml
$FormElements.Content
$FormElements.Scripts


# Get all page source elements
$FormElements.AllElements

$FormElements.AllElements | 
Select-Object -Expand OuterText

$FormElements.AllElements | 
Select-Object -Expand InnerText


# Get elements by string match
$FormElements.AllElements | 
Where{$_.TagName -eq "input"}

# Get all page button elements
$FormElements.AllElements | 
Where{$_.TagName -eq "Button"}

$FormElements.AllElements | 
Where{$_.TagName -eq "Button"} | 
Select-Object outerHTML

$FormElements.AllElements | 
Where{$_.TagName -eq "Button"} | 
Select-Object -Expand OuterText

$FormElements.AllElements | 
Where{$_.TagName -eq "Button"} | 
Select-Object -Expand InnerText


# Get only the submit button that matches the criteria
($FormElements.AllElements | 
Where{$_.TagName -eq "Button"} | 
Select-Object -Property outerHTML) -Match 'SIGN IN'

$FormElements.AllElements | 
Where{$_.TagName -eq "Button"} | 
Select-Object -Property * | 
Where innerText -eq 'SIGN IN'

Обновление в соответствии с вашим комментарием BookinAgent

$FormElements.Forms
$FormElements.InputFields.FindById('bookingAgent')
<#
# Results

Id           Method Action                              Fields                                                                                
--           ------ ------                              ------                                                                                
             get    /ca/en/ado/home/search-results.html {[searchbox_01, ]}                                                                    
             get    /ca/en/ado/home/search-results.html {[searchbox_011, ]}                                                                   
             get    /ca/en/ado/home/search-results.html {[searchbox_0111, ]}                                                                  
adoLoginForm post                                       {[agencyIATA, ], [agencyID, ], [bookingAgent, ], [password, ], [rememberAgencyInfo, ]}
adoLoginForm post                                       {[agencyIATA, ], [agencyID, ], [bookingAgent, ], [password, ], [rememberAgencyInfo, ]}
bookingAgent   
#>



# Get elements by string match
$FormElements.AllElements | 
Where{$_.TagName -eq "input"} | 
Select-String -Pattern 'BookingAgent'



# Get all page button elements
$FormElements.AllElements | 
Where{$_.TagName -eq "Button"} | 
Select-String -Pattern 'BookingAgent'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...