파이썬으로 마우스 제어


206

파이썬에서 마우스 커서를 어떻게 제어합니까, 즉 Windows에서 특정 위치로 이동하고 클릭합니까?


1
사용자 개입없이 코드에서 마우스 움직임을 원하십니까?
rahul

더 많은 정보는 정말 도움 이 될 것입니다 ...
Gabriel Hurley

Windows에서 wotk이며 툴킷을 사용하지 않습니다. 저는 Python을 처음 접했고 이전에는 GUI를 사용한 적이 없습니다. 어디서부터 시작합니까? 어떤 의미를 읽어야합니까?
사샤

2
왜 파이썬이 필요한가요? 직접 할 수 있습니까? 더 진지한 메모로, 왜 필요한지, 목적이 무엇인지, 조금 더 자세한 내용이 좋을 것입니다.
Anurag Uniyal

2
참고로 컴퓨터 잠금을 방지하기 위해이 기능을 사용하는 경우 자동 컴퓨터 잠금 속성을 우회하는 수단이므로 회사 또는 조직의 보안 정책을 위반할 수 있습니다. 필자는 항상 어떤 장소에서 이것을 사용했지만 문제는 항상 Sys Admins에 확인하십시오. 나는 사람들이 이와 같은 사소한 일 때문에 직업을 잃는 것을 보았습니다.
AlienAnarchist 2016 년

답변:


329

pywin32 (필자의 경우 pywin32-214.win32-py2.6.exe )를 설치 한 후 WinXP, Python 2.6 (3.x도 테스트 됨)에서 테스트되었습니다 .

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)

11
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))게임과 같은 다른 응용 프로그램과의 더 나은 통합을 위해 내 경험에서 대체하는 것이 좋습니다 .
팔콘

1
@ ObsessiveSSOℲ는 MOUSEEVENTF_ABSOLUTE 플래그를 벗어납니다. 자세한 내용 : msdn.microsoft.com/en-us/library/windows/desktop/…
Falcon

이 라이브러리를 사용하여 마우스의 속도 / 가속을 제어 할 수 있습니까?
누군가 Someoneelse

이는 50 개 이상의 창 상자 (디지털 사이 니지 키오스크)에 비표준 Python 모듈을 설치 (및 관련 관리 검토 및 승인) 할 필요가 없다는 이점이있었습니다.
brichins

4
테스트 python3.x너무 작품, 대답 편집 주시기 바랍니다
WhatsThePoint

132

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 작업을 수행하는 것보다 훨씬 쉽습니다.


14
큰! 멀티 플랫폼입니다!
les

Pyautogui는 훌륭한 모듈이지만 불행히도 매우 느립니다. 우분투에서는 초당 2 ~ 3 번 커서를 움직입니다. 놀랄 만한! Pyuserinput이 1000 배 빠릅니다.
Vladyslav Savchenko

1
pyautogui를 설치하려는 사람들은 여기 stackoverflow.com/questions/5892297/…를 보고 권한 문제가있는 경우 명령 앞에 sudo를 넣으십시오.
retodaredevil

5
"PyAutoGUI는 느립니다"안전 기능으로 인해 각 호출 후 0.1 초의 일시 중지가 추가됩니다. 스크립트를 제어 할 수없는 경우 마우스를 왼쪽 상단 모서리에 0.1 초 동안 밀어 넣어 중지 할 수 있습니다. 이를 비활성화하려면 pyautogui.PAUSE = 0을 실행하십시오 (마우스 / 키보드를 사용하여 스크립트를 중지 할 수 없기 때문에 권장하지는 않습니다)
Al Sweigart

76

당신이 사용할 수있는 win32apictypes마우스 또는 모든 GUI를 제어하기 위해 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

11
귀하의 ctypes 코드는 추가 라이브러리없이 저에게 효과적이었습니다! (Windows 7의 Python 2.6)
intrepion

1
외부 라이브러리를 사용하지 않고! 감사합니다
Akshat Agarwal 2016

2
감사합니다! 이 작업을 수행 할 수있는 3 개의 타사 라이브러리가 있다는 것을 참을 수는 없지만 3 개의 라이브러리는 모두 설치하거나 문제를 해결하기 위해 열심입니다. 이 ctypes 솔루션은 최초의 네이티브 파이썬 솔루션이며 내가 본 다른 모든 것보다 잘 작동합니다.
DuckPuncher

설명서는 어디에 있습니까 SetCursorPos?
ArtOfWarfare 2016 년

22

다른 옵션은 크로스 플랫폼 AutoPy 패키지 를 사용하는 것입니다 입니다. 이 패키지에는 마우스 이동을위한 두 가지 옵션이 있습니다.

이 코드 스 니펫은 커서를 (200,200) 위치로 즉시 이동시킵니다.

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

대신 커서를 화면에서 지정된 위치로 눈에 띄게 이동하려면 smooth_move 명령을 사용할 수 있습니다.

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

21

크로스 플랫폼 PyMouse를 확인하십시오 : https://github.com/pepijndevos/PyMouse/


8
PyMouse는 PyUserInput으로 대체 되었으며 , 요청에 정확히 부합하고, 사용하기 쉽고 크로스 플랫폼입니다. 큰 +1
user336851 2018 년

@ user336851, PyUswerInput 사용 방법 tap spacetap screen shot key사용 방법을 알고 있습니까?
user3768495

@ user336851,이 시점 PyUserInput에서 깨졌습니다. 종속성이 손상되어 설치할 수 없기 때문에 제대로 작동하는지 말할 수 없습니다.
DuckPuncher

20

리눅스

from Xlib import X, display
d = display.Display()
s = d.screen()
root = s.root
root.warp_pointer(300,300)
d.sync()

출처 : 파이썬 마우스는 5 줄의 코드로 움직입니다 (Linux 전용) .


20
"마우스 움직임을 제어하는 ​​Python"에 대한 Google이 이제 메타 인이 페이지를 찾습니다.
Copas

2
완성도를 높이기 위해 질문에 마우스 클릭 시뮬레이션도 요청했기 때문에 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 () 호출이 필요할 수도 있고 필요하지 않을 수도 있습니다.
user336851 2016 년

4
@Copas-Google에 나타나는 결과는 아무 의미가 없습니다. 당신은 거품에 있습니다. 이것은 동일한 용어에 대한 DuckDuckGo 검색에 나타납니다. 그것은 다른 사람들이 스스로 복제하고 볼 수있는 것입니다. 그것은 메타입니다.
ArtOfWarfare

1
VNC 세션에서 마우스를 제어하려면 "d = display.Display ( ': 1')"와 같이 디스플레이 번호가 필요합니다. 여기서 : 1은 디스플레이 번호입니다.
Zafer

12

피넛 은 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)

방금 Windows 컴퓨터에서 이전 프로그램을 실행하려고 시도했지만 작동하지 않으므로 사용하기 전에 테스트하십시오. 이 프로그램은 적어도 두 가지를 모두 지원한다고 주장합니다.
프로 Q

나는 약간의 테스트를했는데, 내 문제는 Mac에서 좌표 값이 정상적으로 작동하기 때문에 수레를 갖는 것이지만 Windows에서는 좌표가 정수 여야한다는 것이 밝혀졌습니다. 이 모듈은 크로스 플랫폼입니다.
프로 Q

github 저장소에 문제를 추가하여 개선 할 수 있는지 확인했습니다. github.com/moses-palmer/pynput/issues/79
Pro Q

문제가 해결 된 것 같습니다.
Pro Q

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.

7

현재로 2020 , 당신이 사용할 수있는 마우스를 :

import mouse
mouse.move("500", "500")
mouse.left_click()

풍모

  • 모든 마우스 장치의 글로벌 이벤트 후크 (포커스에 관계없이 이벤트를 캡처)
  • 듣고 마우스 이벤트를 보냅니다.
  • Windows 및 Linux에서 작동 합니다 (sudo 필요).
  • 순수 파이썬, 컴파일 할 C 모듈이 없습니다.
  • 종속성이 없습니다. 설치 및 배포가 쉽지만 파일을 복사하면됩니다.
  • 파이썬 2와 3
  • 높은 수준의 API를 포함합니다 (예 : 녹음 및 재생).
  • 별도의 스레드에서 자동으로 캡처 된 이벤트는 기본 프로그램을 차단하지 않습니다.
  • 테스트 및 문서화.

2

마우스를 움직이려면 다음을 사용하십시오.

import pyautogui
pyautogui.moveTo(x,y)

클릭하려면 다음을 사용하십시오.

import pyautogui
pyautogui.click(x,y)

당신이없는 경우 pyautogui설치 CMD에 Python이 첨부되어 있어야합니다. CMD로 이동하여 다음을 작성하십시오.pip install pyautogui

이것은 설치됩니다 pyautoguiPython 2.x 용으로 됩니다.

파이썬 3.x를 들어, 당신은 아마 사용해야 할 것 pip3 install pyautoguipython3 -m pip install pyautogui.


커서를 현재 위치를 기준으로 이동 pyautogui.moveTo(x, y)하기 때문에 호출하고 싶을 것 move()입니다.
Al Sweigart

아, 원래 의견을 잘못 이해해서 죄송합니다. 예, 두 기능이 모두 작동합니다. 현재 커서 위치를 기준으로 이동 moveTo()하면서 절대 위치로 move()이동합니다.
Al Sweigart

1

또 다른 대안은 마우스 라이브러리입니다. 일 것입니다. 상대적으로 단순하고 크로스 플랫폼이기 때문에 개인적으로 사용합니다.

사용 방법은 다음과 같습니다.

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에서 마우스를 제어하는 ​​방법


1

허용되는 답변은 저에게 효과적 이지만 불안정합니다 (때로는 클릭이 등록되지 않음). 그래서 추가 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)

0

매우 쉬운 1- 설치 pakage :

pip install mouse

2- 프로젝트에 라이브러리 추가 :

import mouse

3- 예를 들어 사용하십시오 :

mouse.right_click()

이 URL에서 사용할 수있는 모든 기능을 설명하십시오.

https://github.com/boppreh/mouse

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.