highspeed1
Goto Top

Wie kann man auf einer Webseite mit PowerShell einen Button anklicken

Hallo Forum.

Wie kann man einen bestimmen Button einer Webseite mit Hilfe von PowerShell anklicken. Aktuell springe ich mit Tabs zu dem Button und drücke dann Enter. Ändert sich die Seite funktioniert diese Methode nicht mehr. Deshalb will ich das Skript umschreiben. Der Buttonname ist bekannt und in der Variable $ButtonName hinterlegt. Kann mir jemand helfen?

cls

$ButtonName = "Button"  

$Url = "https://Test"  

start-Process -FilePath msedge -ArgumentList $Url

$count = 0
do {
    if($count -eq 30){
        break
    }
    $ps = Get-Process msedge -ErrorAction SilentlyContinue | Where-Object MainWindowTitle -like "*TEST*"  
    Start-Sleep -Milliseconds 500
    $count++
}while($ps.Id -eq $null)

if($ps.Id -ne $null){
    $wshell = New-Object -ComObject wscript.shell

    while (-not $wshell.AppActivate($ps.Id)) {
      Start-Sleep -MilliSeconds 500
    }

    # === goto button and press the button ===
    1..10 | foreach {$wshell.SendKeys('{TAB}')}  
    $wshell.SendKeys("~")  
    Start-Sleep -Milliseconds 500

    # === write LoginData and press the button===
    $wshell.SendKeys("TEXT")  
    Start-Sleep -Milliseconds 200
    $wshell.SendKeys("{TAB}~")  
}

Content-ID: 51914096377

Url: https://administrator.de/contentid/51914096377

Printed on: September 1, 2024 at 08:09 o'clock

NordicMike
NordicMike Aug 09, 2024 at 13:39:43 (UTC)
Goto Top
Das Script muss zunächst die Buttons bzw die TAB-würdigen Stellen auf der Seite zählen, bis der gewünschte Button mit dem Namen erreicht ist. Dann nur noch so oft TAB drücken lassen.

Das ist jedoch eine unschöne Methode. Es kommt nun darauf an was dieser Button auslöst. Wenn es eine GET- oder POST-Methode ist, das kannst du es auch in der Powershell direkt absenden, ohne, dass dafür ein Browser offen sein muss. Du kannst auch einen ganzen Browser simulieren, der Sessions und Cookies verwendet, sich anmeldet und eben auch alles machen kann, was ein Button eben auch macht.
colinardo
Solution colinardo Aug 09, 2024 updated at 14:03:37 (UTC)
Goto Top
Servus.
lass das mit SendKeys und wshshell, das ist ehrlich gesagt "würg" und unzuverlässig, so etwas macht man heutzutage nicht mehr. Für "echte" objektorientierte Browser-Automation schaust du bitte hier rein, dort findest du auch entsprechende Beispiele:

PowerShell: Einführung in die Webbrowser Automation mit Selenium WebDriver

In der Regel ist Automation über einen Browser auch nur nötig wenn auf der Seite viel JavaScript&Co im Spiel sind, ansonsten lässt sich das meiste auch mit normalen WebRequests erledigen in dem man mit F12 im Browser die von der Webseite durchgeführten POST/GET Requests mittels Invoke-WebRequest & Co nachbaut. Das geht in der Regel wesentlich schneller und zuverlässiger.

Grüße Uwe
HighSpeed1
HighSpeed1 Aug 12, 2024 at 06:33:16 (UTC)
Goto Top
Sehr gute Dokumentation. Hat super funktioniert. Vielleicht könnte man noch einen Screenshot einfügen wo man im DeveloperTool sehen kann woher man z.B die Bezeichnung TagName herbekommt.
$items = $browser.FindElements([OpenQA.Selenium.By]::TagName("img"))  
Nicht jeder hat schon mal eine Webseite programmiert... Aber das ist jammern auf sehr hohem Niveau. Echt super diese Anleitung.

Gruß Christoph