Outils pour utilisateurs

Outils du site


issue151:python

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentes Révision précédente
Prochaine révision
Révision précédente
issue151:python [2019/12/07 10:11]
auntiee
issue151:python [2019/12/07 16:05]
andre_domenech
Ligne 15: Ligne 15:
 I quickly put down the coffee cup and grabbed my mouse. I called up a web search for a python library to automate mouse movements, clicks, double-clicks,​ and the like. I knew there had to be something that would be quick to learn and would be something that I could use as the basis for an article. Sure enough, I found it.** I quickly put down the coffee cup and grabbed my mouse. I called up a web search for a python library to automate mouse movements, clicks, double-clicks,​ and the like. I knew there had to be something that would be quick to learn and would be something that I could use as the basis for an article. Sure enough, I found it.**
  
-Mon esprit commençait à s'​évader de ma liste « à-faire » pour essayer de penser à une façon de ne pas oublier les étapes de la fonctionnalité ancienne, améliorant mon éfficacité ​non seulement pour moi, mais pour Don et les utilisateurs de Page. Mon esprit partit bien haut dans un brouillard dense et j'ai commencé à sentir les prémices d'une idée qui commençait à prendre forme dans ce grand espace vide que j'​appelle mon cerveau. Quelque chose pour automatiser le processus de test des nouvelles pré-versions de Page ! OUI ! Mais, attendez. Comment pourrais-je faire cela ?+Mon esprit commençait à s'​évader de ma liste « à-faire » pour essayer de penser à une façon de ne pas oublier les étapes de la fonctionnalité ancienne, améliorant mon efficacité ​non seulement pour moi, mais pour Don et les utilisateurs de Page. Mon esprit partit bien haut dans un brouillard dense et j'ai commencé à sentir les prémices d'une idée qui commençait à prendre forme dans ce grand espace vide que j'​appelle mon cerveau. Quelque chose pour automatiser le processus de test des nouvelles pré-versions de Page ! OUI ! Mais, attendez. Comment pourrais-je faire cela ?
  
-J'ai rapidement bu ma tasse de café et attrapé ma souris. J'ai lancé ​un recherche sur le Web pour une bibliothèque en Python pour l'​automatisation des mouvements de la souris, les clics, double-clics,​ et consorts. Je savais qu'il devait y avoir quelque chose qui serait rapide à apprendre et que je pourrais utiliser comme base pour mon article. Et bien sûr, je l'ai trouvé.+J'ai rapidement bu ma tasse de café et attrapé ma souris. J'ai lancé ​une recherche sur le Web pour une bibliothèque en Python pour l'​automatisation des mouvements de la souris, les clics, double-clics,​ et consorts. Je savais qu'il devait y avoir quelque chose qui serait rapide à apprendre et que je pourrais utiliser comme base pour mon article. Et bien sûr, je l'ai trouvé.
  
 **Amongst all the other links appeared a link to a chapter of a book by one of my all time favorite authors, Al Sweigart. I've reviewed a few of his books for Full Circle magazine. He's written some of the best books on Python, and has a few on the internet that you can read totally free on-line. One of them is a book called "​Automate The Boring Stuff With Python"​. It's published by No Starch Press, and the link to the book is https://​automatetheboringstuff.com/#​toc. By the way, he has a new Second Edition of the book coming out just about any time. You REALLY should buy this book! Anyway, chapter 18 of the book is titled "​Controlling the Keyboard and Mouse with GUI Automation"​ (https://​automatetheboringstuff.com/​chapter18/​). It deals with exactly what I was looking for.** **Amongst all the other links appeared a link to a chapter of a book by one of my all time favorite authors, Al Sweigart. I've reviewed a few of his books for Full Circle magazine. He's written some of the best books on Python, and has a few on the internet that you can read totally free on-line. One of them is a book called "​Automate The Boring Stuff With Python"​. It's published by No Starch Press, and the link to the book is https://​automatetheboringstuff.com/#​toc. By the way, he has a new Second Edition of the book coming out just about any time. You REALLY should buy this book! Anyway, chapter 18 of the book is titled "​Controlling the Keyboard and Mouse with GUI Automation"​ (https://​automatetheboringstuff.com/​chapter18/​). It deals with exactly what I was looking for.**
  
-Parmi tous les autres liens, est apparu un lien vers un chapitre d'un livre d'un de mes auteurs favoris de tous les temps, Al Sweigart. J'ai fait la critique de quelques-uns de ses livres pour le Full Circle Magazine. Il a écrit certains des meilleurs livres sur Python et quelques-uns d'​entre eux peuvent être lus en ligne gratuitement. Parmi eux, un livre appelé ​ « Automate The Boring Stuff With Python » (Automatiser les choses ​fatidieuses ​avec Python). Il est publié par No Starch Press, et le lien vers le livre est https://​automatetheboringstuff.com/#​toc. D'​ailleurs,​ une nouvelle ​Seconde Édition ​du livre va sortir à tout moment. Vous devriez VRAIMENT acheter ce livre ! De toute façon, le chapitre 18 du livre est intitulé « Controlling the Keyboard and Mouse with GUI Automation » (Piloter le clavier et la souris en automatisant l'​interface graphique de l'​utilisateur (GUI)) - https://​automatetheboringstuff.com/​chapter18/​). Il parle exactement de ce que nous cherchons.+Parmi tous les autres liens, ​en est apparu un vers un chapitre d'un livre d'un de mes auteurs favoris de tous les temps, Al Sweigart. J'ai fait la critique de quelques-uns de ses livres pour le Full Circle Magazine. Il a écrit certains des meilleurs livres sur Python et quelques-uns d'​entre eux peuvent être lus en ligne gratuitement. Parmi eux, un livre appelé ​ « Automate The Boring Stuff With Python » (Automatiser les choses ​fastidieuses ​avec Python). Il est publié par No Starch Press, et le lien vers le livre est https://​automatetheboringstuff.com/#​toc. D'​ailleurs,​ une nouvelle ​seconde édition ​du livre va sortir à peu près n'​importe quand. Vous devriez VRAIMENT acheter ce livre ! De toute façon, le chapitre 18 du livre est intitulé « Controlling the Keyboard and Mouse with GUI Automation » (Piloter le clavier et la souris en automatisant l'​interface graphique de l'​utilisateur (GUI)) - https://​automatetheboringstuff.com/​chapter18/​). Il parle exactement de ce que nous cherchons.
  
 **I'm going to, as I often do, distill the essence of Mr. Sweigart'​s chapter down and show you how to use the information that I gleaned from it. We'll be using a library called '​pyautogui'​. While the name might seem a bit misleading at first glance, if you read the chapter you'll see that it perfectly fits what it actually can do. Let's get started. **I'm going to, as I often do, distill the essence of Mr. Sweigart'​s chapter down and show you how to use the information that I gleaned from it. We'll be using a library called '​pyautogui'​. While the name might seem a bit misleading at first glance, if you read the chapter you'll see that it perfectly fits what it actually can do. Let's get started.
Ligne 29: Ligne 29:
 pip3 install python3-xlib** pip3 install python3-xlib**
  
-Je vais, comme je le fais souvent, vous distiller l'​essentiel du chapitre de M. Sweigart et vous montrer comment utiliser les informations que j'en tire. Nous utiliserons la bibliothèque appelée « pyautogui ». Alors que le nom pourrait sembler un peu trompeur à première vuesi vous lisez le chapitre, vous verrez qu'il correspond parfaitement à ce qu'il peut faire. Allons-y.+Je vais, comme je le fais souvent, vous distiller l'​essentiel du chapitre de M. Sweigart et vous montrer comment utiliser les informations que j'en tire. Nous utiliserons la bibliothèque appelée « pyautogui ». Alors que le nom pourrait sembler un peu trompeur à première vue si vous lisez le chapitre, vous verrez qu'il correspond parfaitement à ce qu'il peut faire. Allons-y.
  
 La première chose que nous devons faire est de l'​installer ainsi que quelques dépendances. Je vais vous donner les indications telles qu'​elles apparaissent dans le chapitre, et seulement celles pour Linux ; si vous voulez installer la bibliothèque sur Windows ou Mac, vous pourrez trouvez les instructions dans l'​article. Ainsi, comme première étape, nous avons besoin d'​utiliser pip pour installer la bibliothèque python3-xlib. La première chose que nous devons faire est de l'​installer ainsi que quelques dépendances. Je vais vous donner les indications telles qu'​elles apparaissent dans le chapitre, et seulement celles pour Linux ; si vous voulez installer la bibliothèque sur Windows ou Mac, vous pourrez trouvez les instructions dans l'​article. Ainsi, comme première étape, nous avons besoin d'​utiliser pip pour installer la bibliothèque python3-xlib.
