web-dev-qa-db-fra.com

Code Python pour automatiser les activités du bureau dans Windows

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.

17
stallion

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:

enter image description here

et les utiliser dans votre code:

enter image description here

14
sloth

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):

  1. API de fenêtres brutes - Get/SetCursorPos pour la souris, API HWND telles que GetFocus et GetForegroundWindow

  2. AutoIt - un langage de script d'automatisation: Appel de fonctions AutoIt en Python

  3. Microsoft Active Accessibility (MSAA)/WinEvent - une API permettant d'interroger une interface utilisateur via les API d'accessibilité de Win95.

  4. 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.

7
reece

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.

5
Tytus

Vous pouvez utiliser PyAutoGUI qui fournit une méthode Python multi-plateforme pour automatiser l’interface graphique.

Contrôle de la souris

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 .

Contrôle du clavier

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

Fonctions de boîte aux lettres

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 .

0
kenorb

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)
0
Abhinav Anand