k-ist-k
Goto Top

MS Power Automate (Desktop) Flow starten automatisiert

Hallo,

immer wenn ich MS Power Automate nutze, verzweifel ich, an den Basics.
Jetzt habe ich einen Flow fertig, der funktioniert, wenn ich den manuell ausführe, kann es aber nicht automatisieren.

Die ganzen Videos, Seiten, Tipps zeigen immer andere Versionen als ich habe, und ich hab die Desktop App (aktuell).
Auch ChatGPT fragt Sachen, die ich nicht beantworten kann.
ChatGPT meint, den Flow exportieren als JSON und dann im Aufgabenplaner rein ....

Nur kann ich den Flow nicht exportieren, oder mit speichern unter, an einem Pfad ablegen.
Ich weiß auch nicht wo mein Flow liegt.
Denn unter Benutzerdaten Dokumente finde ich den auch nicht.

Im Grunde möchte ich nur meinen Flow automatisch täglich laufen lassen.
Gerne über Aufgabenplaner oder über PowerShell starten.
In den Videos sehe ich immer nur Power Automate Cloud ....

Habt Ihr eine Idee, wie ich einen fertigen Flow, automatisch täglich starten lassen kann?

Hab das früher schon mal versucht und hab einen Task im Aufgabenplaner, der so aussieht (aber nicht funktioniert, wird ausgeführt, aber die Doings passieren nicht)
Aktion: "C:\Program Files (x86)\Power Automate Desktop\PAD.Console.Host.exe"
Argument: "ms-powerautomate:/console/flow/run?workflowName="aWattar_Preis - TelegramChat"


Danke und LG.
Wenn ich es dennoch noch rausfinden sollte, gebe ich hier Bescheid ; )

Content-ID: 41589362570

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

Ausgedruckt am: 22.11.2024 um 09:11 Uhr

K-ist-K
K-ist-K 20.08.2023 um 20:43:20 Uhr
Goto Top
Was ich zB nicht verstehe ist folgende URL
https://learn.microsoft.com/en-us/power-automate/desktop-flows/run-deskt ...

Wenn ich auf meinen Flow drücke sehe ich nur:
Ausführen
Beenden
Bearbeiten
Umbenennen
Eine Kopie erstellen
Löschen
Eigenschaften

Und in den Eigenschaften steht auch weniger, als in der Doku angezeigt

Welche Version habe ich:
info
K-ist-K
K-ist-K 20.08.2023 um 21:06:51 Uhr
Goto Top
Eventuell noch eine Hintergrund Geschichte, worum es hier geht.
Möchte auf dieser Seite: https://www.awattar.at/
Unten das Diagramm fotografieren und als .jpg speichern und zwar mit Brutto Preisen:
awattarpreis

Dieses Foto möchte ich über Telegram Bot in eine Gruppe stellen.
Dieses Teil habe ich alles schon.
Mir fehlt nur das Bild zu bekommen. Egal wie, ich bräuchte das automatisch täglich.
7907292512
7907292512 21.08.2023 um 10:35:30 Uhr
Goto Top
Guckst du hier, das hatte ich für was ähnliches schon mal verwendet:

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

Gruß siddius

p.s. gerade mal für die Seite ausprobiert (Je nachdem welcher Browser bei dir installiert ist den Parameter der 3 Zeile auf "Firefox", "Edge" oder "Chrome" ändern):
# Funktion von o.g. Link einbauen
$imagepath = "$home\Desktop\chart.png"  
$browser = Create-Browser -browser Firefox
$browser.Url = 'https://www.awattar.at/'  
[void]$browser.Navigate()
sleep 1
$element = $browser.FindElement([OpenQA.Selenium.By]::Id('chartTransparencyData'))  
[io.File]::WriteAllBytes($imagepath,[Convert]::FromBase64String($element.GetScreenshot().AsBase64EncodedString))
$browser.Quit()
K-ist-K
K-ist-K 21.08.2023 um 10:49:18 Uhr
Goto Top
@7907292512 vielen lieben Dank. Das bringt ich einen gewaltigen Schritt näher.
Für die Leute, die nur den Code testen, ihr müsst auch den Link aufmachen und die Funktion in euren Code einbauen.

Es hat funktioniert, es fehlt nur noch ein kleiner (hoffentlich leichter Schritt).
Bevor der Screenshot passiert, müsste man noch auf "Brutto" ändern.
Da ich als Privatperson, natürlich den Brutto Preis zahle.

Nehme an du hast mit F12 geschaut, wie das Element heißt und greift darum zu.
Wie ist das beim abändern?
Sehe hier nichts passendes:
brutto_f12

In MS Power Automate, wäre das folgender Schritt:
brutto
K-ist-K
K-ist-K 21.08.2023 um 11:46:35 Uhr
Goto Top
Das ist mir aktuell ein wenig zu viel, das muss ich mir mal ein paar Video reinziehen, wegen Selenium.
Aber es wirkt schon mal sehr cool und zielführend.

Dein letzter Code, liefert bei mir aber immer noch Netto Preise.
Wurde hier bei der Variable $btn versucht den Wert mit 20% extra zuberechnen?

Das verstehe ich gar nicht:
$actions.ScrollByAmount(0,$btn.Location.Y-200)
Hier geht es um das scrollen? auf -200.
7907292512
Lösung 7907292512 21.08.2023 um 12:00:01 Uhr
Goto Top
Zitat von @K-ist-K:

