Je souhaite automatiser les activités du bureau dans l'environnement Windows à l'aide de Python. Comment cela peut-il être fait? Quelques exemples seront également utiles.
Par activités de bureau, j'entends des actions telles que prendre le contrôle de la souris et du clavier, accéder aux propriétés des fenêtres actives, cliquer deux fois sur une icône du bureau, réduire et agrandir les fenêtres, saisir des données dans une fenêtre de saisie au clavier, etc.
Regardez SIKULI .
Sikuli est une technologie visuelle permettant d’automatiser et de tester les utilisateurs graphiques interfaces (GUI) utilisant des images (screenshots).
SIKULI utilise une combinaison très astucieuse de captures d’écran et d’incorporation de celles-ci dans votre script python (c’est jython , en fait).
Prendre des captures d'écran:
et les utiliser dans votre code:
Il existe différentes manières d'automatiser des interfaces utilisateur dans Windows accessibles via Python (à l'aide de ctypes
ou de certaines des liaisons de fenêtres Python):
API de fenêtres brutes - Get/SetCursorPos
pour la souris, API HWND telles que GetFocus
et GetForegroundWindow
AutoIt
- un langage de script d'automatisation: Appel de fonctions AutoIt en Python
Microsoft Active Accessibility (MSAA
)/WinEvent - une API permettant d'interroger une interface utilisateur via les API d'accessibilité de Win95.
UI/Automation (UIA
) - remplacement de MSAA
introduit dans Vista (disponible pour XP SP3 IIRC).
Automatiser une interface utilisateur pour la tester est une tâche non triviale. Il y a beaucoup de pièges qui peuvent vous faire trébucher.
Je suggérerais de tester votre infrastructure d'automatisation de manière automatisée afin que vous puissiez vérifier que cela fonctionne sur les plates-formes que vous testez (pour identifier les échecs de l'automatisation API
par rapport à ceux de l'application).
Une autre considération est de savoir comment gérer la localisation. Notez également que les noms de Minimize/Maximize/... sont également localisés et peuvent être dans une langue différente de celle de l'application (paramètres système par rapport aux paramètres utilisateur)!
En pseudo-code, un programme MSAA
pour minimiser une application ressemblerait à quelque chose comme:
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()
Les articles accessibles MSAA
sont stockés sous forme de paires (object: IAccessible, childId: int)
. Il faut faire attention ici pour que les appels soient corrects (par exemple, get_accChildCount
n'utilise que la variable IAccessible
; si childId
n'est pas 0, vous devez renvoyer 0 au lieu d'appeler get_accChildCount
)!
Les appels IAccessible
peuvent renvoyer différents codes d'erreur pour indiquer "this object does not support this property"
- par exemple. DISP_E_MEMBERNOTFOUND
ou E_NOTIMPL
.
Soyez conscient de l'état de la fenêtre. Si la fenêtre est agrandie puis minimisée, la restauration la restaure à son état maximisé. Vous devez donc la restaurer à nouveau pour la ramener à l'état normal/fenêtré.
Les API MSAA
et UIA
ne prennent pas en charge les clics du bouton droit de la souris. Vous devez donc utiliser un Win32 API
pour le déclencher.
Le modèle MSAA
ne prend pas en charge les informations de hiérarchie hiérarchique - il les affiche sous forme de liste simple. Par contre, UIA
énumérera uniquement les éléments visibles, de sorte que vous ne pourrez pas accéder aux éléments de l’arborescence UIA
qui sont réduits.
Vous pouvez essayer Automa .
C'est un outil d'automatisation de l'interface graphique Windows écrit en Python qui est très simple à utiliser. Par exemple, vous pouvez effectuer les opérations suivantes:
# 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)
La liste complète des commandes disponibles peut être trouvée ici .
Déni de responsabilité: Je suis l'un des développeurs d'Automa.
Vous pouvez utiliser PyAutoGUI qui fournit une méthode Python multi-plateforme pour automatiser l’interface graphique.
Voici un code simple pour déplacer la souris au milieu de l'écran:
import pyautogui
screenWidth, screenHeight = pyautogui.size()
pyautogui.moveTo(screenWidth / 2, screenHeight / 2)
Question connexe: Contrôle de la souris avec Python .
Exemple:
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
Il fournit des boîtes de message de style JavaScript.
Et autre.
Pour d'autres suggestions, consultez: Bibliothèque d'automatisation de l'interface graphique Python pour la simulation de l'interaction utilisateur dans les applications .
Vous pouvez verrouiller votre PC (Win + L)
import ctypes
ctypes.windll.user32.LockWorkStation()
Vous pouvez vider votre corbeille
import winshell
winshell.recycle_bin().empty(confirm=False, show_progress=False, sound=True)