Klicken Sie auf <BUTTON> in HTML-Seite
<button type="submit">Login</button>
Ich versuche, klicken Sie auf/senden Sie die oben-Taste mithilfe von Windows Powershell. Ich habe versucht den folgenden code:
$submitButton = $doc.documentElement.getElementsByClassName('button') |
Select-Object -First 1
$submitButton.click()
bringt wieder diese Fehlermeldung:
Kann man nicht nennen eine Methode eines null-Wert Ausdruck. ps1:15 char:1 + $submitButton festgelegt = $doc.documentElement.getElementsByClassName('button') | ... + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : InvalidOperation: (:) [], RuntimeException + FullyQualifiedErrorId : InvokeMethodOnNull Sie können das aufrufen einer Methode auf null-Wert Ausdruck. ps1:16 char:1 + $submitButton festgelegt.klicken Sie auf() + ~~~~~~~~~~~~~~~~~~~~~ + 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 auch dies bringt wieder den gleichen Fehler 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()
BEARBEITEN
Hier ist die Ausgabe der powershell getelementbytagname. Beachten Sie, gibt es keine classname oder ID, wie kommt es 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
BEARBEITEN
<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>
- Wo hast
$doc
und$ie
kommen? - Sie müssen möglicherweise ausführen der web-Seite im IE8-Kompatibilitätsmodus um diese Arbeit zu machen.
Du musst angemeldet sein, um einen Kommentar abzugeben.
In den code, die Sie gemeinsam die
$doc
variable ist nicht initialisiert abrufen. Bitte initialisieren Sie ihn zunächst vor Sie es in die folgende Zeile:Den Fehler auf dieser Linie, D. H.
null-valued expression
Fehler, ist aufgrund der Tatsache, dass$doc
null an dieser Stelle.Alternative Lösung: Stattdessen versuchen Sie den folgenden code, um die senden-Schaltfläche in das Formular auf der Seite. Sie können den code optimieren, wie pro Ihre Anforderung und die Seite, die Sie sind targeting.
$submitButton = $ie.Document.getElementsById()
Methode verwenden, die ID.der nächste, den ich bekommen konnte, um diese Art der automation wurde durch das schreiben dieses:
dieser code geklickt haben, werden alle buttons auf der Seite aber habe mich angemeldet in die Webseite ein.
weiter Lesen(http://www.w3schools.com/jsref/met_namednodemap_item.asp) ich habe schon änderungen im code mit:
$Link = $ie.Dokument.getElementsByTagName("button")| where-object {$_.Typ -eq "eintragen"}
$Link.Punkt(2).klicken Sie auf()