Quel langage pour automatiser des tâches dans une application - Divers - Programmation
Marsh Posté le 16-03-2017 à 22:32:02
AutoIt est bien pour automatiser des tâches ou piloter des applis sous Windows.
Marsh Posté le 16-03-2017 à 23:14:12
Oublié de préciser : je suis pas administrateur système sur mon poste. Du coup, je ne peux pas installer de nouvelles apps.
Mais j'imagine que ca reste faisable via un petit script
Tain, c'est compliqué quand on n'y connait rien
Marsh Posté le 17-03-2017 à 09:40:58
Peut-être possible , si c'est pas désactivé, avec du VBS ( utiliser sendkeys)
Marsh Posté le 17-03-2017 à 11:15:38
Ben tu prends la version portable d'AutoIt : https://www.portablefreeware.com/?id=50
Marsh Posté le 18-03-2017 à 09:56:59
rufo a écrit : Ben tu prends la version portable d'AutoIt : https://www.portablefreeware.com/?id=50 |
Bah ouais la version portable, j'suis vraiment teubé.
J'essaie de capter le fonctionnement d'AutoIt. Merci !
Cela étant, j'ai fait une découverte intéressante hier : l'application en question permet d'enregistrer/executer des macros.
Du coup, j'ai enregistré ce que je tape habituellement.
Ca ressemble à ça :
Citation :
|
Question conne encore, mais c'est quel langage cette macro ? Là, mon exemple, c'est le cas de figure où je ne rentre qu'un seul numéro, le 12345678. Or, mon souci est que je ne rentre pas toujours le même nombre de numéro.
Je voudrais adapter ma macro pour qu'elle fonctionne quelque soit le nombre de numéro que j'ai à rentrer.
Marsh Posté le 18-03-2017 à 18:05:43
C'est du VBS.
Ou se trouve le numéro que tu as à rentrer?
Marsh Posté le 19-03-2017 à 06:29:23
Dans une autre application. Une application interne dérivée d'internet Explorer j'ai l'impression.
Le client m'envoie une liste d'opérations dans un fichier image. A partir du numéro de l'opération je vais chercher sa référence dans l'application interne. Et ce que j'appelle le numéro, c'est cette référence.
Le souci étant que le client ne m'envoie pas toujours le même nombre d'opérations.
Marsh Posté le 19-03-2017 à 14:32:47
Je te déconseille le mode d'enregistrement. Ca fait pas du code propre. Après, si ton nb à rentrer est variable, t'as plusieurs façons de le renseigner : via une petite IHM que tu te construits avec AutoIt, via une valeur stockée dans un fichier texte ou une clé de base de registre, voire une valeur stockée dans un champ d'une IHM d'application ouverte au moment de l'exécution de la macro.
A noter qu'AutoIt te permet, via son inspecteur d'objets, de récupérer les ID des contrôles qui composent une IHM d'appli. Tu peux alors t'amuser à afficher/masquer des éléments de cette IHM
Marsh Posté le 19-03-2017 à 16:18:18
La difficultés va être d'interpréter l'image.
Via OCR, mais ça ne va pas être facile.
Marsh Posté le 20-03-2017 à 09:45:48
Ah zut, j'avais pas vu que c'était une image. Oui, effectivement, ça va être chaud. A voir si le client ne peut pas plutôt envoyer un fichier CSV.
Marsh Posté le 20-03-2017 à 17:59:30
Ouais malheureusement, on n'est pas autorisés à recevoir autre chose qu'un fichier image de la part du client . Je connaissais pas le principe de l'OCR. J'ai testé ce midi en utilisant un site (basé sur abbyy). Ça m'a l'air de fonctionner.
Dans le même temps, je lis un tuto sur autoit. Ça va me prendre du temps, mais ça m'a l'air très utile.
Pour l'instant, je pige pas comment faire pour qu'un script s'applique à une application en particulier voire à plusieurs. A voir.
Je lis le tuto sur openclassrooms.com
Marsh Posté le 20-03-2017 à 20:14:36
Ca va fonctionner par l'envoi de raccourcis clavier. Tu rends actif la fenêtre de l'apli à piloter et tu lui envoies des touches clavier (genre pour ouvrir un menu, rentrer une valeur dans un champ... La touche TAB va être ton amie Tu vas découvrir que la touche = permet de cocher des cases... Bref, tu va voir qu'on peut piloter un PC et des applis sans souris.
Marsh Posté le 28-03-2017 à 22:57:50
Concernant tesseract pour l'OCR, c'est possible de l'installer sans être admin ?
Marsh Posté le 03-04-2017 à 22:15:57
Je reviens vers vous sur un aspect qui me bloque.
La référence que je souhaite obtenir se trouve dans une info-bulle qui n'apparait qu'au survol d'un élément de la fenêtre sur mon application dérivée d'internet explorer.
Et en plus, la référence n'est qu'une partie de ce qui est affiché dans l'info-bulle.
Donc je me suis dit qu'il fallait passer par le code source de la page.
Code source où j'obtiens la référence dans une ligne du type :
<span id="sippComponent198584_41_valeur" class="prop_val">17032939201300007483</span> |
Donc je me suis dit, j'utilise la fonction _stringbetween sous la forme :
$array = _StringBetween($Texte, "sippComponent198584_41_valeur" class="prop_val">", "</span>" ) $reference = _ArrayToString($array) |
Sauf que ca me retourne une erreur sur la ligne du stringbetween. Donc je me plante quelque part. Les guillemets posent problème ?
D'autre part, j'ai l'impression que je pourrais me servir de la fonction _IEGetObjById sauf que je ne comprends pas du tout comment l'utiliser. Comment je spécifie que c'est la page active qui est concernée
Marsh Posté le 03-04-2017 à 22:27:35
Au pif:
Code :
|
Marsh Posté le 03-04-2017 à 22:55:58
Ok, J'obtiens un message d'erreur en utilisant ta technique . Par contre, avec
$array = _StringBetween($Texte, 'sippComponent198584_41_valeur" class="prop_val">', '</span>' ) |
Ca a l'air de fonctionner. Affaire à suivre
Marsh Posté le 03-04-2017 à 22:59:21
Possible le message d'erreur, il y a différentes façons de faire selon les logiciels/languages/... Utiliser des "simple quotes" c'est parfois une solution aussi.
edit: mot clé pour une eventuelle recherche: (anglais) escape / escaping quotes in $logiciel (ou ce genre de truc)
Marsh Posté le 05-04-2017 à 18:01:30
Là, je suis bien embêté. je voulais retrouver ma référence avec l'id sippComponent198584_41_valeur.
Sauf que j'ai testé sur plusieurs exemples et l'id change à chaque fois sur la page source. Un coup c'est
|
Un coup :
<span id="sippComponent897564_41_valeur" class="prop_val">17032939201300007546</span> |
Je pensais naïvement que le numéro était fixe. Du coup, je ne sais pas trop comment capturer cette référence.
Elle n'apparait qu'à cet endroit sur ma page source. Cela dit, elle commence toujours par 17 et contient 20 caractères. Et se trouve toujours sur la même ligne
Mais serait-ce optimal comme critère
Marsh Posté le 05-04-2017 à 18:11:32
Le moteur de recherche me dit que AutoIt comprend les RegEx: https://www.autoitscript.com/autoit [...] RegExp.htm
Je connais les RegEx (enfin les bases ) mais pas ce logiciel, je ne peux donc pas te dire comment faire exactement par contre...
Ah oui, kesako "RegEx"? --> https://fr.wikipedia.org/wiki/Expression_rationnelle C'est un truc assez complexe dans son intégralité mais simple sur le principe. P.ex. ton id peut se décrire sippComponent\d{6}_41_valeur, \d représente un chiffre et {6} veut dire qu'il en faut 6 exactement.
Marsh Posté le 06-04-2017 à 00:03:24
Excellent
Du coup, la partie de code suivante est-elle correcte ?
#include <File.au3> |
Marsh Posté le 06-04-2017 à 10:56:16
A priori oui, mais ça serait bien de déclarer les variables en local.
Marsh Posté le 06-04-2017 à 18:25:22
Je pige pas. Avec ce code
LOCAL $invalid = _IEGetObjById("[ACTIVE]", "sippComponent476491_41_valeur" ) |
J'obtiens un zéro dans mon fichier texte. J'ai vérifié dans mon test, l'id est bien sippComponent476491_41_valeur.
Marsh Posté le 06-04-2017 à 19:27:55
Je me demande si ce n'est pas lié.
Y a un détail que je ne comprends pas.
Le raccourci clavier ctrl u n'affiche pas la même chose que le lien dans le menu contextuel "afficher la source".
La ligne où se trouve ma référence ne se voit pas en utilisant le raccourci clavier
Marsh Posté le 08-04-2017 à 20:25:16
Madadayo a écrit : Je pige pas. Avec ce code
|
Sans connaitre AutoIt, l'appel de _IEGetObjById me paraît déjà douteux. Dans la doc c'est indiqué que le premier paramètre doit être un Object variable of an InternetExplorer.Application, Window or Frame object, ce "[ACTIVE]" me paraît être autre chose non?
Marsh Posté le 08-04-2017 à 22:30:21
Effectivement, il faut créer un objet OLE d'IE : https://www.autoitscript.com/autoit [...] xample.htm
Marsh Posté le 13-04-2017 à 00:18:13
J'arrive pas à trouver comment spécifier que c'est la fenêtre active qui est concernée par _IEGetObjById
Les fonctions _IEcreate ou _IEnavigate, on part de rien, on lance une url.
Or, dans mon cas de figure, y a pas d'url (parce que l'application en question, dérivée d'IE, ne peut être utilisée que dans le cadre de mon application)
Si j'utilise l'url et une fonction du style iecreate, ça va me créer une nouvelle fenetre IE, je vais avoir un message d'erreur.
Bref donc faudrait que mon code ressemble à ça :
|
Et je vois pas comment nommer "la fenêtre active"
Marsh Posté le 13-04-2017 à 09:47:48
Si tu lis la doc comme je l'ai fait (cf mon post précédent), $oIE est un objet ! Donc va sur le lien que j'ai mis.
Marsh Posté le 16-03-2017 à 21:57:34
Salut,
J'utilise cette application au taf :
http://i.imgur.com/eVucN3t.png
Pour faire simple, l'application une fois ouverte, je tape :
Une série de chiffres > Entrée > Une série de chiffres > Entrée > 7 *tabulation* 78654 > Entrée > Une série de chiffres > Entrée > F10
Chaque jour, on me donne une liste de 10 numéros à rentrer de cette façon, un numéro correspondant à la dernière série de chiffres dans mon exemple.
Mon idée serait donc d'écrire un petit fichier où je n'aurais qu'à copier coller mes 10 numéros tous les jours.
Bon, ok obviously, j'suis un noob total en langage informatique. Et je demande pas à ce qu'on fasse le boulot pour moi.
Si vous pouviez simplement m'orienter vers le langage le plus simple pour faire cela, j'irai ensuite m'atteler à la compréhension de ce langage
---------------
Script Anti-HS