Ich möchte Desktop-Aktivitäten in der Windows-Umgebung mit Python automatisieren. Wie geht das? Einige Beispiele werden auch hilfreich sein.
Mit Desktop-Aktivitäten meine ich Aktionen wie das Steuern der Maus und der Tastatur, den Zugriff auf die Eigenschaften des aktiven Fensters, das Doppelklicken auf ein Symbol auf dem Desktop, das Minimieren und Maximieren von Fenstern, das Eingeben von Daten in ein Popup-Eingabefenster über die Tastatur usw.
Schauen Sie sich SIKULI an.
Sikuli ist eine visuelle Technologie zum Automatisieren und Testen grafischer Benutzer Schnittstellen (GUI) mit Bildern (Screenshots).
SIKULI verwendet eine sehr clevere Kombination aus dem Erstellen von Screenshots und deren Einbettung in Ihr Python-Skript (eigentlich jython ).
Machen Sie Screenshots:
und verwende sie in deinem Code:
Es gibt verschiedene Möglichkeiten, Benutzeroberflächen in Windows zu automatisieren, auf die über Python (mit ctypes
oder einigen der Python-Windows-Bindungen) zugegriffen werden kann:
Raw-Windows-APIs - Get/SetCursorPos
für die Maus, HWND-APIs wie GetFocus
und GetForegroundWindow
AutoIt
- Automatisierungsskriptsprache: AutoIt-Funktionen in Python aufrufen
Microsoft Active Accessibility (MSAA
)/WinEvent - Eine API zum Abfragen einer Benutzeroberfläche über die Eingabehilfen-APIs in Win95.
UI/Automation (UIA
) - ein Ersatz für MSAA
in Vista (verfügbar für XP SP3 IIRC).
Die Automatisierung einer Benutzeroberfläche zu Testzwecken ist eine nicht triviale Aufgabe. Es gibt viele Gotchas, die dich stolpern können.
Ich würde vorschlagen, Ihr Automatisierungsframework auf automatisierte Weise zu testen, damit Sie überprüfen können, ob es auf den von Ihnen getesteten Plattformen funktioniert (um Fehler in der Automatisierung API
vs. Fehler in der Anwendung zu identifizieren).
Eine weitere Überlegung betrifft den Umgang mit der Lokalisierung. Beachten Sie auch, dass die Namen für Minimize/Maximize/... ebenfalls lokalisiert sind und sich in einer anderen Sprache als die Anwendung befinden können (System vs. User Locale)!
In Pseudo-Code würde ein MSAA
-Programm zum Minimieren einer Anwendung ungefähr so aussehen:
window = AccessibleObjectFromWindow(FindWindow("My Window"))
titlebar = [x for x in window.AccessibleChildren if x.accRole == TitleBar]
minimize = [x for x in titlebar[0].AccessibleChildren if x.Name == "Minimize"]
if len(minimize) != 0: # may already be minimized
mimimize[0].accDoDefaultAction()
MSAA
zugreifbare Elemente werden als (object: IAccessible, childId: int)
Paare gespeichert. Hier ist Vorsicht geboten, damit die Anrufe korrekt sind (z. B. verwendet get_accChildCount
nur die IAccessible
. Wenn childId
nicht 0 ist, müssen Sie 0 zurückgeben, anstatt get_accChildCount
aufzurufen)!
IAccessible
-Aufrufe können unterschiedliche Fehlercodes zurückgeben, um "this object does not support this property"
anzuzeigen, z. DISP_E_MEMBERNOTFOUND
oder E_NOTIMPL
.
Beachten Sie den Zustand des Fensters. Wenn das Fenster maximiert und dann minimiert wird, stellt restore das Fenster wieder in den maximierten Zustand zurück. Sie müssen es daher erneut wiederherstellen, um es wieder in den normalen/Fensterzustand zu bringen.
Die MSAA
- und UIA
-APIs unterstützen keine Klicks mit der rechten Maustaste. Daher müssen Sie zum Auslösen einen Win32 API
verwenden.
Das Modell MSAA
unterstützt keine Informationen zur Baumansicht-Hierarchie, sondern zeigt es als einfache Liste an. Andererseits listet UIA
nur Elemente auf, die sichtbar sind, sodass Sie nicht auf Elemente in der UIA
-Struktur zugreifen können, die reduziert sind.
Sie können Automa versuchen.
Es ist ein in Python geschriebenes Windows-GUI-Automatisierungswerkzeug, das sehr einfach zu bedienen ist. Sie können beispielsweise Folgendes tun:
# to double click on an icon on the desktop
doubleclick("Recycle Bin")
# to maximize
click("Maximize")
# to input some text and press ENTER
write("Some text", into="Label of the text field")
press(ENTER)
Die vollständige Liste der verfügbaren Befehle finden Sie hier .
Disclaimer: Ich bin ein Entwickler von Automa.
Sie können PyAutoGUI verwenden, um eine plattformübergreifende Python-Methode für die GUI-Automation bereitzustellen.
Hier ist ein einfacher Code, um die Maus in die Mitte des Bildschirms zu bewegen:
import pyautogui
screenWidth, screenHeight = pyautogui.size()
pyautogui.moveTo(screenWidth / 2, screenHeight / 2)
Verwandte Frage: Steuern der Maus mit Python .
Beispiel:
pyautogui.typewrite('Hello world!') # prints out "Hello world!" instantly
pyautogui.typewrite('Hello world!', interval=0.25) # prints out "Hello world!" with a quarter second delay after each character
Es enthält Meldungsfelder im JavaScript-Stil.
Und andere.
Weitere Vorschläge finden Sie unter: Python GUI-Automationsbibliothek zum Simulieren der Benutzerinteraktion in Apps .
Sie können Ihren PC sperren (Win + L)
import ctypes
ctypes.windll.user32.LockWorkStation()
Sie können Ihren Papierkorb löschen
import winshell
winshell.recycle_bin().empty(confirm=False, show_progress=False, sound=True)