Python的键盘模块指南

1,652 阅读5分钟

简介

Python 是最适合自动化任务的语言之一。无论是在一段时间后可重复的(道德的)网络刮削,在计算机启动时启动一些程序,还是自动发送平凡的电子邮件,Python 都有很多模块可以使你的生活更轻松。

其中有一个模块叫 **keyboard**的模块,它可以完全控制你的键盘。有了这个模块,你可以打出任何东西,创建热键,创建缩写,封锁键盘,等待输入,等等。

在本指南中,我们将看看如何在 Python 中设置和使用keyboard 模块。

注意:从事类人过程自动化的应用程序应该以道德和负责任的方式开发。keyboard 模块被制作成非常可观察的,因此,如果有人用它来创建键盘记录器或恶意的机器人,既不鼓励,也很透明。

安装键盘模块

注意:本指南中使用的 Python 版本是 3.8。然而,keyboard 模块可以在 Python 2.x 和 Python 3.x 上工作。

如果你使用 Linnux,为了使用这个库,你必须把它安装成root 。如果你不这样做,你会得到一个。

ImportError: You must be root to use this library on linux.

另外,当运行你的脚本时,你应该以root权限运行它。

$ sudo pip3 install keyboard
$ sudo python3 my_script.py

在Windows和MacOS上,由于权限的作用大不相同--你可以通过pip ,简单地安装它并运行脚本。

$ pip install keyboard
$ python my_script.py

注意:对于MacOS,你可能要允许终端或其他应用程序改变你的机器状态,比如说通过打字。还要记住,截至2021年9月,该库在MacOS上仍是实验性的。

键盘模块的功能

这个模块有很多函数可以用来模拟键盘动作。

  • keyboard.write(message, [delay]) -写一个信息,有或没有延迟。
  • keyboard.wait(key) -阻止程序运行,直到按下 。 是作为一个字符串传递的(key key '空格'、'esc'等)。
  • keyboard.press(key) -按下一个键并保持,直到调用 函数。release(key)
  • keyboard.release(key) -释放一个键。
  • keyboard.send(key) -按下并释放一个键。
  • keyboard.add_hotkey(hotkey, function) - 创建一个 ,当按下时,执行一个 。hotkey function
  • keyboard.record(key) - 记录键盘活动,直到 被按下。key
  • keyboard.play(recorded_events, [speed_factor]) - 重放用 函数记录的事件,可选择使用 。keyboard.record(key) speed_factor

我们将通过所有这些,不过,这里有一个快速的例子。

>>> import keyboard
>>> keyboard.write("Hello")
>>> Hello

Hello 信息出现在屏幕上,在终端,就像你写的一样。你可以非常容易地将一个命令自动化,并为它创建一个热键别名。下面是一个退出Python REPL,写一个curl 命令并执行它的(粗略)例子。

>>> import keyboard
>>> keyboard.write("exit()"); keyboard.send("enter"); keyboard.write("curl https://www.google.com"); keyboard.send("enter");
>>> exit()
curl https://www.google.com
$ curl https://www.google.com
<!doctype html><html itemscope=""...

键盘write()和wait()函数

write() 命令写一条信息,就像我们之前看到的那样,在开始时有一个可选的延迟。如果没有设置延迟,则是即时写入。它与wait() 函数结合得非常好,后者等待某个键被按下。

例如,我们可以创建一个临时的宏,比如说1 ,它对输入的信息做出反应。请注意,有一种实际的方法可以代替这种方法来创建热键,我们将在后面介绍。

我们将创建一个无限的True 循环来检查按键是否被按下,你可以在后台运行这个脚本。

import keyboard

while True:
    keyboard.wait("1")
    keyboard.write("\n The key '1' was pressed!")

注意:这个函数不支持特殊字符,所以如果你添加,比如说,! - 你会遇到一个StopIteration 异常。

键盘的press(),release()函数

由于很难模拟press()release() ,使其动作可见,我们也将看到record()play() 的动作。

press() 函数按下一个键,当你在同一个键上调用release() 时,它就会释放。注意,你不能sleep() ,以模拟按住一个键的时间。

>>> import keyboard
>>> from time import sleep
>>> keyboard.press("a")
>>> sleep(1)
>>> keyboard.release("a")
>>> a

然而,你可以通过这种方式按住一些特殊的键,如[SHIFT]或[CTRL]。

>>> keyboard.press("shift")
>>> keyboard.write("lowercase")
>>> keyboard.release("shift")

>>> LOWERCASE

键盘的record()和play()函数

并不总是要把新的键输入进去--有时,你想把正在进行的事情记录下来,然后再播放。请记住,你需要管理员权限来记录任何像这样的输入,因为该技术很容易被用来创建按键记录器。

record() 函数接受一个触发键,直到它记录,并返回一个类型为KeyboardEvent 的事件序列。然后,你可以把这个事件序列夹到play() 函数中,该函数忠实地复制它们,有一个可选的speed_factor 参数,作为原始事件的速度的乘数。

import keyboard
recorded_events = keyboard.record("esc")
keyboard.play(recorded_events)

如果我们要打印recorded_events ,它们看起来会是这样的。

KeyboardEvent(w up), KeyboardEvent(o down), ...]

这些方法的效果最好是以GIF的形式出现,或者在你的机器上重新创建。例如,写一个信息,删除它,然后写一个不同的信息的序列。

键盘的*send()*函数

send() 函数包含了press()release() 在一起,用于单键,不像write() ,用于整个句子。

import keyboard

recorded_events = keyboard.record("s")

keyboard.send("w")
keyboard.send("a")

keyboard.play(recorded_events)

一旦s 被按下,wa 的键就会被重放。

press() 功能也可以接受已按下的键的组合。例如,你可以发送一个"ctrl+shift+s" 的组合,如果你在一个支持该操作的应用程序中,保存文件的对话就会弹出来。

import keyboard

while True:
    keyboard.wait("s")
	keyboard.press("ctrl+shift+s")
	# Or for MacOS
	keyboard.press("command+shift+s)

不过,这并不是添加热键的正确方法。相反,你可以使用add_hotkey() 功能。

键盘的*add_abbreviation()*函数

add_abbreviation() 函数是一个相当漂亮的函数,因为它允许你为长输入定义缩写,并将缩写版本替换为保存的完整版本。

例如,类似于像谷歌这样的服务为大多数输入表格保存你的电子邮件,你可以创建自己的缩写,并通过[SPACE] 触发它。

>>> import keyboard
>>> keyboard.add_abbreviation("@", "john@stackabuse.com")

在运行过程中,如果你输入@ ,然后再输入[SPACE] -------长篇输入将取代输入的@

键盘的*add_hotkey()*函数

add_hotkey() 函数接受一个你想保存的热键,或者一个键的组合,以及一个函数。在这里很容易传入匿名的lambda函数,尽管你也可以添加命名的函数。

例如,让我们添加一个热键CTRL+j ,它触发一个lambda函数来记录这个。

import keyboard

keyboard.add_hotkey("ctrl+alt+j", lambda: print("ctrl+alt+j was pressed"))

热键,ctrl+alt+p ,被保存起来,当你按下这个组合时,你应该看到lambda的输出。

总结

keyboard 模块是一个轻量级的简单库,用于模拟Python中的按键和简单的自动化。它的功能不是很丰富,但可以用来实现你在日常工作中可能执行的一些任务的自动化,或者只是为了好玩。