自动化也是本人比较感兴趣的领域之一,为什么呢?因为我有点懒。。O(∩_∩)O哈哈~。言归正传,接下来我会出一期关于《如何录制与回放鼠标和键盘动作》的教程文章,希望大家喜欢。
这一章主要跟大家讲一下动作的录制,后面会跟大家讲一下如何回放。
第一,要录制哪些动作:鼠标的移动、点击、拖拽、滑轮和键盘的按键、松键等等。可以看出动作有很多,慢慢来。
第二,采用哪种方式去录制。Python提供了多种库给我们选择,不同的库虽然都可以使用,但它们的着重点也不尽相同,大家根据自己的喜好自行选择。这里本人用pynput库来进行录制。
第三,如何将录制的动作信息记录下来。这里我就暂时是用txt记录一下。
第四,如何优雅的停止程序。
基本的知识点我就不普及了哈,大家自行补习一下。我就直接单刀直入,上干货O(∩_∩)O哈哈~
代码如下:
from pynput.keyboard import Listener as KeyboardListener
from pynput.mouse import Listener as MouseListener
这段代码意思是从 pynput 库的 keyboard和mouse 模块中导入了 Listener 类。Listener 类用于监视鼠标和键盘事件,例如按键按下和释放。
as KeyboardListener的意思是重名成KeyboardListener。这样方便后续鼠标和键盘监听的区别。
代码如下:
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}
从上往下以此是鼠标的移动、点击、滚轮动作函数。
说到这里又增加了一个新知识:函数。看不懂的要回去复习一下哦。要不然后面会看的很吃力。
代码如下:
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’,以区分普通字符键和特殊键。
代码如下:
# 开始监听鼠标事件
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文档。“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()
鼠标和键盘动作录制到此就告一段落了。
最后做个总结,到这里算是成功了一半了,大家可以复制一下代码运行试一下,下图是我的运行结果。