web-dev-qa-db-fra.com

Piloter un programme graphique Windows à partir d'un script

Je dois utiliser un package de simulation Windows pour effectuer une tâche répétitive avec des options légèrement différentes à chaque fois. 

Puisque je déteste les clics répétitifs, en raison de la paresse et de la quantité d’erreurs qu’un humain introduit, je voudrais piloter ce programme automatiquement. Le programme en question ne supporte pas les scripts, il n'y a pas d'API, pas de COM, nada, nyet, nravin. Autant que je sache, la seule façon de gérer ce programme automatiquement est d'imiter un humain (c'est-à-dire des macros de clavier et de souris.)

Je connais AutoHotKey, mais je ne pense pas qu’il fasse ce que je veux. (Ou il peut faire ce que je veux, mais son langage de script est horrible.)

Les exigences sont:

  • Doit permettre des délais entre les actions ou la détection d'événements pour déclencher des actions.

    L'exécution des simulations peut prendre jusqu'à dix minutes. Le pilote de l'interface graphique doit donc attendre la fin de la simulation avant de commencer une nouvelle.

    Une façon de le faire serait d’attendre dix minutes et d’espérer que la simulation sera terminée. Une autre solution consiste à faire en sorte qu’elle soit pilotée par les événements, c’est-à-dire que le dialogue "Simulation en cours ..." disparaisse et soit remplacé par un dialogue "Simulation terminée".

  • Doit permettre la composition de la saisie au clavier complexe.

    Certaines des entrées au clavier requises sont différentes pour chaque exécution de simulation. Par exemple, la description de la simulation peut prendre le format [Project name][Scenario name][Option 1][Option 2]... et doit être entrée pour chaque simulation.

    Je suis conscient que AutoHotKey permet un niveau de base de personnalisation des entrées, mais ma lecture occasionnelle de la documentation donne au langage de script une apparence d’horreur.

  • Ceci est pour le travail, donc toute solution doit être libre pour un usage commercial.

J'accepterai toute solution répondant aux critères ci-dessus, mais j'ai une préférence strong pour quelque chose que je peux conduire à partir de Python. Cependant, j'accepterais également des outils de test d'interface graphique automatisés que je pourrais personnaliser pour faire ce que je veux - éventuellement une interface graphique Win32 équivalente à Selenium pour les navigateurs? - des enregistreurs de macros à clavier générant des sorties personnalisées ou tout ce qui fonctionne.

21
Li-aung Yip

Donnez à Autohotkey un autre regard, selon vos exigences, il semble approprié pour le travail.

Vous pouvez également vérifier UI Automation auprès de Microsoft: http://msdn.Microsoft.com/en-us/library/ms747327.aspx et aussi white: http://white.codeplex.com/

5
Cilvic

Sikuli est une technologie visuelle permettant d’automatiser et de tester les utilisateurs graphiques interfaces (GUI) utilisant des images (screenshots). Sikuli comprend Sikuli Script, une API de script visuel pour Jython et Sikuli IDE, un fichier environnement de développement intégré pour l'écriture de scripts visuels avec captures d'écran facilement. Sikuli Script automatise tout ce que vous voyez sur le écran sans prise en charge de l'API interne. Vous pouvez programmer contrôler une page Web, une application de bureau Windows/Linux/Mac OS X ou même une application iPhone ou Android fonctionnant dans un simulateur ou via VNC.

Regardez Sikuli , cela a fonctionné pour moi.

11
Adam

Jetez un oeil à Automa - il est écrit en Python. Il peut être utilisé soit en tant qu'outil autonome, soit en tant que bibliothèque Python dans vos propres scripts:

from automa.api import *

Il permet d'automatiser n'importe quelle application Windows à l'aide de commandes telles que cliquer, appuyer, écrire, etc.

Des exemples de scripts d'automatisation sont disponibles à l'adresse http://www.getautoma.com/blog/category/ui-automation-examples

Disclaimer: Je suis l'un des développeurs d'Automa.

6
Tytus

Regardez ceci https://pywinauto.github.io/

Vous pouvez utiliser le script python lui-même pour contrôler votre application Windows. 

L'avantage est:

  • pas besoin d'apprendre une nouvelle langue/syntaxe
  • s'intègre facilement à d'autres scripts existants
4
Hetal

Vous pouvez utiliser bibliothèque PyAutoGUI pour Python, qui fonctionne sous Windows, macOS et Linux.

Doit permettre des délais entre les actions.

Exemple à taper avec une pause d’un quart de seconde entre chaque touche:

import pyautogui
pyautogui.typewrite('Hello world!', interval=0.25)

Voici l'exemple pour configurer une pause de 2,5 secondes après chaque appel PyAutoGUI:

pyautogui.PAUSE = 2.5

Doit permettre la composition de la saisie au clavier complexe.

Checkout fonctions de contrôle du clavier où vous pouvez utiliser pyautogui.typewrite pour taper quelque chose. Vous pouvez transmettre des variables pour permettre une saisie au clavier complexe.

Détection d'événement pour déclencher des actions.

Vous pouvez utiliser fonctions de localisation pour rechercher visuellement quelque chose sur l’écran et créer la condition en fonction d’une boucle simple.

La solution doit être gratuite pour un usage commercial.

Il est sous licence BSD, ce qui permet une utilisation commerciale.


Voir également:

1
kenorb

RIATest n'utilise pas Python, mais convient parfaitement. C'est comme Selenium mais pour Win32 et web. 

RIATest utilise l'API Windows UI Automation et peut piloter toute application Windows exposant correctement son interface graphique à UI Automation (qui inclut toutes les applications natives et .NET).

_ {Avertissement: je travaille pour Cogitek, la société RIATest.} _

0
TN.