[Automation] Manipulez la souris et le clavier avec Python

Quand souhaitez-vous automatiser les opérations de la souris / du clavier?

Avec Python, il est relativement facile d'exploiter directement des «fichiers» tels qu'Excel et des «applications» telles que des navigateurs Web.

Alors, avez-vous déjà voulu automatiser les opérations de la souris et la saisie au clavier? Vous pouvez penser cela.

Il existe de nombreuses applications et logiciels dans le monde. Si vous incluez des logiciels libres, il y a autant d'étoiles qu'il y en a. Comme prévu, Python ne prend pas en charge toutes ces applications. Il existe de nombreuses applications ** qui ne peuvent pas être utilisées directement avec Python.

Si vous souhaitez automatiser le travail dans une telle application, vous pouvez ** automatiser les opérations de la souris et du clavier **.

En premier lieu, lorsque les humains utilisent des applications, ils fonctionnent avec la souris et le clavier, donc si vous pouvez utiliser la souris et le clavier avec Python, vous devriez pouvoir tout faire fonctionner automatiquement en théorie (probablement).

Donc, dans cet article, je vais vous montrer comment utiliser la souris et le clavier en Python.

Automatiser avec l'interface graphique de PyAuto

Pour utiliser la souris et le clavier en Python, utilisez une bibliothèque appelée ** PyAutoGUI **.

pyautogui ne doit pas être installé par défaut dans Anaconda, donc installons-le d'abord avec la commande pip.

pip install pyautogui

Si vous pouvez l'installer avec succès, importez-le.

python


import pyautogui

Fonctionnement de la souris

Cliquez sur

Cliquez avec le bouton gauche de la souris avec pyautogui.click ().

À ce stade, la question est de savoir où cliquer, mais vous pouvez spécifier la position du clic avec les trois modèles suivants.

une fonction La description
pyautogui.click() Position actuelle du curseur de la sourisCliquez sur
pyautogui.click(x, y) Coordonnées sur le moniteur(x, y)Position deCliquez sur
pyautogui.click('button.png') Image du bouton sur lequel vous souhaitez cliquerPrécisez et cliquez ici

Je vais vous expliquer en détail.

pyautogui.click()

Cliquez sur la position actuelle du curseur de la souris. Dans ce cas, utilisez les commandes pyautogui.moveTo () et pyautogui.move () pour déplacer le curseur de la souris, qui sera décrit plus loin, pour déplacer d'abord le curseur de la souris vers la position désirée puis pyautogui.click (). Je pense que ce sera.

python


# (100, 200)Déplacez le curseur de la souris sur la position de
pyautogui.moveTo(100,200)

#Cliquez sur
pyautogui.click()

pyautogui.click(x, y)

Cliquez sur la position des coordonnées (x, y) sur le moniteur. Quelles sont ces coordonnées (x, y)? Par exemple, si votre moniteur a une résolution de 1920 x 1080, le coin supérieur gauche est (0,0) et le coin inférieur droit est (1919, 1079).

0,0       X increases -->
+---------------------------+
|                           | Y increases
|                           |     |
|   1920 x 1080 screen      |     |
|                           |     V
|                           |
|                           |
+---------------------------+ 1919, 1079

