Python 自动化之 keyboard_mouse(一)

第一章 鼠标与键盘动作的录制


文章目录

  • 第一章 鼠标与键盘动作的录制
  • 前言
  • 一、前期规划(明确自己要做个什么样的东西出来)
  • 二、基本雏形构建
    • 1.引入库
    • 2.编写鼠标动作函数
    • 3.编写键盘动作函数
    • 3.调用动作函数
  • 二、如何在监控到事件的同时把它记录到txt文档里呢?
  • 三、在录制完所有东西后,该怎么优雅的停止程序呢?
  • 总结


前言

自动化也是本人比较感兴趣的领域之一,为什么呢?因为我有点懒。。O(∩_∩)O哈哈~。言归正传,接下来我会出一期关于《如何录制与回放鼠标和键盘动作》的教程文章,希望大家喜欢。

这一章主要跟大家讲一下动作的录制,后面会跟大家讲一下如何回放。


一、前期规划(明确自己要做个什么样的东西出来)

第一,要录制哪些动作:鼠标的移动、点击、拖拽、滑轮和键盘的按键、松键等等。可以看出动作有很多,慢慢来。

第二,采用哪种方式去录制。Python提供了多种库给我们选择,不同的库虽然都可以使用,但它们的着重点也不尽相同,大家根据自己的喜好自行选择。这里本人用pynput库来进行录制。

第三,如何将录制的动作信息记录下来。这里我就暂时是用txt记录一下。

第四,如何优雅的停止程序。

基本的知识点我就不普及了哈,大家自行补习一下。我就直接单刀直入,上干货O(∩_∩)O哈哈~

二、基本雏形构建

1.引入库

代码如下:

from pynput.keyboard import Listener as KeyboardListener
from pynput.mouse import Listener as MouseListener

这段代码意思是从 pynput 库的 keyboard和mouse 模块中导入了 Listener 类。Listener 类用于监视鼠标和键盘事件,例如按键按下和释放。

as KeyboardListener的意思是重名成KeyboardListener。这样方便后续鼠标和键盘监听的区别。


2.编写鼠标动作函数

代码如下:

def on_move(x, y):
    mouse_action = {'x': x, 'y': y, 'type': 'move'}

def on_click(x, y, button, pressed):
    if pressed:    #如果鼠标左键或右键按压了
        mouse_action = {'x': x, 'y': y, 'type': 'press', 'button': f'{button.name}'}

    else:    #如果鼠标左键或右键释放了
        mouse_action = {'x': x, 'y': y, 'type': 'release', 'button': f'{button.name}'}

def on_scroll(x, y, dx, dy):
    mouse_action = {'x': x, 'y': y, 'type': 'scroll', 'dx': dx, 'dy': dy}

从上往下以此是鼠标的移动、点击、滚轮动作函数。
说到这里又增加了一个新知识:函数。看不懂的要回去复习一下哦。要不然后面会看的很吃力。


3.编写键盘动作函数

代码如下:

def on_press(key):
    try:
        key_action = {'key': key.char, 'type': 'key'}
    except AttributeError:
        key_action = {'key': f'{key.name}', 'type': 'special key'}

def on_release(key):
    try:
        key_action = {'key': key.char, 'type': 'key'}
    except AttributeError:
        key_action = {'key': f'{key.name}', 'type': 'special key'}

在这里呢,我在函数里用了一个try—except结构,问什么呢?因为它将键盘分为了普通键和特殊键。

大致解释如下:首先尝试将按键对象的 char 属性(即按键对应的字符)赋值给字典 key_action 的 ‘key’ 键。如果按键没有 char 属性(例如,特殊键如方向键或功能键),则会引发 AttributeError 异常。在这种情况下,使用异常处理语句来捕获这个异常,并将按键对象的 name 属性(即按键的名称)赋值给 key_action 字典的 ‘key’ 键。同时,无论哪种情况,都将 ‘type’ 键设置为 ‘key’ 或 ‘special key’,以区分普通字符键和特殊键。


