Як один керує курсором миші в 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 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
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();
виклик режиму сну () між натисканням та випуском може знадобитися, а може і не знадобитися залежно від цільової програми.
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-адресі опишіть усі функції, якими ви можете користуватися: