Comment contrôler le curseur de la souris en Python, c’est-à-dire le déplacer à une certaine position et cliquer, sous Windows?
Testé sous WinXP, Python 2.6 (3.x également testé) après avoir installé pywin32 (pywin32-214.win32-py2.6.exe dans mon cas):
import win32api, win32con
def click(x,y):
win32api.SetCursorPos((x,y))
win32api.mouse_event(win32con.MOUSEEVENTF_LEFTDOWN,x,y,0,0)
win32api.mouse_event(win32con.MOUSEEVENTF_LEFTUP,x,y,0,0)
click(10,10)
Essayez avec le module PyAutoGUI . C'est multiplateforme.
pip install pyautogui
Et donc:
import pyautogui
pyautogui.click(100, 100)
Il a également d'autres caractéristiques:
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 en revue tout ce qui concerne win32con.
Vous pouvez utiliser le module win32api
ou ctypes
pour utiliser un apis win32 afin de contrôler la souris ou n'importe quel autre gui.
Voici un exemple amusant de contrôle de la souris à l'aide de win32api:
import win32api
import time
import math
for 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
Découvrez la plateforme multipliée PyMouse: https://github.com/pepijndevos/PyMouse/
Une autre option consiste à utiliser le multi-plateforme package AutoPy . Ce paquet a deux options différentes pour déplacer la souris:
Cet extrait de code déplacera 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 de l’écran à un emplacement donné, vous pouvez utiliser la commande smooth_move:
import autopy
autopy.mouse.smooth_move(200,200)
from Xlib import X, display
d = display.Display()
s = d.screen()
root = s.root
root.warp_pointer(300,300)
d.sync()
Source: La souris Python se déplace dans 5 lignes de code (Linux uniquement) .
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 import Button, Controller
mouse = Controller()
# Read pointer position
print('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)
Fonction rapide et sale qui laissera un clic _clicks
fois sur Windows 7 à l’aide de la bibliothèque ctypes
. 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.