Python自动化:pynput键盘鼠标操作全攻略

438 阅读2分钟

键盘操作

需要执行 pressrelease 来输入按键。 当然,也可以单独执行 press

from pynput.keyboard import Key, Controller
from time import sleep

# 初始化键盘控制器
keyboard = Controller()

sleep(3)

# 模拟按下和释放 A 键
keyboard.press('a')
keyboard.release('a')

# 模拟按下和释放 Enter 键
keyboard.press(Key.enter)
keyboard.release(Key.enter)

鼠标操作

from pynput.mouse import Button,Controller
from time import sleep

# 初始化鼠标控制器
mouse = Controller()

sleep(3)

# 模拟鼠标移动到 (100, 100) 位置
mouse.position = (100, 100)

mouse.click(Button.left,1)

# 模拟鼠标右键点击
mouse.click(Button.right, 1)

注意:这里引入的是 pynput.mouse 的 Controller,与键盘处的名称相同,但是作用不同,需要区分。推荐使用别名的方式将 Controller 命名为 MouseController。下面的方法也会用别名的方式进行区分。

from pynput.mouse import Controller as MouseController

键盘监听

from pynput.keyboard import Listener as KeyboardListener

def on_press(key):
    print(f'Alphanumeric key pressed: {key}')

def on_release(key):
    print(f'Alphanumeric key released: {key}')
    if key == Key.esc:
        # 停止监听
        return False
  
# 设置键盘监听
with KeyboardListener(on_press=on_press, on_release=on_release) as listener:
    listener.join()

该方法输出用户按下的按键,当用户按下 Esc 时停止。

全局热键监听

def keyboard_hotkey():
    keyboard_controller = Controller()
  
    def on_activate_f():
        print('全局热键 F 被激活')
        keyboard_controller.type('你按了热键F')

    def on_activate_shift_a():
        print('全局热键 Shift+A 被激活')
        keyboard_controller.type('你按了热键Shift+A')

    # 创建热键
    with keyboard.GlobalHotKeys({
            'f': on_activate_f,
            '<shift>+a': on_activate_shift_a}) as h:
        h.join()

鼠标监听

from pynput.mouse import Listener as MouseListener

def mouse_listener():
    # 添加左键点击计数器
    left_click_count = 0
  
    def on_move(x, y):
        print(f'Mouse moved to ({x}, {y})')
  
    def on_click(x, y, button, pressed):
        nonlocal left_click_count
        print(f'Mouse clicked at ({x}, {y}) with {button}')
        # 检查是否是左键点击且按下状态
        if button == Button.left and pressed:
            left_click_count += 1
            print(f'左键点击次数: {left_click_count}')

            # 如果左键点击次数超过三次,停止监听
            if left_click_count >= 3:
                print('左键点击已达到3次,停止监听')
                return False

    def on_scroll(x, y, dx, dy):
        print(f'Scrolled at ({x}, {y})')

  

    # 设置鼠标监听
    with MouseListener(on_move=on_move, on_click=on_click, on_scroll=on_scroll) as listener:
        listener.join()

mouse_listener()

该示例记录鼠标信息,当鼠标左键点击三次停止。

Photo by Daniil Silantev on Unsplash