Ligne 55: Ligne 55:
 Let's do some fun things** Let's do some fun things**
  
-Ensuite, vos devez utiliser apt-get pour installer quelques paquets supplémentaires...+Ensuite, vos devez utiliser apt-get pour installer quelques paquets supplémentaires ​:
  
 sudo apt-get install scrot python3-tk python3-dev sudo apt-get install scrot python3-tk python3-dev
Ligne 61: Ligne 61:
 Scrot est un programme qu'​utilise pyautogui pour prendre des copies d'​écran. Vous le verrez à l'​œuvre un peu tard dans cet article. Scrot est un programme qu'​utilise pyautogui pour prendre des copies d'​écran. Vous le verrez à l'​œuvre un peu tard dans cet article.
  
-Enfin, vous pouvez installer pyautogui en utilisant pip...+Enfin, vous pouvez installer pyautogui en utilisant pip :
  
 pip3 install pyautogui pip3 install pyautogui
  
-Si tout s'est bien déroulé, vous devriez voir l'​invite classique...+Si tout s'est bien déroulé, vous devriez voir l'​invite classique ​:
  
 >>>​ >>>​
Ligne 97: Ligne 97:
 pyautogui.size() pyautogui.size()
  
-Vous devriez voir revenir la réponse et elle devrait corespondre à la taille de votre écran. Dans mon cas, c'est...+Vous devriez voir revenir la réponse et elle devrait corespondre à la taille de votre écran. Dans mon cas, c'​est ​:
  
 Size(width=1920,​ height=1080) # Taille (largeur=1920,​ hauteur=1080) Size(width=1920,​ height=1080) # Taille (largeur=1920,​ hauteur=1080)
  
-Maintenant, nous pouvons affecter ces valeurs à des variables...+Maintenant, nous pouvons affecter ces valeurs à des variables ​:
  
 swidth, sheight = pyautogui.size() swidth, sheight = pyautogui.size()
Ligne 107: Ligne 107:
 print(f"​Screen width: {swidth} and height {sheight}"​) print(f"​Screen width: {swidth} and height {sheight}"​)
  
-Et python nous retourne...+Et python nous retourne ​:
  
 Screen width: 1920 and height 1080 # Écran largeur 1920 et hauteur 1080 Screen width: 1920 and height 1080 # Écran largeur 1920 et hauteur 1080
Ligne 157: Ligne 157:
 Maintenant, faisons quelque chose d'​encore plus amusant. J'ai un dossier sur mon Bureau qui s'​appelle Cleanup (Ménage). Plus souvent que je ne veux l'​admettre,​ je sauvegarde des choses sur mon bureau pour m'en souvenir. L'​idée est que je dispose d'un rappel constant alors que je travaille sur une chose ou que je m'​occupe de quelque chose. Un jour ou l'​autre,​ je veux l'​enlever du bureau et le placer ailleurs pour un usage ultérieur. Je néglige souvent de le déplacer et, dans un effort pour que ce soit plus propre et plus logique, j'ai créé le dossier « cleanup ». Maintenant, faisons quelque chose d'​encore plus amusant. J'ai un dossier sur mon Bureau qui s'​appelle Cleanup (Ménage). Plus souvent que je ne veux l'​admettre,​ je sauvegarde des choses sur mon bureau pour m'en souvenir. L'​idée est que je dispose d'un rappel constant alors que je travaille sur une chose ou que je m'​occupe de quelque chose. Un jour ou l'​autre,​ je veux l'​enlever du bureau et le placer ailleurs pour un usage ultérieur. Je néglige souvent de le déplacer et, dans un effort pour que ce soit plus propre et plus logique, j'ai créé le dossier « cleanup ».
  
