用Python控制鼠标

如何在Python中控制鼠标光标,即移动到特定位置并单击,在Windows下?

573727 次浏览

Linux

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

来源:5行Python鼠标移动代码(仅适用于Linux)

测试在WinXP, Python 2.6(3。在安装pywin32(在我的情况下是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)

你可以使用win32apictypes模块来使用win32 api来控制鼠标或任何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

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

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

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

如果你想让光标在屏幕上移动到一个给定的位置,你可以使用smooth_move命令:

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

快速和肮脏的函数,将在Windows 7上使用ctypes库左键单击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.

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

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)

另一个替代方案是老鼠库,我个人使用它,因为它相对简单和跨平台。

下面是你如何使用它:

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中控制鼠标

接受的答案为我工作,但它是不稳定的(有时点击不会注册),所以我添加了一个额外的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)

如果你想移动鼠标,使用这个:

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

2022开始,你可以使用鼠标:

import mouse
mouse.move("500", "500")
mouse.click() # default to left click
# mouse.right_click()
# mouse.double_click(button='left')
# mouse.double_click(button='right')
# mouse.press(button='left')
# mouse.release(button='left')

完整的Api文档

特性

  • 所有鼠标设备上的全局事件钩子(无论如何捕获事件 李聚焦)。< / >
  • 监听并发送鼠标事件。
  • 使用Windows和Linux(需要sudo)。
  • 纯Python,不需要编译C模块。
  • <李> 0依赖性。简单的安装和部署,只需复制 李文件。< / >
  • Python 2 / 3
  • 包括高级API(例如记录和播放)。
  • 事件自动捕获在单独的线程,不阻塞主 李计划。< / >
  • 测试并记录。

安装

  • Windows: pip install mouse
  • Linux: sudo pip install mouse
< p >非常容易 1- install package:

pip install mouse

2-添加库到项目:

import mouse

3-举个例子:

mouse.right_click()

在这个url中描述所有你可以使用它的函数:

https://github.com/boppreh/mouse

在屏幕上随机移动鼠标

它将根据您的屏幕分辨率在屏幕上随机移动鼠标。

使用此命令安装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)

如果你需要使用游戏。正如本文https://www.learncodebygaming.com/blog/pyautogui-not-working-use-directinput中所解释的,像《我的世界》或《堡垒之夜》这样的游戏有自己的鼠标/键盘事件注册方式。控制鼠标和键盘事件的方法是使用全新的 PyDirectInput库。他们的github存储库是https://github.com/learncodebygaming/pydirectinput,有很多很棒的信息。
下面是一个快速代码,执行鼠标循环,点击:

import pydirectinput  # pip install pydirectinput




pydirectinput.moveTo(0, 500)
pydirectinput.click()
import ctypes
from time import sleep


SetCursorPos = ctypes.windll.user32.SetCursorPos
print("Woohoo!\nTake Rest!\nMouse pointer will keep moving!\n\nPress ctrl+c to stop...!")
while True:
SetCursorPos(300, 300)
sleep(2)
SetCursorPos(500, 500)
sleep(4)

尝试使用pyautogui,简单,也可以模拟键盘上的按键

< p >尝试Clicknium, https://www.clicknium.com/documents/references/python/mouse/ 它可以控制鼠标和键盘,并帮助您定位web浏览器和桌面应用程序中的UI元素

这是一个沿着圆圈移动鼠标的示例

from time import sleep
import math
from clicknium import clicknium as cc
def circle():
a,b = cc.mouse.position()
w = 20
m = (2*math.pi)/w
r = 200


while 1:
for i in range(0, w+1):
x = int(a+r*math.sin(m*i))
y = int(b+r*math.cos(m*i))
cc.mouse.move(x,y)
sleep(0.2)


if __name__ == "__main__":
circle()