Voulez-vous faire le mouvement de la souris dans le code sans intervention de l'utilisateur?
rahul
Plus d'informations seraient vraiment utiles ...
Gabriel Hurley
Je wotk dans Windows et je n'utilise aucune boîte à outils. Je suis vraiment nouveau sur Python et je n'ai jamais travaillé avec une interface graphique auparavant. D'où je commence? Quel manuel dois-je lire?
Sasha
2
pourquoi vous avez besoin d'un python pour le faire, vous pouvez le faire vous-même? sur une note plus sérieuse, pourquoi vous en avez besoin, quel est le but, un peu plus de détails serait super
Anurag Uniyal
2
Juste pour info si vous utilisez cela pour empêcher votre machine de se verrouiller, vous pourriez violer la politique de sécurité de votre entreprise ou organisation car c'est un moyen de contourner les propriétés de verrouillage automatique de l'ordinateur. Je l'ai utilisé à certains endroits sans problème, assurez-vous toujours de vérifier auprès de vos administrateurs Sys. J'ai vu des gens perdre leur emploi pour des choses mineures comme celle-ci.
AlienAnarchist
Réponses:
329
Testé sur WinXP, Python 2.6 (3.x également testé) après l'installation de pywin32 (pywin32-214.win32-py2.6.exe dans mon cas):
win32api.SetCursorPos((x,y))est préférable d'être remplacé par win32api.mouse_event(win32con.MOUSEEVENTF_MOVE | win32con.MOUSEEVENTF_ABSOLUTE, int(x/SCREEN_WIDTH*65535.0), int(y/SCREEN_HEIGHT*65535.0))mon expérience pour une meilleure intégration avec d'autres applications telles que les jeux.
puis-je utiliser cette bibliothèque pour contrôler la vitesse / accélération de la souris?
Someone Someoneelse
Cela avait l'avantage de ne pas nécessiter l'installation (et l'examen de gestion et l'approbation associés) de modules Python non standard dans plus de 50 boîtes Windows (bornes d'affichage numérique).
brichins
4
testé en python3.xtravaux aussi, n'hésitez pas à modifier la réponse
WhatsThePoint
132
Essayez avec le module PyAutoGUI . C'est multiplateforme.
pip install pyautogui
Et donc:
import pyautogui
pyautogui.click(100,100)
Il possède également d'autres fonctionnalités:
import pyautogui
pyautogui.moveTo(100,150)
pyautogui.moveRel(0,10)# move mouse 10 pixels down
pyautogui.dragTo(100,150)
pyautogui.dragRel(0,10)# drag mouse 10 pixels down
C'est beaucoup plus facile que de passer par tous les trucs win32con.
Pyautogui est un excellent module, mais malheureusement très lent. Dans Ubuntu, il déplace le curseur 2-3 fois par seconde. Incroyable! Pyuserinput est 1000 fois plus rapide.
Vladyslav Savchenko
1
Pour les personnes essayant d'installer pyautogui, regardez ici stackoverflow.com/questions/5892297/… et assurez-vous de mettre sudo devant vos commandes si vous avez des problèmes d'autorisation.
retodaredevil
5
"PyAutoGUI est lent" en raison d'une fonction de sécurité qui ajoute une pause de 0,1 seconde après chaque appel. Si votre script est hors de contrôle, vous pouvez claquer la souris dans le coin supérieur gauche en 0,1 seconde pour l'arrêter. Pour désactiver cela, exécutez pyautogui.PAUSE = 0 (bien que ce ne soit pas recommandé, car vous ne pouvez pas utiliser la souris / le clavier pour arrêter le script.)
Al Sweigart
75
Vous pouvez utiliser win32apiou ctypesmodule pour utiliser des API win32 pour contrôler la souris ou n'importe quel GUI
Voici un exemple amusant pour contrôler la souris en utilisant win32api:
import win32apiimport timeimport mathfor i in range(500):
x = int(500+math.sin(math.pi*i/100)*500)
y = int(500+math.cos(i)*100)
win32api.SetCursorPos((x,y))
time.sleep(.01)
Un clic à l'aide de ctypes:
import ctypes# see http://msdn.microsoft.com/en-us/library/ms646260(VS.85).aspx for details
ctypes.windll.user32.SetCursorPos(100,20)
ctypes.windll.user32.mouse_event(2,0,0,0,0)# left down
ctypes.windll.user32.mouse_event(4,0,0,0,0)# left up
votre code ctypes a fonctionné pour moi sans aucune bibliothèque supplémentaire! (Python 2.6 sur Windows 7)
Intrepion
1
Sans utiliser de bibliothèque externe! Merci
Akshat Agarwal
2
Je vous remercie! Je ne peux pas supporter qu'il y ait comme 3 bibliothèques tierces avec lesquelles vous pouvez le faire, mais les 3 bibliothèques sont exaspérantes à installer ou à dépanner. Cette solution ctypes est la première solution native de python et elle fonctionne mieux que toutes les autres que j'ai rencontrées.
DuckPuncher
Où est la documentation SetCursorPos?
ArtOfWarfare
22
Une autre option consiste à utiliser le package AutoPy multiplateforme . Ce package a deux options différentes pour déplacer la souris:
Cet extrait de code déplace instantanément le curseur sur la position (200 200):
import autopy
autopy.mouse.move(200,200)
Si vous souhaitez plutôt que le curseur se déplace visiblement à travers l'écran vers un emplacement donné, vous pouvez utiliser la commande smooth_move:
PyMouse a été remplacé par PyUserInput , correspond exactement à la demande, simple à utiliser et multiplateforme. Big +1
user336851
@ user336851, savez-vous comment tap spaceet tap screen shot keyen utilisant PyUswerInput?
user3768495
@ user336851, à ce moment PyUserInputest cassé. Je ne peux pas dire si cela fonctionne bien ou non car je n'arrive même pas à l'installer en raison de dépendances cassées.
DuckPuncher
20
Linux
fromXlibimport X, display
d = display.Display()
s = d.screen()
root = s.root
root.warp_pointer(300,300)
d.sync()
Un google pour "Python contrôlant le mouvement de la souris" trouve maintenant cette page, comment meta.
Copas
2
Par souci d'exhaustivité, puisque la question demandait également de simuler les clics de souris, j'ajouterai: Xlib.ext.xtest.fake_input(d, X.ButtonPress, 1); d.sync(); time.sleep(0.001); Xlib.ext.xtest.fake_input(d, X.ButtonRelease, 1); d.sync();l'appel sleep () entre la presse et le relâchement peut être requis ou non en fonction de l'application cible.
user336851
4
@Copas - Les résultats qui apparaissent dans votre Google ne veulent rien dire. Tu es dans une bulle. Cela apparaît dans une recherche DuckDuckGo pour le même terme - c'est quelque chose de réel. C'est quelque chose que tout le monde peut reproduire et voir par lui-même. C'est méta.
ArtOfWarfare
1
Pour contrôler la souris dans une session VNC, vous avez besoin du numéro d'affichage ainsi que "d = display.Display (': 1')" où: 1 est le numéro d'affichage.
Zafer
12
Pynput est la meilleure solution que j'ai trouvée, à la fois pour Windows et pour Mac. Super facile à programmer et fonctionne très bien.
Par exemple,
from pynput.mouse importButton,Controller
mouse =Controller()# Read pointer positionprint('The current pointer position is {0}'.format(
mouse.position))# Set pointer position
mouse.position =(10,20)print('Now we have moved it to {0}'.format(
mouse.position))# Move pointer relative to current position
mouse.move(5,-5)# Press and release
mouse.press(Button.left)
mouse.release(Button.left)# Double click; this is different from pressing and releasing# twice on Mac OSX
mouse.click(Button.left,2)# Scroll two steps down
mouse.scroll(0,2)
J'ai juste essayé d'exécuter un ancien programme sur un ordinateur Windows et cela n'a pas fonctionné, veuillez donc le tester avant de l'utiliser. Ce programme prétend au moins soutenir les deux.
Pro Q
J'ai fait quelques tests, et il s'avère que mon problème était que sur Mac, avoir des flottants comme valeurs de coordonnées fonctionne très bien, mais sous Windows, les coordonnées doivent être des entiers. Ce module est multi-plateforme.
Fonction rapide et sale qui fera un clic gauche n'importe où clickssur Windows 7 en utilisant la ctypesbibliothèque. Aucun téléchargement requis.
import ctypes
SetCursorPos= ctypes.windll.user32.SetCursorPos
mouse_event = ctypes.windll.user32.mouse_event
def left_click(x, y, clicks=1):SetCursorPos(x, y)for i in xrange(clicks):
mouse_event(2,0,0,0,0)
mouse_event(4,0,0,0,0)
left_click(200,200)#left clicks at 200, 200 on your screen. Was able to send 10k clicks instantly.
Vous voudrez appeler pyautogui.moveTo(x, y)car move()déplace le curseur par rapport à sa position actuelle.
Al Sweigart
Ah, désolé d'avoir mal compris votre commentaire d'origine. Oui, les deux fonctions fonctionnent. moveTo()se déplace vers un emplacement absolu, tandis que move()se déplace par rapport à l'emplacement actuel du curseur.
Al Sweigart
1
Une autre alternative serait la bibliothèque de souris , je l'utilise personnellement car elle est relativement simple et multiplateforme.
Voici comment vous pouvez l'utiliser:
import mouse
# move 100 right and 100 down with a duration of 0.5 seconds
mouse.move(100,100, absolute=False, duration=0.5)# left click
mouse.click('left')# right click
mouse.click('right')
La réponse acceptée a fonctionné pour moi, mais elle était instable (parfois, les clics ne s'inscrivaient pas), j'ai donc ajouté un MOUSEEVENTF_LEFTUP supplémentaire . Ensuite, cela fonctionnait de manière fiable
Réponses:
Testé sur WinXP, Python 2.6 (3.x également testé) après l'installation de pywin32 (pywin32-214.win32-py2.6.exe dans mon cas):
la source
win32api.SetCursorPos((x,y))
est préférable d'être remplacé parwin32api.mouse_event(win32con.MOUSEEVENTF_MOVE | win32con.MOUSEEVENTF_ABSOLUTE, int(x/SCREEN_WIDTH*65535.0), int(y/SCREEN_HEIGHT*65535.0))
mon expérience pour une meilleure intégration avec d'autres applications telles que les jeux.python3.x
travaux aussi, n'hésitez pas à modifier la réponseEssayez avec le module PyAutoGUI . C'est multiplateforme.
Et donc:
Il possède également d'autres fonctionnalités:
C'est beaucoup plus facile que de passer par tous les trucs win32con.
la source
Vous pouvez utiliser
win32api
ouctypes
module pour utiliser des API win32 pour contrôler la souris ou n'importe quel GUIVoici un exemple amusant pour contrôler la souris en utilisant win32api:
Un clic à l'aide de ctypes:
la source
SetCursorPos
?Une autre option consiste à utiliser le package AutoPy multiplateforme . Ce package a deux options différentes pour déplacer la souris:
Cet extrait de code déplace instantanément le curseur sur la position (200 200):
Si vous souhaitez plutôt que le curseur se déplace visiblement à travers l'écran vers un emplacement donné, vous pouvez utiliser la commande smooth_move:
la source
Découvrez la plateforme croisée PyMouse: https://github.com/pepijndevos/PyMouse/
la source
tap space
ettap screen shot key
en utilisant PyUswerInput?PyUserInput
est cassé. Je ne peux pas dire si cela fonctionne bien ou non car je n'arrive même pas à l'installer en raison de dépendances cassées.Linux
Source: déplacement de la souris Python en 5 lignes de code (Linux uniquement) .
la source
Xlib.ext.xtest.fake_input(d, X.ButtonPress, 1); d.sync(); time.sleep(0.001); Xlib.ext.xtest.fake_input(d, X.ButtonRelease, 1); d.sync();
l'appel sleep () entre la presse et le relâchement peut être requis ou non en fonction de l'application cible.Pynput est la meilleure solution que j'ai trouvée, à la fois pour Windows et pour Mac. Super facile à programmer et fonctionne très bien.
Par exemple,
la source
Fonction rapide et sale qui fera un clic gauche n'importe où
clicks
sur Windows 7 en utilisant lactypes
bibliothèque. Aucun téléchargement requis.la source
À partir de 2020 , vous pouvez utiliser la souris :
Caractéristiques
la source
Si vous souhaitez déplacer la souris, utilisez ceci:
Si vous voulez cliquer, utilisez ceci:
Si vous ne l'avez pas
pyautogui
installé, vous devez avoir python attaché à CMD. Allez dans CMD et écrivez:pip install pyautogui
Cela sera installé
pyautogui
pour Python 2.x.Pour Python 3.x, vous devrez probablement utiliser
pip3 install pyautogui
oupython3 -m pip install pyautogui
.la source
pyautogui.moveTo(x, y)
carmove()
déplace le curseur par rapport à sa position actuelle.moveTo()
se déplace vers un emplacement absolu, tandis quemove()
se déplace par rapport à l'emplacement actuel du curseur.Une autre alternative serait la bibliothèque de souris , je l'utilise personnellement car elle est relativement simple et multiplateforme.
Voici comment vous pouvez l'utiliser:
Voici la source: Comment contrôler votre souris en Python
la source
La réponse acceptée a fonctionné pour moi, mais elle était instable (parfois, les clics ne s'inscrivaient pas), j'ai donc ajouté un MOUSEEVENTF_LEFTUP supplémentaire . Ensuite, cela fonctionnait de manière fiable
la source
très facile 1- installer le paquet:
2- ajouter une bibliothèque au projet:
3- utilisez-le par exemple:
dans cette URL décrivez toutes les fonctions que vous pouvez utiliser:
https://github.com/boppreh/mouse
la source