none
Tastatureingabe mit PowerShell auf einer Webseite simulieren

    Frage

  • Hallo,

    ich muss mich jeden Morgen auf einer Intranet-Webseite mit Benutzer/Passwort authentifizieren. Dies möchte ich mit einem Powershellskript erledigen. Das Aufrufen der Webseite und das Füllen der Elemente (Benutzer und Passwort) funktioniert auch. Ich habe nur ein Problem mit dem LoginButton. Dieser ist Disabled und wird erst per Javaskript auf Enabled gesetzt wenn man per Tastatur etwas eingibt. Auch den Fokus auf die Elemente legen bringt nichts. Gibt es eine Möglichkeit, eine Tastatureingabe zu simulieren?

    Hier der Code:

    # Invoke Internet Explorer 
     
    $IE = New-Object -com internetexplorer.application; 
    $IE.visible = $true; 
    $IE.navigate($url); 
     
    # Wait if IE is busy 
     
    while ($IE.Busy -eq $true) 

    Start-Sleep -Milliseconds 2000; 

     
    $IE.Document.getElementById(“Username”).Focus()
    $IE.Document.getElementById(“Username”).value = $Username 
    $IE.Document.getElementByID(“Password”).Focus() 
    $IE.Document.getElementByID(“Password”).value=$Password 
    $IE.Document.getElementById(“loginbutton”).Click() 
     


    Donnerstag, 7. Dezember 2017 14:46

Antworten

  • Du könntest mal versuchen, die Aktion einfach ohne den Button auszulösen. Oft ist das sowas wie:

    $ie.document.getElementById("loginform").submit()

    wobei du hier erstmal den korrekten Namen für "loginform" rausfinden musst.
    Was du ansonsten auch mal testen kannst ist:

    $IE.Document.getElementById(“loginbutton”).setActive()

     
    Wenn das alles nichts nützt und du so richtig motiviert bist: Fiddler runterladen, Web-Traffc mitschneiden und sehen was genau passiert wenn der Button aktiv und gedrückt wird. :)

    Grüße, Denniver


    Blog: http://bytecookie.wordpress.com

    Kostenloser Powershell Code Manager v5: Link
    (u.a. Codesnippets verwalten + komplexe Scripte graphisch darstellen)

    Hilf mit und markiere hilfreiche Beiträge mit dem "Abstimmen"-Button (links) und Beiträge die eine Frage von dir beantwortet haben, als "Antwort" (unten).
    Warum das Ganze? Hier gibts die Antwort.


    Donnerstag, 7. Dezember 2017 15:32
    Moderator
  • um Deine Neugier zu befriedigen. Ich arbeite über einen Terminalserver. Da kann ich keinen Kennwortmanager einsetzten. Und Ziel ist es, direkt beim Start der Session sich auf dieser Session anzumelden. So das ich nichts machen muss.

    Warum da keine integrierte Windows-Authentifizierung geht, will ich gar nicht wissen... Und warum solltest Du da keinen Kennwortmanager einsetzen können? Die gibt's auch "portable".

    <button disabled="disabled" class="fw_btn_square fw_btn_L fw_btn_green loginButton font-m" type="submit" text="Anmelden" ng-disabled="loginForm.$invalid || difNewPassword" processing-text="Anmelden..." processing="processing"><!--id="loginbutton"--><!----><span ng-transclude=""></span><span ng-if="!processing" uib-tooltip="" tooltip-append-to-body="" tooltip-placement="" tooltip-popup-delay="">Anmelden</span><!----> <!----> <!----> </button>

    In dem Code ist der Button schon enabled, oder? Und die ID ist auskommentiert...

    https://stackoverflow.com/questions/13831601/disabling-and-enabling-a-html-input-button

    Aber der Tip von Denniver mit dem .submit() dürfte zielführender sein.

    Donnerstag, 7. Dezember 2017 17:00

