安装pynput库
pip install pynput
官方文档: https://pythonhosted.org/pynput/
鼠标控制
- 创建鼠标控制对象
mouse = Controller()
- 获取一次当前鼠标位置
position
- 返回值:tuple (x, y)
x,y=mouse.position#返回了一个位置坐标的元组
print("x方向鼠标位置:{},y方向鼠标位置:{}".format(x,y))
- 修改鼠标位置
mousePosition=mouse.position
print("修改前鼠标位置:{0}".format(mousePosition))
mouse.position=(666,666)#把鼠标位置设置为 (666,666)
mouseposition=mouse.position
print("修改后鼠标位置:{0}".format(mouseposition))
- 鼠标执行点击与弹起
print("3秒后点击鼠标停留的位置")
win32api.Sleep(3000)#休眠等待3秒
# 模拟左键点击与弹起操作
mouse.position=(666,666)#把鼠标位置设置为 (666,666)
mousePosition=mouse.position
print("即将被左键点击与弹起的鼠标位置:{0}".format(mousePosition))
mouse.press(Button.left)#左键按下
win32api.Sleep(50)#有些要求点击有一些延迟
mouse.release(Button.left)#左键弹起
# 模拟右键点击与弹起操作
print("即将被右键点击与弹起的鼠标位置:{0}".format(mousePosition))
mouse.press(Button.right)#右键按下
win32api.Sleep(50)#有些要求点击有一些延迟
mouse.release(Button.right)#右键弹起
- 鼠标点击封装调用
click(button, count=1)
- button (Button),鼠标按键类型:左键 mouse.Button.left,右键 mouse.Button.right,中键 mouse.Button.middle
- count (int),点击次数
mouse.position=(888,888)
mousePosition=mouse.position
mouse.click(Button.left,1)#鼠标左键点击1次,第一个参数表示左右键,第二个参数表示点击次数
def mzhClick(ButtonType,clickTimes,clickDelay):
# 模拟左键点击延迟一段时间后再弹起的操作
for i in range(clickTimes):
mouse.press(ButtonType)#左键按下
win32api.Sleep(clickDelay)#有些时候,我们的这个点击延迟可以加入随机数,这样看起来更接近真人的操作
mouse.release(ButtonType)#左键弹起
mouse.position=(629,254)
mousePosition=mouse.position
mzhClick(Button.left,2,10)#双击,每次点击弹起延时10毫秒
- 移动鼠标的位置
mouse.move(10, 10)
- 鼠标滚轮滚动
mouse.scroll(0, -100)
mouse.scroll(0, 100)
示例:
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)
鼠标监听
pynput.mouse.Listener(on_move=None, on_click=None, on_scroll=None)
- on_move (callable)
- on_click (callable)
- on_scroll (callable)
listener.start()
try:
with_statements()
finally:
listener.stop()
鼠标移动监听
import win32api
import time
from pynput.mouse import Listener, Button
def mouseListener(on_move):#监听函数
with Listener(on_move=on_move) as listener:#定义on_move回调函数用于在鼠标移动时生效
listener.join()#添加监听器
def on_move(x, y):
timeStruct = time.localtime(int(time.time())) # 获得当前时间时间戳后转化为本地时间
strTime = time.strftime("%Y-%m-%d %H:%M:%S", timeStruct) # 日期格式 2022-08-23 07:26:21
print("{}鼠标坐标:{}".format(strTime,(x, y)))
#win32api.Sleep(100) #警告:不要取消注释这一行代码。不要尝试在这入延时,否则会真的让你的鼠标移动速度变慢,你可以类比理解为降低了你的鼠标DPI
#也许你可以用上述特性来制作一个软件用于在fps游戏中压枪·······?
mouseListener(on_move)#调用我们写好的监听函数
鼠标点击监听
from pynput.mouse import Listener, Button
def mouseListener(on_click):
with Listener(on_click=on_click) as listener:#定义on_click回调函数用于在鼠标点击时生效
listener.join()
def on_click(x, y, button, pressed):
print("鼠标位置为:{},执行操作为:{},是否点击或松开:{}".format((x, y), button, pressed))
mouseListener(on_click)
鼠标点击、滚动、拖动监听
from pynput.mouse import Listener, Button
from pynput import mouse
def mouseListener(on_move, on_click, on_scroll):
with Listener(on_move=on_move, on_click=on_click, on_scroll=on_scroll) as listener:
listener.join()
def on_move(x, y):
pass
def on_click(x, y, button, pressed):
if button == mouse.Button.left:
print('鼠标左键单击')
elif button == mouse.Button.right:
print('鼠标右键单击')
else:
print('鼠标滚轮按下,即将结束程序')
print("鼠标坐标:{},鼠标操作为:{},鼠标按下弹起状态:{}".format((x, y), button, pressed))
if button == Button.middle:
return False
#其实这里滚动监听不知道为啥有点问题,我只能监听滚轮,大家有知道的可以评论区讨论分享一下
def on_scroll(x, y, dx, dy):
print("鼠标位置为:{},滚轮上下滑动,1表示上滚,-1表示下滚:{}".format((x, y), (dx, dy)))
mouseListener(on_move, on_click, on_scroll)
官网示例:移动鼠标会显示其坐标,按下鼠标按键并松开后,程序结束。当三个函数任意一个返回False((还有就是释放Exception或继承自Exception的异常)时,就会结束进程。
from pynput.mouse import Listener
def on_move(x, y):
print('Pointer moved to {0}'.format(
(x, y)))
def on_click(x, y, button, pressed):
print('{0} at {1}'.format(
'Pressed' if pressed else 'Released',
(x, y)))
if not pressed:
# Stop listener
return False
def on_scroll(x, y, dx, dy):
print('Scrolled {0}'.format(
(x, y)))
# Collect events until released
with Listener(
on_move=on_move,
on_click=on_click,
on_scroll=on_scroll) as listener:
listener.join()