Как управлять курсором мыши в Python, то есть перемещать его в определенную позицию и щелкать в Windows?
Как управлять курсором мыши в Python, то есть перемещать его в определенную позицию и щелкать в Windows?
Ответы:
Протестировано на 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)
win32api.SetCursorPos((x,y))
лучше заменить на win32api.mouse_event(win32con.MOUSEEVENTF_MOVE | win32con.MOUSEEVENTF_ABSOLUTE, int(x/SCREEN_WIDTH*65535.0), int(y/SCREEN_HEIGHT*65535.0))
мой опыт для лучшей интеграции с другими приложениями, такими как игры.
python3.x
работах тоже, не стесняйтесь редактировать ответ
Попробуйте с модулем 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.
Вы можете использовать win32api
или ctypes
модуль для использования Win32 API для управления мышью или любой графический интерфейс
Вот забавный пример управления мышью с помощью 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
SetCursorPos
?
Другой вариант - использовать кроссплатформенный пакет AutoPy . В этом пакете есть два варианта перемещения мыши:
Этот фрагмент кода мгновенно переместит курсор в позицию (200 200):
import autopy
autopy.mouse.move(200,200)
Если вместо этого вы хотите, чтобы курсор визуально перемещался по экрану в указанное место, вы можете использовать команду smooth_move:
import autopy
autopy.mouse.smooth_move(200,200)
Проверьте кроссплатформенный PyMouse: https://github.com/pepijndevos/PyMouse/
tap space
и tap screen shot key
с помощью PyUswerInput?
PyUserInput
сломан. Не могу сказать, работает ли он хорошо или нет, потому что я даже не могу его установить из-за сломанных зависимостей.
from Xlib import X, display
d = display.Display()
s = d.screen()
root = s.root
root.warp_pointer(300,300)
d.sync()
Источник: мышь Python перемещается в 5 строк кода (только для Linux) .
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();
вызов sleep () между нажатием и отпусканием может или не может потребоваться в зависимости от целевого приложения.
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)
Быстрая и грязная функция, которая будет щелкать левой кнопкой мыши в любом 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.
С 2020 года вы можете использовать мышь :
import mouse
mouse.move("500", "500")
mouse.left_click()
Характеристики
Если вы хотите переместить мышь, используйте это:
import pyautogui
pyautogui.moveTo(x,y)
Если вы хотите нажать, используйте это:
import pyautogui
pyautogui.click(x,y)
Если вы не pyautogui
установили, вы должны иметь Python, подключенный к CMD. Зайдите в CMD и напишите:pip install pyautogui
Это установит pyautogui
для Python 2.x.
Для Python 3.x вам, вероятно, придется использовать pip3 install pyautogui
или python3 -m pip install pyautogui
.
pyautogui.moveTo(x, y)
потому что move()
перемещает курсор относительно его текущей позиции.
moveTo()
перемещается в абсолютную позицию, а move()
перемещается относительно текущей позиции курсора.
Другой альтернативой была бы библиотека мыши , я лично использую ее, поскольку она относительно проста и кроссплатформенна.
Вот как вы можете использовать это:
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
Принятый ответ сработал для меня, но он был нестабильным (иногда щелчки не изменялись), поэтому я добавил дополнительный MOUSEEVENTF_LEFTUP . Тогда это работало надежно
import win32api, win32con
def click(x,y):
win32api.SetCursorPos((x,y))
win32api.mouse_event(win32con.MOUSEEVENTF_LEFTUP,x,y,0,0)
win32api.mouse_event(win32con.MOUSEEVENTF_LEFTDOWN,x,y,0,0)
win32api.mouse_event(win32con.MOUSEEVENTF_LEFTUP,x,y,0,0)
click(10,10)
очень легко 1- установить пакет:
pip install mouse
2- добавить библиотеку в проект:
import mouse
3- используйте его, например:
mouse.right_click()
в этом URL опишите все функции, которые вы можете использовать: