Jak kontrolować kursor myszy w Pythonie, tj. Przesuwać go do określonej pozycji i klikać pod Windows?
Jak kontrolować kursor myszy w Pythonie, tj. Przesuwać go do określonej pozycji i klikać pod Windows?
Odpowiedzi:
Testowany na WinXP, Python 2.6 (3.x również przetestowany) po zainstalowaniu pywin32 (w moim przypadku 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))
z win32api.mouse_event(win32con.MOUSEEVENTF_MOVE | win32con.MOUSEEVENTF_ABSOLUTE, int(x/SCREEN_WIDTH*65535.0), int(y/SCREEN_HEIGHT*65535.0))
mojego doświadczenia lepiej jest zostać zastąpionym przez dla lepszej integracji z innymi aplikacjami, takimi jak gry.
python3.x
pracach, możesz edytować odpowiedź
Spróbuj z modułem PyAutoGUI . Jest wieloplatformowy.
pip install pyautogui
A więc:
import pyautogui
pyautogui.click(100, 100)
Ma również inne funkcje:
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
Jest to o wiele łatwiejsze niż przeglądanie wszystkich rzeczy związanych z win32con.
Możesz użyć win32api
lub ctypes
modułu, aby używać interfejsu API Win32 do sterowania myszą lub dowolnym GUI
Oto zabawny przykład sterowania myszą za pomocą 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)
Kliknięcie za pomocą ctypów:
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
?
Inną opcją jest użycie wieloplatformowego pakietu AutoPy . Ten pakiet ma dwie różne opcje poruszania myszą:
Ten fragment kodu natychmiast przeniesie kursor do pozycji (200,200):
import autopy
autopy.mouse.move(200,200)
Jeśli zamiast tego chcesz, aby kursor widocznie przesuwał się po ekranie do określonej lokalizacji, możesz użyć polecenia smooth_move:
import autopy
autopy.mouse.smooth_move(200,200)
Sprawdź cross-platform PyMouse: https://github.com/pepijndevos/PyMouse/
tap space
i tap screen shot key
używając PyUswerInput?
PyUserInput
jest zepsuty. Nie mogę powiedzieć, czy działa dobrze, czy nie, ponieważ nie mogę go nawet zainstalować z powodu zepsutych zależności.
from Xlib import X, display
d = display.Display()
s = d.screen()
root = s.root
root.warp_pointer(300,300)
d.sync()
Źródło: Mysz Python porusza się w 5 liniach kodu (tylko 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();
wywołanie sleep () między naciśnięciem a zwolnieniem może, ale nie musi być wymagane w zależności od docelowej aplikacji.
Pynput to najlepsze rozwiązanie, jakie znalazłem, zarówno dla systemu Windows, jak i Mac. Bardzo łatwy w programowaniu i działa bardzo dobrze.
Na przykład,
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)
Szybka i brudna funkcja, która kliknie lewym przyciskiem myszy w dowolnym miejscu clicks
w systemie Windows 7 za pomocą ctypes
biblioteki. Nie wymaga pobierania.
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.
Od 2020 r. Możesz używać myszy :
import mouse
mouse.move("500", "500")
mouse.left_click()
cechy
Jeśli chcesz poruszyć myszą, użyj tego:
import pyautogui
pyautogui.moveTo(x,y)
Jeśli chcesz kliknąć, użyj tego:
import pyautogui
pyautogui.click(x,y)
Jeśli nie masz pyautogui
zainstalowanego, musisz mieć Python podłączony do CMD. Przejdź do CMD i napisz:pip install pyautogui
To zainstaluje się pyautogui
dla Python 2.x.
W przypadku Python 3.x prawdopodobnie będziesz musiał użyć pip3 install pyautogui
lub python3 -m pip install pyautogui
.
pyautogui.moveTo(x, y)
ponieważ move()
przesuwa kursor względem bieżącej pozycji.
moveTo()
przesuwa się do położenia bezwzględnego, natomiast move()
przesuwa się względem bieżącego położenia kursora.
Inną alternatywą byłaby biblioteka myszy , ja osobiście z niej korzystam, ponieważ jest stosunkowo prosta i wieloplatformowa.
Oto jak możesz go użyć:
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')
Oto źródło: Jak kontrolować mysz w Pythonie
Przyjęta odpowiedź działała dla mnie, ale była niestabilna (czasami kliknięcia nie rejestrowały się), więc dodałem dodatkowy MOUSEEVENTF_LEFTUP . Potem działało niezawodnie
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)
bardzo łatwy 1- pakiet instalacyjny:
pip install mouse
2- dodaj bibliotekę do projektu:
import mouse
3- użyj go na przykład:
mouse.right_click()
w tym adresie URL opisz wszystkie funkcje, których możesz użyć: