How does one control the mouse cursor in Python, i.e. move it to certain position and click, under Windows?
问题:
回答1:
Tested on WinXP, Python 2.6 after installing pywin32 (pywin32-214.win32-py2.6.exe in my case):
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) 回答2:
Try with the PyAutoGUI module. It's multiplatform.
pip install pyautogui And so:
import pyautogui pyautogui.click(100, 100) It also has other features:
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 This is much easier than going through all the win32con stuff.
回答3:
You can use win32api or ctypes module to use win32 apis for controlling mouse or any gui
Here is a fun example to control mouse using 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) A click using 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 回答4:
Check out the cross platform PyMouse: https://github.com/pepijndevos/PyMouse/
回答5:
Another option is to use the cross-platform AutoPy package. This package has two different options for moving the mouse:
This code snippet will instantly move the cursor to position (200,200):
import autopy autopy.mouse.move(200,200) If you instead want the cursor to visibly move across the screen to a given location, you can use the smooth_move command:
import autopy autopy.mouse.smooth_move(200,200) 回答6:
Linux
from Xlib import X, display d = display.Display() s = d.screen() root = s.root root.warp_pointer(300,300) d.sync() 回答7:
Quick and dirty function that'll left click wherever clicks times on Windows 7 using the ctypes library. No downloads required.
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. 回答8:
Pynput is the best solution I have found, both for Windows and for Mac. Super easy to program, and works very well.
For example,
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)