3.调用动作函数

代码如下:

# 开始监听鼠标事件
mouse_listener = MouseListener(on_click=on_click, on_move=on_move, on_scroll=on_scroll)
mouse_listener.start()

# 开始监听键盘事件
keyboard_listener = KeyboardListener(on_press=on_press, on_release=on_release)
keyboard_listener.start()

# 等待监听器结束
mouse_listener.join()
keyboard_listener.join()

这里调用了上文写的动作函数,同时也用到了Listener函数。运行程序就可以进行动作事件的监听了。

but,到这里远没有结束。同志们接着往下看O(∩_∩)O哈哈~。


二、如何在监控到事件的同时把它记录到txt文档里呢?

首先,我们需要创建一个txt文档。“w” :表示可写入

log_file = open("mouse_keyboard.txt", "w")

其次,我们需要对上面的动作函数进行修改,每个动作事件后面加上一个添加事件到txt文档里的动作。各位想一想,是不是这么一回事。

修改代码如下:

# 鼠标动作
def on_move(x, y):
    mouse_action = {'x': x, 'y': y, 'type': 'move'}
    log_file.write(f" 鼠标操作: 移动到({x}, {y})\n")

def on_click(x, y, button, pressed):
    if pressed:
        mouse_action = {'x': x, 'y': y, 'type': 'press', 'button': f'{button.name}'}
        log_file.write(f" 鼠标操作: 按下,位置({x}, {y}), 按钮: {button.name}\n")
    else:
        mouse_action = {'x': x, 'y': y, 'type': 'release', 'button': f'{button.name}'}
        log_file.write(f" 鼠标操作: 松开,位置({x}, {y}), 按钮: {button.name}\n")

def on_scroll(x, y, dx, dy):
    mouse_action = {'x': x, 'y': y, 'type': 'scroll', 'dx': dx, 'dy': dy}
    log_file.write(f" 鼠标操作: 滚动,位置({x}, {y}), 滚动方向: ({dx}, {dy})\n")

# 键盘操作
def on_press(key):
    try:
        key_action = {'key': key.char, 'type': 'key'}
        log_file.write(f" 键盘事件: 按键: {key_action['key']}\n")
    except AttributeError:
        key_action = {'key': f'{key.name}', 'type': 'special key'}
        log_file.write(f" 键盘事件: 按键: {key_action['key']}\n")

def on_release(key):
    try:
        key_action = {'key': key.char, 'type': 'key'}
        log_file.write(f" 键盘事件: 松键: {key_action['key']}\n")
    except AttributeError:
        key_action = {'key': f'{key.name}', 'type': 'special key'}
        log_file.write(f" 键盘事件: 松键: {key_action['key']}\n")
    

代码就放在这里了,各位慢慢消化。


三、在录制完所有东西后,该怎么优雅的停止程序呢?

在这里我给大家提供一个思路,触发键盘某个键来停止程序,比如键盘上的esc键,当按下或者松开esc键,程序game over。

这里以松开esc键为触发事件来停止程序。

修改代码如下:

def on_release(key):
    try:
        key_action = {'key': key.char, 'type': 'key'}
        log_file.write(f" 键盘事件: 松键: {key_action['key']}\n")
    except AttributeError:
        key_action = {'key': f'{key.name}', 'type': 'special key'}
        log_file.write(f" 键盘事件: 松键: {key_action['key']}\n")
    if key == keyboard.Key.esc:
        keyboard_listener.stop()
        mouse_listener.stop()

鼠标和键盘动作录制到此就告一段落了。


总结

最后做个总结,到这里算是成功了一半了,大家可以复制一下代码运行试一下,下图是我的运行结果。

Python 自动化之 keyboard_mouse(一)_第1张图片
大家可以在此基础上进行修改,比如txt记录动作事件的同时也记录下事件发生的时间。想一下怎么做,下一章我再跟大家揭晓。

你可能感兴趣的:(Python,自动化,python,自动化,开发语言)