Alle Antworten

  • Dies möchte ich mit einem Powershellskript erledigen.

    Der Neugier halber: Warum? Es gibt eine ganze Reihe kostenloser und guter Kennwortmanager, die das für Dich erledigen können. PasswordSafe und LastPass verwende ich auch selbst.

    wird erst per Javaskript auf Enabled gesetzt

    Dann aktiviere ihn doch, bevor Du klickst... :-) Das, was das Javaskript macht, kannst Du ja von außen mit dem COM-Objekt auch machen.

    Donnerstag, 7. Dezember 2017 14:58
  • Du könntest mal versuchen, die Aktion einfach ohne den Button auszulösen. Oft ist das sowas wie:

    $ie.document.getElementById("loginform").submit()

    wobei du hier erstmal den korrekten Namen für "loginform" rausfinden musst.
    Was du ansonsten auch mal testen kannst ist:

    $IE.Document.getElementById(“loginbutton”).setActive()

     
    Wenn das alles nichts nützt und du so richtig motiviert bist: Fiddler runterladen, Web-Traffc mitschneiden und sehen was genau passiert wenn der Button aktiv und gedrückt wird. :)

    Grüße, Denniver


    Blog: http://bytecookie.wordpress.com

    Kostenloser Powershell Code Manager v5: Link
    (u.a. Codesnippets verwalten + komplexe Scripte graphisch darstellen)

    Hilf mit und markiere hilfreiche Beiträge mit dem "Abstimmen"-Button (links) und Beiträge die eine Frage von dir beantwortet haben, als "Antwort" (unten).
    Warum das Ganze? Hier gibts die Antwort.


    Donnerstag, 7. Dezember 2017 15:32
    Moderator
  • Hallo Martin,

    um Deine Neugier zu befriedigen. Ich arbeite über einen Terminalserver. Da kann ich keinen Kennwortmanager einsetzten. Und Ziel ist es, direkt beim Start der Session sich auf dieser Session anzumelden. So das ich nichts machen muss.

    Da ich das Javaskript nicht sehen kann (arbeite ja auf einem TS), weiß ich auch nicht, was ich mit dem COM-Objekt machen muss. Wenn ich auf "Element untersuchen" im IE klicke, sehe ich nur folgendes:

    <button disabled="disabled" class="fw_btn_square fw_btn_L fw_btn_green loginButton font-m" type="submit" text="Anmelden" ng-disabled="loginForm.$invalid || difNewPassword" processing-text="Anmelden..." processing="processing"><!--id="loginbutton"--><!----><span ng-transclude=""></span><span ng-if="!processing" uib-tooltip="" tooltip-append-to-body="" tooltip-placement="" tooltip-popup-delay="">Anmelden</span><!----> <!----> <!----> </button>

    Donnerstag, 7. Dezember 2017 16:24
  • um Deine Neugier zu befriedigen. Ich arbeite über einen Terminalserver. Da kann ich keinen Kennwortmanager einsetzten. Und Ziel ist es, direkt beim Start der Session sich auf dieser Session anzumelden. So das ich nichts machen muss.

    Warum da keine integrierte Windows-Authentifizierung geht, will ich gar nicht wissen... Und warum solltest Du da keinen Kennwortmanager einsetzen können? Die gibt's auch "portable".

    <button disabled="disabled" class="fw_btn_square fw_btn_L fw_btn_green loginButton font-m" type="submit" text="Anmelden" ng-disabled="loginForm.$invalid || difNewPassword" processing-text="Anmelden..." processing="processing"><!--id="loginbutton"--><!----><span ng-transclude=""></span><span ng-if="!processing" uib-tooltip="" tooltip-append-to-body="" tooltip-placement="" tooltip-popup-delay="">Anmelden</span><!----> <!----> <!----> </button>

    In dem Code ist der Button schon enabled, oder? Und die ID ist auskommentiert...

    https://stackoverflow.com/questions/13831601/disabling-and-enabling-a-html-input-button

    Aber der Tip von Denniver mit dem .submit() dürfte zielführender sein.

    Donnerstag, 7. Dezember 2017 17:00