简介
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
被按下,w
和a
的键就会被重放。
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中的按键和简单的自动化。它的功能不是很丰富,但可以用来实现你在日常工作中可能执行的一些任务的自动化,或者只是为了好玩。