用Python控制鼠标

时间:2009-07-25 07:15:30

标签: python mouse

如何在Python中控制鼠标光标,即将其移动到某个位置并单击,在Windows下?

15 个答案:

答案 0 :(得分:293)

在安装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)

答案 1 :(得分:98)

尝试使用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的东西容易得多。

答案 2 :(得分:72)

您可以使用win32apictypes模块使用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

答案 3 :(得分:21)

查看跨平台PyMouse:https://github.com/pepijndevos/PyMouse/

答案 4 :(得分:20)

另一种选择是使用跨平台AutoPy package。此程序包有两个不同的移动鼠标选项:

此代码段会立即将光标移动到位置(200,200):

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

如果您希望光标在屏幕上明显移动到给定位置,则可以使用smooth_move命令:

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

答案 5 :(得分:14)

的Linux

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

来源:Python mouse move in 5 lines of code (Linux only)

答案 6 :(得分:10)

截至 2020 ,您可以使用mouse

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

功能

  • 所有鼠标设备上的全局事件挂钩(捕获事件,无论 焦点)。
  • 收听并发送鼠标事件。
  • 可与 Windows和Linux 一起使用(需要sudo)。
  • 纯Python,无需编译C模块。
  • 零依赖性。轻松安装和部署,只需复制 文件。
  • Python 2和3
  • 包括高级API(例如记录和播放)。
  • 在单独的线程中自动捕获的事件,不会阻塞main 程序。
  • 经过测试并记录下来。

答案 7 :(得分:7)

使用ctypes库在Windows 7上clicks次左键单击的快速和脏功能。无需下载。

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 :(得分:7)

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)

答案 9 :(得分:2)

如果要移动鼠标,请使用以下方法:

import pyautogui
pyautogui.moveTo(x,y)

如果要单击,请使用此:

import pyautogui
pyautogui.click(x,y)

如果未安装pyautogui,则必须将python附加到CMD。转到CMD并输入:pip install pyautogui

这将为Python 2.x安装pyautogui

对于Python 3.x,您可能必须使用pip3 install pyautoguipython3 -m pip install pyautogui

答案 10 :(得分:1)

另一种选择是mouse library,我个人使用它,因为它相对简单且跨平台。

这里是使用方式:

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')

以下是来源:How to Control your Mouse in Python

答案 11 :(得分:1)

非常容易 1-安装包装:

pip install mouse

2-将库添加到项目:

import mouse

3-以它为例:

mouse.right_click()

在此网址中描述您可以使用的所有功能:

https://github.com/boppreh/mouse

答案 12 :(得分:1)

在屏幕上随机移动鼠标

它将根据您的屏幕分辨率在屏幕上随机移动鼠标。 检查下面的代码。

使用此命令安装pip install pyautogui

import pyautogui
import time
import random as rnd

#calculate height and width of screen
w, h = list(pyautogui.size())[0], list(pyautogui.size())[1]

while True:
    time.sleep(1)
    #move mouse at random location in screen, change it to your preference
    pyautogui.moveTo(rnd.randrange(0, w), 
                     rnd.randrange(0, h))#, duration = 0.1)

答案 13 :(得分:0)

可接受的答案对我有用,但不稳定(有时点击不会重新注册),因此我添加了一个额外的 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)

答案 14 :(得分:0)

如果您需要使用游戏。如本文https://www.learncodebygaming.com/blog/pyautogui-not-working-use-directinput所述,Minecraft或Fortnite之类的某些游戏都有自己的注册鼠标/键盘事件的方式。控制鼠标和键盘事件的方法是使用全新 PyDirectInput库。他们的github存储库是https://github.com/learncodebygaming/pydirectinput,并且有很多很好的信息。
这是执行鼠标循环并单击的快速代码:

import pydirectinput  # pip install pydirectinput


pydirectinput.moveTo(0, 500)
pydirectinput.click()