-Une des merveilleuses choses que fait PyAutoGUI, c'est qu'il vous autorise à envoyer des clics et des doubles-clics (ainsi que d'​autres ​évènements ​de la souris) vers une position x,y de l'​écran. Mais comment dites-vous à PyAutoGUI où se trouve un élément précis, si vous ne connaissez pas les coordonnées x,y ? L'un des outils qu'on trouve dans PyAutoGUI donne la possibilité de lui fournir une image de quelque chose qui devrait être sur l'​écran,​ pour qu'il trouve sa position.+Une des merveilleuses choses que fait PyAutoGUI, c'est qu'il vous autorise à envoyer des clics et des doubles-clics (ainsi que d'​autres ​événements ​de la souris) vers une position x,y de l'​écran. Mais comment dites-vous à PyAutoGUI où se trouve un élément précis, si vous ne connaissez pas les coordonnées x,y ? L'un des outils qu'on trouve dans PyAutoGUI donne la possibilité de lui fournir une image de quelque chose qui devrait être sur l'​écran,​ pour qu'il trouve sa position.
  
 **I used Shutter, a screen capture program for Linux, to grab a section of my desktop and save it as a .png file. In this case, it was the icon of the cleanup folder... **I used Shutter, a screen capture program for Linux, to grab a section of my desktop and save it as a .png file. In this case, it was the icon of the cleanup folder...
Ligne 181: Ligne 181:
 Notez aussi que j'ai donné le chemin complet vers le fichier. Notez aussi que j'ai donné le chemin complet vers le fichier.
  
-En une seconde environ, j'ai eu la réponse. Si la méthode locateOnScreen trouve la cible, elle retourne ensuite les x, y, largeur et hauteur sur l'​écran. Sinon, elle renvoie None (Aucun)...+En une seconde environ, j'ai eu la réponse. Si la méthode locateOnScreen trouve la cible, elle retourne ensuite les x, y, largeur et hauteur sur l'​écran. Sinon, elle renvoie None (Aucun) ​:
  
 print (bpos) print (bpos)
Ligne 198: Ligne 198:
 Next, I used Shutter again to grab a section of the folder window that would be fairly unique to it. I determined that I would need to use a portion of the title bar. I had to make sure that the folder window was not highlighted,​ since I couldn’t be sure the folder would be highlighted when I asked PyAutoGUI to find it.** Next, I used Shutter again to grab a section of the folder window that would be fairly unique to it. I determined that I would need to use a portion of the title bar. I had to make sure that the folder window was not highlighted,​ since I couldn’t be sure the folder would be highlighted when I asked PyAutoGUI to find it.**
  
-Ainsi, je sais que la position de l'​icône du dossier commence à 83.456 et a un largeur de 69 et une hauteur de 72 pixels, ce qui est aussi la taille de l'​image que j'​ai ​utilisé.+Ainsi, je sais que la position de l'​icône du dossier commence à 83.456 et a un largeur de 69 et une hauteur de 72 pixels, ce qui est aussi la taille de l'​image que j'​ai ​utilisée.
  
-Enfin, je dit à PyAutoGUI d'​envoyer un double-clic à un emplacement à l'​intérieur de la boîte englobante.+Enfin, je dis à PyAutoGUI d'​envoyer un double-clic à un emplacement à l'​intérieur de la boîte englobante ​:
  
 pyautogui.doubleClick(105,​480) pyautogui.doubleClick(105,​480)
Ligne 222: Ligne 222:
 >>>​ ** >>>​ **
  
-Ensuite, j'ai, à nouveau, utilisé locateOnScreen avec la nouvelle image.+Ensuite, j'ai, à nouveau, utilisé locateOnScreen avec la nouvelle image :
  
 >>>​ bpos = pyautogui.locateOnScreen("/​home/​greg/​Desktop/​poc/​autogui/​cusection.png"​) >>>​ bpos = pyautogui.locateOnScreen("/​home/​greg/​Desktop/​poc/​autogui/​cusection.png"​)
Ligne 230: Ligne 230:
 Box(left=908,​ top=89, width=86, height=46) Box(left=908,​ top=89, width=86, height=46)
  
-Maintenant que je savais où se situe la barre de titre de la fenêtre, je voulais essayer de déplacer un peu la fenêtre en utilisant la méthode .drag. Bien sûr, j'​avais besoin de déplacer le curseur de la souris un peu vers le bas, car, comme vous pouvez le voir dans l'​image ci-dessus, j'ai capturé un peu de l'​arrière-plan du bureau quand j'ai réalisé ma capture d'​image.+Maintenant que je savais où se situe la barre de titre de la fenêtre, je voulais essayer de déplacer un peu la fenêtre en utilisant la méthode .drag. Bien sûr, j'​avais besoin de déplacer le curseur de la souris un peu vers le bas, car, comme vous pouvez le voir dans l'​image ci-dessus, j'ai capturé un peu de l'​arrière-plan du bureau quand j'ai réalisé ma capture d'​image ​:
  
 >>>​ pyautogui.moveTo(908,​100,​ duration=0.75);​ pyautogui.drag(50,​0,​0.75,​button="​left"​) >>>​ pyautogui.moveTo(908,​100,​ duration=0.75);​ pyautogui.drag(50,​0,​0.75,​button="​left"​)
Ligne 244: Ligne 244:
 Until next time, keep coding!** Until next time, keep coding!**
  
-Et bien sûr, la fenêtre s'​est ​déplacé ​lentement vers la droite. Pour faciliter à coup sûr un ensemble d'​actions ininterrompu,​ j'ai utilisé un point-virgule pour séparer les deux déclarations puisque j'​étais dans le shell interactif. Si (et seulement si) j'​avais créé ceci dans un IDE, je me serais assuré que les deux déclarations étaient sur des lignes distinctes.+Et bien sûr, la fenêtre s'​est ​déplacée ​lentement vers la droite. Pour faciliter à coup sûr un ensemble d'​actions ininterrompu,​ j'ai utilisé un point-virgule pour séparer les deux déclarations puisque j'​étais dans le shell interactif. Si (et seulement si) j'​avais créé ceci dans un IDE, je me serais assuré que les deux déclarations étaient sur des lignes distinctes.
  
-Ainsi, j'ai été capable d'​apprendre rapidement (et de vous les enseigner) ​les bases de PyAutoGUI ​et de commencer à formuler les débuts de mon programme de tests automatiques. Je pourrai créer un script, dans un script Python, qui pourra créer un GUI Page vide, redimmensionner et déplacer la partie principale, ajouter des gadgets, paramétrer des attributs et plus encore.+Ainsi, j'ai été capable d'​apprendre rapidement ​les bases de PyAutoGUI ​(et de vous les enseigner) et de commencer à formuler les débuts de mon programme de tests automatiques. Je pourrai créer un script, dans un script Python, qui pourra créer un GUI Page vide, redimmensionner et déplacer la partie principale, ajouter des gadgets, paramétrer des attributs et plus encore.
  
 Cet article avait pour objectif d'​aiguiser votre appétit sur les possibilités que peut vous fournir PyAutoGUI. Il y a BEAUCOUP, BEAUCOUP d'​autres choses faisables, beaucoup trop pour même les effleurer ici. Vous pouvez trouver la documentation complète de PyAutoGui sur https://​pyautogui.readthedocs.io/​en/​latest/​index.html Cet article avait pour objectif d'​aiguiser votre appétit sur les possibilités que peut vous fournir PyAutoGUI. Il y a BEAUCOUP, BEAUCOUP d'​autres choses faisables, beaucoup trop pour même les effleurer ici. Vous pouvez trouver la documentation complète de PyAutoGui sur https://​pyautogui.readthedocs.io/​en/​latest/​index.html
issue151/python.txt · Dernière modification: 2019/12/07 16:05 par andre_domenech