Czy chcesz, aby mysz poruszała się w kodzie bez interwencji użytkownika?
rahul
Więcej informacji byłoby naprawdę pomocne ...
Gabriel Hurley,
Pracuję w systemie Windows i nie używam żadnego zestawu narzędzi. Jestem naprawdę nowy w Pythonie i nigdy wcześniej nie pracowałem z żadnym GUI. Skąd zacznę? Jaki mannual powinienem przeczytać?
Sasha
2
dlaczego potrzebujesz do tego Pythona, możesz to zrobić sam? bardziej poważnie, dlaczego potrzebujesz, jaki jest cel, trochę więcej szczegółów byłoby świetnych
Anurag Uniyal
2
Tylko FYI, jeśli używasz tego, aby zapobiec blokowaniu komputera, możesz naruszać zasady bezpieczeństwa firmy lub organizacji, ponieważ jest to sposób na obejście właściwości automatycznego blokowania komputera. Użyłem tego w niektórych miejscach, nie ma problemu, po prostu zawsze upewnij się, że skonsultujesz się z administratorami Sys. Widziałem, jak ludzie tracą pracę z powodu takich drobnych spraw.
AlienAnarchist
Odpowiedzi:
329
Testowany na WinXP, Python 2.6 (3.x również przetestowany) po zainstalowaniu pywin32 (w moim przypadku pywin32-214.win32-py2.6.exe):
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.
czy mogę użyć tej biblioteki do sterowania prędkością / przyspieszeniem myszy?
Ktoś Someoneelse
Miało to tę zaletę, że nie wymagało instalacji (i związanego z tym przeglądu zarządzania i zatwierdzania) niestandardowych modułów Python w ponad 50 oknach (kioski z cyfrowym oznakowaniem).
brichins
4
przetestowany również w python3.xpracach, możesz edytować odpowiedź
WhatsThePoint
132
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.
Pyautogui to świetny moduł, ale niestety bardzo wolny. W Ubuntu przesuwa kursor 2-3 razy na sekundę. Niesamowite! Pyuserinput jest 1000 razy szybszy.
Vladyslav Savchenko
1
Dla osób próbujących zainstalować pyautogui, zajrzyj tutaj stackoverflow.com/questions/5892297/... i upewnij się, że ustawiłeś sudo przed poleceniami, jeśli masz problemy z uprawnieniami.
retodaredevil,
5
„PyAutoGUI jest wolny” ze względu na funkcję bezpieczeństwa, która dodaje 0,1 sekundy przerwy po każdym połączeniu. Jeśli twój skrypt wymyka się spod kontroli, możesz wcisnąć mysz do lewego górnego rogu w ciągu 0,1 sekundy, aby go zatrzymać. Aby to wyłączyć, uruchom pyautogui.PAUSE = 0 (chociaż nie jest to zalecane, ponieważ nie można użyć myszy / klawiatury do zatrzymania skryptu).
Al Sweigart
76
Możesz użyć win32apilub ctypesmoduł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
twój kod ctypes działał dla mnie bez żadnych dodatkowych bibliotek! (python 2.6 w Windows 7)
intrepion
1
Bez użycia zewnętrznej biblioteki! Dziękuję
Akshat Agarwal
2
Dziękuję Ci! Nie mogę znieść, że istnieją 3 biblioteki innych firm, z którymi można to zrobić, jednak wszystkie 3 biblioteki szaleją przy instalowaniu lub rozwiązywaniu problemów. To rozwiązanie ctypes jest pierwszym rodzimym rozwiązaniem Pythona i działa lepiej niż wszystkie inne, z którymi się spotkałem.
DuckPuncher
Gdzie jest dokumentacja SetCursorPos?
ArtOfWarfare
22
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:
PyMouse został zastąpiony przez PyUserInput , pasuje dokładnie do żądania, jest łatwy w użyciu i obsługuje wiele platform. Duża +1
użytkownik336851
@ user336851, czy wiesz jak tap spacei tap screen shot keyużywając PyUswerInput?
user3768495,
@ user336851, W tej chwili PyUserInputjest zepsuty. Nie mogę powiedzieć, czy działa dobrze, czy nie, ponieważ nie mogę go nawet zainstalować z powodu zepsutych zależności.
DuckPuncher
20
Linux
fromXlibimport X, display
d = display.Display()
s = d.screen()
root = s.root
root.warp_pointer(300,300)
d.sync()
Google dla „Python kontrolujący ruch myszy” znajduje teraz tę stronę, jak meta.
Copas
2
Ze względu na kompletność, ponieważ pytanie zadawano również w celu symulacji kliknięć myszą, dodam: 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.
user336851
4
@Copas - wyniki wyświetlane w Google nic nie znaczą. Jesteś w bańce. To pojawia się w wyszukiwaniu tego samego terminu w DuckDuckGo - to coś prawdziwego. To jest coś, co wszyscy inni mogą reprodukować i zobaczyć na własne oczy. To jest meta.
ArtOfWarfare
1
Do sterowania myszą w sesji VNC potrzebny jest również numer wyświetlacza, na przykład „d = display.Display (': 1')”, gdzie: 1 to numer wyświetlacza.
Zafer
12
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 importButton,Controller
mouse =Controller()# Read pointer positionprint('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)
Właśnie próbowałem uruchomić stary program na komputerze z systemem Windows i nie działał, więc proszę przetestować go przed użyciem. Ten program przynajmniej twierdzi, że obsługuje oba te elementy.
Pro Q
Przeprowadziłem testy i okazało się, że mój problem polegał na tym, że na komputerze Mac wartości zmiennoprzecinkowe działają poprawnie, ale w systemie Windows współrzędne muszą być liczbami całkowitymi. Ten moduł jest wieloplatformowy.
Szybka i brudna funkcja, która kliknie lewym przyciskiem myszy w dowolnym miejscu clicksw systemie Windows 7 za pomocą ctypesbiblioteki. 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.
Będziesz chciał zadzwonić, pyautogui.moveTo(x, y)ponieważ move()przesuwa kursor względem bieżącej pozycji.
Al Sweigart,
Ach, przepraszam, nie zrozumiałem twojego oryginalnego komentarza. Tak, obie funkcje działają. moveTo()przesuwa się do położenia bezwzględnego, natomiast move()przesuwa się względem bieżącego położenia kursora.
Al Sweigart
1
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')
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
Odpowiedzi:
Testowany na WinXP, Python 2.6 (3.x również przetestowany) po zainstalowaniu pywin32 (w moim przypadku pywin32-214.win32-py2.6.exe):
źródło
win32api.SetCursorPos((x,y))
zwin32api.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.
A więc:
Ma również inne funkcje:
Jest to o wiele łatwiejsze niż przeglądanie wszystkich rzeczy związanych z win32con.
źródło
Możesz użyć
win32api
lubctypes
modułu, aby używać interfejsu API Win32 do sterowania myszą lub dowolnym GUIOto zabawny przykład sterowania myszą za pomocą win32api:
Kliknięcie za pomocą ctypów:
źródło
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):
Jeśli zamiast tego chcesz, aby kursor widocznie przesuwał się po ekranie do określonej lokalizacji, możesz użyć polecenia smooth_move:
źródło
Sprawdź cross-platform PyMouse: https://github.com/pepijndevos/PyMouse/
źródło
tap space
itap 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.Linux
Źródło: Mysz Python porusza się w 5 liniach kodu (tylko Linux) .
źródło
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,
źródło
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.źródło
Od 2020 r. Możesz używać myszy :
cechy
źródło
Jeśli chcesz poruszyć myszą, użyj tego:
Jeśli chcesz kliknąć, użyj tego:
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
lubpython3 -m pip install pyautogui
.źródło
pyautogui.moveTo(x, y)
ponieważmove()
przesuwa kursor względem bieżącej pozycji.moveTo()
przesuwa się do położenia bezwzględnego, natomiastmove()
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ć:
Oto źródło: Jak kontrolować mysz w Pythonie
źródło
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
źródło
bardzo łatwy 1- pakiet instalacyjny:
2- dodaj bibliotekę do projektu:
3- użyj go na przykład:
w tym adresie URL opisz wszystkie funkcje, których możesz użyć:
https://github.com/boppreh/mouse
źródło