Управление мышью с помощью Python

Как управлять курсором мыши в Python, т.е. переместить его в определенную позицию и щелкнуть под Windows?

Ответ 1

Протестировано на WinXP, Python 2.6 (также протестирован 3.x) после установки pywin32 (в моем случае pywin32-214.win32-py2.6.exe):

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)

Ответ 2

Попробуйте использовать модуль PyAutoGUI. Это мультиплатформенный.

pip install pyautogui

И так:

import pyautogui
pyautogui.click(100, 100)

Он также имеет другие функции:

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

Это намного проще, чем просматривать все материалы win32con.

Ответ 3

Вы можете использовать модуль win32api или ctypes для использования win32 apis для управления мышью или любым gui

Вот веселый пример для управления мышью с помощью 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)

Нажмите кнопку 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

Ответ 5

Другой вариант - использовать кросс-платформенный пакет AutoPy. Этот пакет имеет два разных варианта перемещения мыши:

Этот фрагмент кода мгновенно перемещает курсор в позицию (200 200):

import autopy
autopy.mouse.move(200,200)

Если вы хотите, чтобы курсор явно перемещался по экрану в заданное место, вы можете использовать команду smooth_move:

import autopy
autopy.mouse.smooth_move(200,200)

Ответ 7

Pynput - лучшее решение, которое я нашел, как для Windows, так и для Mac. Супер прост в программировании и работает очень хорошо.

Например,

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)

Ответ 8

Быстрая и грязная функция, которая будет оставлять клик везде, где clicks раз в Windows 7, используя библиотеку ctypes. Загрузка не требуется.

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.

Ответ 9

Другой альтернативой может быть библиотека мыши, я лично использую ее, поскольку она относительно проста и кроссплатформенна.

Вот как это можно использовать:

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

Вот источник: Как управлять мышью в Python