@7907292512 vielen lieben Dank. Das bringt ich einen gewaltigen Schritt näher.
Für die Leute, die nur den Code testen, ihr müsst auch den Link aufmachen und die Funktion in euren Code einbauen.
Steht doch oben im Kommentar 🙃. Code nochmal redundant hier reinkopieren ist kontraproduktiv wenn er sich im Ursprungsbeitrag mal ändert!!

Wie ist das beim abändern?
Element wie oben gezeigt auswählen und die Click() Methode drauf ausführen ;-P, die Seite ist hier etwas tricky muss man etwas tricksen damit er das Element erfolgreich ansteuern kann.
$imagepath = "$home\Desktop\chart.png"  
$browser = Create-Browser -browser Firefox
$browser.Url = 'https://www.awattar.at/'  
[void]$browser.Navigate()
sleep 1
$element = $browser.FindElement([OpenQA.Selenium.By]::Id('chartTransparencyData'))  
$btn = $browser.FindElement([OpenQA.Selenium.By]::CssSelector('input[type="radio"][name="factor"][value="1.2"]'))  
$actions = New-Object OpenQA.Selenium.Interactions.Actions $browser
$actions.ScrollByAmount(0,$btn.Location.Y-200)
$actions.Pause([timespan]::FromSeconds(1))
$actions.Click($btn)
$actions.Pause([timespan]::FromSeconds(1))
$actions.Perform()
[io.File]::WriteAllBytes($imagepath,[Convert]::FromBase64String($element.GetScreenshot().AsBase64EncodedString))
$browser.Quit()
7907292512
7907292512 21.08.2023 um 12:00:40 Uhr
Goto Top
Zitat von @K-ist-K:
Dein letzter Code, liefert bei mir aber immer noch Netto Preise.
Klappt hier im Test problemlos. Habe oben mal eine zusätzliche Sekunde eingebaut damit das JavaScript Zeit hat den Canvas zu aktualisieren. Manche Browser sind da eben etwas lahm.
Das verstehe ich gar nicht:
$actions.ScrollByAmount(0,$btn.Location.Y-200)
Beim Aufruf der Seite ist oben ein statischer fixierter Cookie Banner der im Weg ist, das ist ein Workaround damit nicht zu weit runter gescrollt wird und der Button von dem Banner verdeckt wird ...
K-ist-K
K-ist-K 21.08.2023 um 13:05:25 Uhr
Goto Top
Was ich Zeit investiert habe mit PowerShell / MS Power Automate und Co.
Anfangs habe ich hier, das json Format manuell ausglesen und mit den Werten ein paar Abfragen gemacht.
Und infomiert, wenn aWattar -Preise pro kwh hat.

Hier das .json Format für aWattar aktuelle Preise:
http://api.awattar.at/v1/marketdata/current.yaml

Und hab per TelegramBot info geschickt.
Jetzt schicke ich dann das Bild an Telegram das ist so viel besser.

Für die, die auch per TelegramBOT ein Bild schicken wollen.
Dieses Modul ist super dafür:
Install-Module -Name PoshGram -Scope CurrentUser

Dafür wird aber PowerShell 6.x vorausgesetzt.
Wie man das am besten bekommt siehe hier:
winget install --id Microsoft.Powershell --source winget

Microsoft PowerShell 7.x

Das senden selbst ist dann einfach:
$Telegramtoken = "xxxxxxxx:YYYYYYYYYYYYYYYYYYYYYYYYYYYYY"  
$chatId = "-xxxxxxxxxxx"  
$imagePath = "C:\Users\{Username}\Desktop\aWATTar\aWATTar.jpg"  

So schickt man Text:
Send-TelegramTextMessage -BotToken $token -chatID $chatId -Message $($Date)

So schickt man Bild:
Send-TelegramLocalPhoto -BotToken $Telegramtoken -chatID $chatId -PhotoPath $imagePath

@7907292512 danke nochmal, du warst mir eine extrem große Hilfe und jetzt bin ich fertig.
Und bekomme das Bild täglich per Telegram Chat.
Danke
7907292512
Lösung 7907292512 21.08.2023 aktualisiert um 13:50:42 Uhr
Goto Top
Mit einem Telegram Bot ein Photo senden geht übrigens schnell und schmerzlos auch ohne das Installieren eines extra Moduls ..
$photo = "D:\demo.png"  
$botid = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxx"  
$chatid = "xxxxxxx"  
$imagecaption="Testbild"  
$client = New-Object System.Net.Http.HttpClient
$mpart = New-Object System.Net.Http.MultipartFormDataContent
[byte[]]$file_bytes = [IO.File]::ReadAllBytes($photo)
$mpart.Add([System.Net.Http.ByteArrayContent]::new($file_bytes,0,$file_bytes.Length),'"photo"',"`"$(Split-Path $photo -Leaf)`"")    
$result = $client.PostAsync("https://api.telegram.org/bot$botid/sendPhoto?chat_id=$chatid&caption=$([System.Net.WebUtility]::UrlEncode($imagecaption))",$mpart)    
$result
$client.Dispose()
K-ist-K
K-ist-K 22.08.2023 um 15:48:54 Uhr
Goto Top
Teste ich dann noch.
Mit dir hätte ich mir viel Zeit erspart, dafür ein paar Sachen gelernt.
Danke dir für alles