一、pynput库
(一)简介
pynput是一个Python的第三方库,它允许你控制和监控输入设备。该库提供了一个简单的接口来处理键盘和鼠标事件,包括按键和鼠标移动、点击等。这个库非常适合用于自动化测试、游戏辅助脚本、快捷键映射等场景。 pynput可以通过pip命令来进行安装,如下所示:
pip install pynput 对于鼠标和键盘,pynput包含不同的子包来控制该种设备:
from pynput import mouse # 鼠标包 from pynput import keybaord # 键盘包 每个子包又都包含监控和控制两个类:
from pynput import mouse, keybaord Listener_mouse = mouse.Listener # 鼠标监听类 Listener_key = keybaord.Listener # 键盘监听类 control_mouse = mouse.Controller() # 鼠标控制类 control_key = keybaord.Controller() # 键盘控制类 (二)监听鼠标和键盘事件
from pynput import mouse, keybaord ### 鼠标事件监听 Listener_mouse = mouse.Listener(on_move=on_move, on_click=on_click, on_scroll) Listener_mouse.start() # 开始监听 def on_move(x, y): # 鼠标移动监听 print(f'当前位置: ({x}, {y})') Listener_mouse.stop() # 结束监听 def on_click(x, y, button, pressed): # 鼠标点击监听 print(f'点击位置: ({x}, {y})') print(f'点击按钮: {button}') print(f'点击状态: {"按下" if pressed else "松开"}') Listener_mouse.stop() # 结束监听 def on_scroll(x, y, dx, dy): # 鼠标滚轮滑动监听 print(f'滚动位置: ({x}, {y})') print(f'滚动方向: ({dx}, {dy})') Listener_mouse.stop() # 结束监听 ### 键盘事件监听 def on_press(key): # 键盘按键按下监听 try: print('字母数字键 {0} 被按下'.format(key.char)) except AttributeError: print('特殊按键 {0} 被按下'.format(key)) def on_release(key): # 鼠标按键释放监听 print('{0} 被释放'.format(key)) if key == keyboard.Key.esc: return False # 收集事件直到按键释放 with keyboard.Listener(on_press=on_press, on_release=on_release) as listener: listener.join() *注:with语句和listener.start()、listener.stop()是两种监听鼠标和键盘的方法,可以相互替换。当使用with语句监听时,任意一个函数返回False时或出现异常时,就会结束监听进程。
(三)控制鼠标和键盘
### 键盘事件监听 from pynput import mouse, keybaord control_mouse = mouse.Controller() control_key = keybaord.Controller() ## 控制鼠标 position_mouse = control_mouse.position # 获取鼠标当前的位置坐标,以元组的形式保存 print(position_mouse) # 打印位置坐标 control_mouse.position = (100, 100) # 改变鼠标的位置至(100, 100) control_mouse.move(10, 10) # 移动鼠标至位置(10, 10) control_mouse.press(mouse.Button.left) # 按下鼠标左键 control_mouse.press(mouse.Button.right) # 按下鼠标右键 control_mouse.press(mouse.Button.middle) # 按下鼠标中键 control_mouse.release(mouse.Button.left) # 释放鼠标左键 control_mouse.click(mouse.Button.left, 1) # 单击鼠标左键 control_mouse.click(mouse.Button.left, 2) # 双击鼠标左键 control_mouse.scroll(0, -100) # 鼠标滚轮向上滑动 control_mouse.scroll(0, 100) # 鼠标滚轮向下滑动 ## 控制键盘 control_key.press(keyboard.KeyCode.from_char(“a”)) # 按下“a”键 control_key.press(“a”) # 按下“a”键 control_key.release(keyboard.KeyCode.from_char(“a”)) # 释放“a”键 control_key.release(“a”) # 释放“a”键 # 同时按下“a”键和“shift”键 with control_key.pressed(keyboard.Key.shift): control_key.press('a') control_key.release('a') # 顺序按下按键,逆序释放按键 with keyboard.Controller.pressed( keyboard.Key.ctrl, keyboard.Key.shift, 's'): pass with keyboard.Controller.released( 's', keyboard.Key.shift, keyboard.Key.ctrl): pass # 输出字符串 control_key.type('hello word.') *注:使用pressed()方法的时候加上with封装,进入语句时顺序按下提供的按键,退出时逆序释放按键。