(Réimprimé à partir du document officiel de PyAutoGui<https://pyautogui.readthedocs.io/en/latest/mouse.html>)

Puisque vous pouvez obtenir les coordonnées du curseur actuel de la souris avec pyautogui.position () Il est facile de vérifier les coordonnées en déplaçant la souris vers la position sur laquelle vous voulez cliquer et en exécutant pyautogui.position ().

python


#Vérifiez les coordonnées de la position sur laquelle vous souhaitez cliquer
print(pyautogui.position())

Résultat d'exécution


Point(x=207, y=528)

python


#Cliquez sur les coordonnées ci-dessus
pyautogui.click(207, 528)

pyautogui.click('button.png')

Spécifiez l'image du bouton sur lequel vous souhaitez cliquer ('button.png') et cliquez dessus. Selon la taille et la position de la fenêtre de l'application, les coordonnées de l'endroit sur lequel vous souhaitez cliquer peuvent ne pas toujours être les mêmes.

Dans un tel cas, vous pouvez directement cliquer sur la position en spécifiant ** l'image du lieu (bouton etc.) sur lequel vous voulez cliquer **.

Supposons que vous souhaitiez cliquer sur le ** "☆" figure ** dans l'application Windows "Paint".

paint_star.png

Dans ce cas, découpez la partie ☆ en tant qu'image ('star.png').

star.png

python


#Cliquez sur la partie ☆
pyautogui.click('star.png')

La méthode de spécification de cette image est très pratique, mais dans certains cas, l'emplacement de l'image peut ne pas être reconnu. Il faut noter que ce n'est pas en 100 coups.

Type de clic

pyautogui.click () était un ** clic gauche normal **. Si vous souhaitez effectuer un autre clic, comme un clic droit ou un double-clic, remplacez-le par la fonction correspondante comme indiqué ci-dessous.

Type de clic une fonction
clic-droit pyautogui.rightClick()
Clic du milieu(Clic de roue) pyautogui.middleClick()
Double clic pyautogui.doubleClick()

Déplacer le curseur de la souris

Il existe deux types de mouvement du curseur de la souris. La différence est de savoir si la destination est spécifiée comme une position absolue ou une position relative.

une fonction La description
pyautogui.moveTo(x,y) Coordonnées sur le moniteur(x,y)Précisez et déplacez-vous là
pyautogui.move(x,y) X sur le côté de la position actuelle,Déplacer y verticalement

pyautogui.moveTo(x,y) Spécifiez les coordonnées (x, y) sur le moniteur et accédez-y. Peu importe où vous êtes.

Vous pouvez également spécifier ** time to move ** comme troisième argument de moveTo (). Si vous ne spécifiez pas une heure, elle se déplacera instantanément, mais vous pouvez vous déplacer lentement en spécifiant cette heure.

python


# (100,100)Déplacer vers la position
pyautogui.moveTo(100,100)

# (100,100)Déplacer vers la position de
pyautogui.moveTo(100,100,2)

pyautogui.move(x,y) Déplace x horizontalement et y verticalement à partir de la position actuelle du curseur de la souris. move () peut également spécifier le temps de déplacement.

python


#À partir de la position actuelle(100,100)Juste bouge
pyautogui.move(100,100)

#À partir de la position actuelle(100,100)Bougez simplement plus de 2 secondes
pyautogui.move(100,100,2)

traîne

Il existe deux types de glissement selon qu'il s'agit de la position absolue ou de la position relative de la destination. Pour le glissement, vous pouvez également spécifier ** time to drag ** dans le troisième argument.

une fonction La description
pyautogui.dragTo(x,y) Coordonnées sur le moniteur à partir de la position actuelle(x,y)Faites glisser vers
pyautogui.drag(x,y) X sur le côté de la position actuelle,Faites glisser y verticalement

python


#À partir de la position actuelle(100,100)Faites glisser vers la position de
pyautogui.dragTo(100,100,2)

Fonctionnement du clavier

Saisie de caractères

Utilisez pyautogui.write () pour saisir des caractères à partir du clavier.

En fait, cliquez sur la zone de texte, etc. où vous souhaitez saisir des caractères une fois, Je pense que vous devrez activer le curseur de caractère puis lancer pyautogui.write ().

python


#Cliquez à l'endroit où vous souhaitez saisir des caractères
pyautogui.click(100, 100)

#Saisie de caractères
pyautogui.write('Hello world!')

Si, pour une raison quelconque, vous ne voulez pas entrer à une vitesse très élevée, vous pouvez spécifier le nombre de secondes entre les entrées de caractères avec ʻinterval = xx` dans l'argument pour laisser un espace entre les entrées de caractères.

python


#0 pour chaque caractère.Entrée toutes les 25 secondes
pyautogui.write('Hello world!', interval=0.25)

Veuillez noter que cette méthode ** ne peut pas saisir le japonais **! Donc, si vous voulez entrer le japonais, utilisez une autre méthode.

La méthode est ** Copiez et collez la chaîne de caractères que vous souhaitez entrer dans le presse-papiers. ** **

Utilisez ** pyperclip ** pour manipuler le presse-papiers. Voir ci-dessous pour plus de détails sur l'utilisation de pyperclip, mais ici je ne décrirai que le code.

[Automation] Utilisez le presse-papiers avec Python et collez le tableau dans Excel https://qiita.com/konitech913/items/83975332e395a387eace

python


import pyperclip

#Copiez la chaîne de caractères saisie dans le presse-papiers
pyperclip.copy('Bonjour le monde!')

# Ctrl+Coller avec v
pyautogui.hotkey('ctrl', 'v')

Entrée clé

Utilisez pyautogui.press () si vous voulez simplement appuyer sur une touche au lieu de taper.

python


#Appuyez sur la "touche Entrée"
pyautogui.press('enter')

#Appuyez quatre fois sur la "touche de curseur gauche"
pyautogui.press(['left', 'left', 'left', 'left'])

Pour les ** raccourcis clavier ** tels que "Ctrl + C (coller)" et "Ctrl + Z (annuler)", spécifiez-les avec pyautogui.hotkey ().

python


# 「Ctrl+Z(annuler)」
pyautogui.hotkey('ctrl', 'z')

Automatiser la peinture

Enfin, utilisons les connaissances jusqu'à présent pour dessiner avec la «peinture» fournie avec Windows.

Modifiez la taille de la figure ☆, empilez-en 5 et entrez enfin le texte.

python


#Saisissez d'abord les coordonnées
print(pyautogui.position()) #Où vous voulez coller le texte
print(pyautogui.position()) #☆ position de départ de glisser

Résultat d'exécution


Point(x=300, y=285)
Point(x=476, y=566)

Une fois que vous connaissez les coordonnées, il est temps de commencer à dessiner.

python


import pyautogui
import pyperclip

#Cliquez une fois pour activer la fenêtre de peinture
pyautogui.click(732,22)

text_x=300
text_y=285

star_x=476
star_y=566

#☆ dessin
stride = 50 #Augmenter ☆ par pas
star_num = 5 #Nombre de ☆

pyautogui.click('star.png')

#☆ démarrer_Dessiner autant que num
for i in range(star_num):
    pyautogui.moveTo(star_x-stride*i, star_y-stride*i, 1)
    pyautogui.drag(50+stride*i*2, 50+stride*i*2, 1)
    
#Entrez du texte
pyautogui.click('text.png')

pyautogui.click(text_x, text_y)
pyperclip.copy('C'est comme une étoile Matriochka ...') #Copier le japonais dans le presse-papiers une fois
pyautogui.hotkey('ctrl', 'v') #coller

** Résultat d'exécution **

pyautogui_demo.gif

comment était-ce? Si vous pouvez maîtriser pyautogui, il semble que l'application sera efficace pour automatiser diverses applications.

référence

Voici les autres séries d'automatisation que j'ai écrites. Si vous êtes intéressé, s'il vous plaît!

[Automation] Extraire le tableau en PDF avec Python https://qiita.com/konitech913/items/4ef70e1f7753c824b40f

[Automation] Lire des documents Word avec Python https://qiita.com/konitech913/items/c30236bdf47775535e2f

[Automation] Convertit le code Python en un fichier exe https://qiita.com/konitech913/items/6259f13e057bc25ebc23

[Automation] Envoyer des e-mails Outlook avec Python https://qiita.com/konitech913/items/51867dbe24a2a4272bb6

[Automation] Lire le courrier Outlook avec Python https://qiita.com/konitech913/items/8a285522b0c118d5f905

[Automation] Lire le courrier (fichier msg) avec Python https://qiita.com/konitech913/items/fa0cf66aad27d16258c0

[Automation] Utilisez le presse-papiers avec Python et collez le tableau dans Excel https://qiita.com/konitech913/items/83975332e395a387eace

Recommended Posts

[Automation] Manipulez la souris et le clavier avec Python
Automatisez les opérations du clavier et de la souris avec python pour rationaliser le travail quotidien [RPA]
Programmation avec Python et Tkinter
Travailler avec le tkinter et la souris
Python et matériel - Utilisation de RS232C avec Python -
[Python] Termin avec interface souris
Manipulez diverses bases de données avec Python
python avec pyenv et venv
Obtenir un événement de clavier avec python
Fonctionne avec Python et R
Communiquez avec FX-5204PS avec Python et PyUSB
Briller la vie avec Python et OpenCV
Fonctionnement de la souris et du clavier Python avec pyautogui
Robot fonctionnant avec Arduino et python
Installez Python 2.7.9 et Python 3.4.x avec pip.
Réseau neuronal avec OpenCV 3 et Python 3
Scraping avec Node, Ruby et Python
[Automation] Extraire les rendez-vous Outlook avec Python
[Automatisé avec python! ] Partie 1: fichier de configuration
Grattage avec Python, Selenium et Chromedriver
Grattage avec Python et belle soupe
[Automation] Envoyer des e-mails Outlook avec Python
Manipuler des fichiers et des dossiers en Python
Encodage et décodage JSON avec python
Introduction à Hadoop et MapReduce avec Python
[GUI en Python] PyQt5-Glisser-déposer-
Lire et écrire NetCDF avec Python
J'ai joué avec PyQt5 et Python3
Lire et écrire du CSV avec Python
Intégration multiple avec Python et Sympy
[Automatisé avec python! ] Partie 2: Fonctionnement des fichiers
Coexistence de Python2 et 3 avec CircleCI (1.0)
Jeu Sugoroku et jeu d'addition avec Python
Modulation et démodulation FM avec Python
Communiquez entre Elixir et Python avec gRPC
Construction de pipeline de données avec Python et Luigi
Calculer et afficher le poids standard avec python
Surveiller les pannes de Mojo avec Python et Skype
Modulation et démodulation FM avec Python Partie 3
Authentification sans mot de passe avec RDS et IAM (Python)
Installation de Python et gestion des packages avec pip
Utilisation de Python et MeCab avec Azure Databricks
POSTER diversement avec Python et recevoir avec Flask
Capturer des images avec Pupil, python et OpenCV
Fractal pour faire et jouer avec Python
Un mémo contenant Python2.7 et Python3 dans CentOS
Utilisez PIL ou Pillow avec Cygwin Python
Manipulation des données DynamoDB avec Lambda (Node et Python)
Créer et décrypter du code César avec python
CentOS 6.4, Python 2.7.3, Apache, mod_wsgi, Django
Lire et écrire des fichiers JSON avec Python
Gérer les "années et mois" en Python
J'ai installé et utilisé Numba avec Python3.5
Analyse des tweets avec Python, Mecab et CaboCha
Lier Python et JavaScript avec le notebook Jupyter
Surveillance du trafic avec Kibana, ElasticSearch et Python
Modulation et démodulation FM avec Python Partie 2
Crypter avec Ruby (Rails) et décrypter avec Python
[Automation] Lire des documents Word avec Python
Téléchargez facilement des mp3 / mp4 avec python et youtube-dl!