web-dev-qa-db-fra.com

Contrôle de la souris avec Python

Comment contrôler le curseur de la souris en Python, c’est-à-dire le déplacer à une certaine position et cliquer, sous Windows?

183
Sasha

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)
310
Jeffrey Kemp

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.

107
Al Sweigart

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
72
Anurag Uniyal

Découvrez la plateforme multipliée PyMouse: https://github.com/pepijndevos/PyMouse/

21
Fabio Varesano

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)
20
Gwen

Linux

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) .

14
Simon

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)
10
Pro Q

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.
7
TankorSmash