2016-05-03 10 views
1
<button type="submit">Login</button> 

Ich versuche, die oben genannte Schaltfläche mit Windows Powershell klicken/senden. Ich habe den folgenden Code versucht:Klicken Sie auf <BUTTON> in HTML-Seite

$submitButton = $doc.documentElement.getElementsByClassName('button') | 
       Select-Object -First 1 
$submitButton.click() 

, die diesen Fehler zurück bringt:

You cannot call a method on a null-valued expression. 
ps1:15 char:1 
+  $submitButton = $doc.documentElement.getElementsByClassName('button') | ... 
+  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
    + CategoryInfo   : InvalidOperation: (:) [], RuntimeException 
    + FullyQualifiedErrorId : InvokeMethodOnNull 

You cannot call a method on a null-valued expression. 
ps1:16 char:1 
+ $submitButton.click() 
+ ~~~~~~~~~~~~~~~~~~~~~ 
    + CategoryInfo   : InvalidOperation: (:) [], RuntimeException 
    + FullyQualifiedErrorId : InvokeMethodOnNull

Ich habe auch versucht, diesen Code:

$loginBtn = $ie.Document.getElementsById('input') | 
      Where-Object {$_.Type -eq 'button' -and $_.Value -eq 'LoginButton'} 
$loginBtn.click() 

aber das bringt auch die gleichen Fehler wieder wie vorher .

mein Powershell-Code in voller Länge:

$username='USERNAME' 
$password='PASSWORD' 

$ie = New-Object -ComObject 'internetExplorer.Application' 
$ie.Visible= $true 
$ie.Navigate("URL EXAMPLE") 

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

$Open = $ie.Document.getElementByID('has-account') 
$Open.click() 

$usernamefield = $ie.Document.getElementByID('login-usr').value =   $username 
$passwordfield = $ie.Document.getElementByID('login-pass').value =  $password 
$submitButton = $doc.documentElement.getElementsByClassName('button') |  Select-Object -First 2 
$submitButton.click() 

EDIT

Hier ist die Ausgabe von Power getelementbytagname. Beachten Sie, dass kein Klassenname oder keine ID vorhanden ist. Wie wird darauf geklickt?

className     : 
id       : 
tagName      : BUTTON 
parentElement    : System.__ComObject 
style      : System.__ComObject 
document      : mshtml.HTMLDocumentClass 
sourceIndex     : 60 
offsetLeft     : 61 
offsetTop     : 220 
offsetWidth     : 320 
offsetHeight     : 41 
offsetParent     : System.__ComObject 
innerHTML     : Login 
innerText     : Login 
outerHTML     : <button type="submit">Login</button> 
outerText     : Login 
parentTextEdit    : System.__ComObject 

EDIT

<form id="sp-login-form" action="#" method="post"> 
     <button type="button" id="fb-login-btn" class="button fb">Log in with Facebook<span style="position: absolute;"></span></button> 
     <em>or</em> 
     <div> 
      <label for="login-usr">Username</label> 
      <input type="text" name="username" id="login-usr" placeholder="Spotify username"> 
      <label for="login-pass" class="pass">Password</label> 
      <input type="password" name="password" id="login-pass" class="pass" placeholder="Password"> 
      <button type="submit">Login</button> 
     </div> 
     </form> 
+0

Woher kamen '$ doc' und' $ ie'? –

+0

Möglicherweise müssen Sie die Webseite im IE8-Kompatibilitätsmodus ausführen, damit dies funktioniert. –

Antwort

0

Im Code geteilt Sie die $doc Variable nicht initialisiert zu werden. Bitte initialisieren erste vor es in der folgenden Zeile verwendet:

$doc.documentElement.getElementsByClassName('button') 

die Fehler auf dieser Zeile, d.h. null-valued expression Fehler, auf die Tatsache zurückzuführen ist, dass $doc an diesem Punkt Null ist.

Alternative Lösung: Stattdessen versuchen Sie den folgenden Code, um den Absenden-Button im Formular auf der Seite zu erhalten. Sie können den Code gemäß Ihren Anforderungen und der Zielseite optimieren.

$submitButton=$ie.Document.getElementsByTagName("button") | Where-Object {$_.innerhtml -eq 'Login'} 
$submitButton.click(); 
+0

ok, danke. Was könnte ich an seiner Stelle verwenden, um auf diese Senden-Schaltfläche zu klicken? – user694485

+0

Ich würde empfehlen, eine ID zum Absenden-Button hinzuzufügen, wenn Sie der Entwickler für diese Seite sind, und verwenden Sie dann $ $ submitButton = $ ie.Document.getElementsById() 'Methode mit dieser ID. –

+0

@ user694485 - Ich habe meine Antwort mit einer generischen Lösung aktualisiert. Wenn es hilft, akzeptieren Sie bitte, indem Sie auf das Häkchen unter den Pfeilen neben der Antwort klicken. –

0

die nächstgelegene ich auf diese Art der Automatisierung erhalten konnte, war dies durch das Schreiben:

$Click=$ie.Document.getElementsByTagName("button") | Where-Object {$_.type -eq 'submit'} 
$Click.click(); 

dieser Code alle Tasten auf der Seite geklickt, aber mir tat bekommen in die Webseite angemeldet.

auf weiterführende Literatur (http://www.w3schools.com/jsref/met_namednodemap_item.asp) Ich habe den Code wurde Tweaking mit:

$ Link = $ ie.Document.getElementsByTagName ("Button") | where-object {$ _. type -eq "submit"} $ Link.item (2) .click()

Verwandte Themen