Python解放双手
一、前言
Python 中提供了很多模块可以用于控制输入设备,像是传统的 win32gui,或者是用于游戏开发的 Pygame。其中 win32gui 更贴切的说是基于 Windows 的编程,它的操作丰富多样,可以获取每个窗口,也可以获取窗口的句柄等。而 Pygame 的长处在于 2D 游戏的开发。而今天要讲的 pynput 则不同,它操作非常简单,而且里面包含的内容也更贴切输入设备,其中非常重要的两个模块就是 mouse 和 keyboard,分别提供了控制鼠标和键盘的类,下面我们就来看看一些具体操作。 二、控制鼠标
我们先来安装这个模块,安装起来非常简单,我们直接使用 pip 安装:
pip install pynput
接下来就可以使用该模块了。我们导入 mouse 模块:
from pynput import mouse
在 mouse 模块中提供了一个 Controller 类,该类就是我们的鼠标控制器,我们创建该类的对象就可以鼠标键盘:
from pynput import mouse
# 创建一个鼠标
m = mouse.Controller()
获取了鼠标对象后,我们就可以获取一些属性,或者进行一些操作。 2.1、获取鼠标位置
我们可以获取鼠标的位置信息,也就是当前鼠标所在的坐标:
from pynput import mouse
# 创建一个鼠标
m = mouse.Controller()
# 输出鼠标的位置
print(m.position)
输出结果为一个元组。 2.2、定位鼠标
我们也可以直接修改鼠标的位置:
from pynput import mouse
# 创建鼠标
m = mouse.Controller()
# 将鼠标移动到左上角
m.position = (0, 0)
这种方式是直接定位鼠标,我们还可以根据当前位置移动鼠标。 2.3、移动鼠标
移动鼠标调用的是 move 函数:
from pynput import mouse
# 创建鼠标
m = mouse.Controller()
# 将鼠标移动到左上角
m.move(50, -50)
第一个参数为 x 移动的值,第二个参数为 y 移动的值。
另外一般鼠标上都会有三个控制按钮,左键、右键和滚轮,下面我们看看如何操作它们。 2.4、点击鼠标
我们点击按钮时都会先按下按钮,然后再松开按钮:
from pynput import mouse
# 创建鼠标
m = mouse.Controller()
# 按下鼠标右键
m.press(mouse.Button.right)
# 松下鼠标右键
m.release(mouse.Button.right)
在 mouse 提供了 Button 类,里面内置了左键和右键的常量,我们直接使用就可以了。
除了上面的方法,我们还可以直接调用 click 方法,点击鼠标:
from pynput import mouse
# 创建鼠标
m = mouse.Controller()
# 点击鼠标左键
m.click(mouse.Button.left)
2.5、双击鼠标
双击也是个非常常用的操作,我们同样可以使用 click 方法:
from pynput import mouse
# 创建鼠标
m = mouse.Controller()
# 点击鼠标左键
m.click(mouse.Button.left, 2)
click 方法接收两个参数,第一个为按钮,第二个为非必选参数,含义为点击的次数。 1.6、滚动滚轮
对于像 Excel 表这种大型的表格,我们经常需要上下左右滚动,而 mouse 模块中就提供了这样的方法:
from pynput import mouse
# 创建鼠标
m = mouse.Controller()
# 滚动鼠标,第一个参数为 y 滚动的数值,第二个参数为 x 滚动的数值
m.scroll(0, -10)
2.7、监听鼠标的事件
鼠标中的事件有三个,点击事件、移动事件、滚动事件,我们看看如何监听鼠标的事件:
from pynput import mouse
def on_move(x, y):
"""鼠标移动的监听方法 x,y 为移动后的位置"""
print('鼠标移动到了{0}'.format((x, y)))
def on_click(x, y, button, pressed):
"""鼠标点击的监听方法 x,y 为坐标,button 为按钮,pressed 为是否是按下"""
if pressed:
print('点击了({0}, {1})'.format(x, y))
else:
print('鼠标在({0}, {1})松开'.format(x, y))
def on_scroll(x, y, dx, dy):
"""鼠标滚动的监听方法 x,y 为作为,dx,dy 为滚动幅度"""
print('鼠标在{0}, 向右滚动{1}, 向下滚动{2}'.format((x, y), dx, dy))
# 创建一个监听者
with mouse.Listener(
# 关联监听方法(不加括号)
on_move=on_move,
on_click=on_click,
on_scroll=on_scroll) as listener:
# 阻塞线程
listener.join()
我们的 mouse 模块提供了 Listener 类,该类的对象就是我们的监听者。当我们触发某个事件时,监听者就会执行关联好的方法。
三、控制键盘
在 pynput 中提供了 keyboard 模块,该模块中提供了与 mouse 模块类似的一些类,这些类可以用于控制键盘。其中 keyboard 中也有一个 Controller 类,该类对象就是我们的键盘控制器。
from pynput import keyboard
# 创建一个键盘
kb = keyboard.Controller()
我们可以通过上述代码创建一个键盘控制器。有了控制器我们就可以操作这个键盘了。 3.1、按下并松开某个键
这里同样是调用 press 和 release 方法:
from pynput import keyboard
# 创建一个键盘
kb = keyboard.Controller()
# 按下 a 键
kb.press('a')
# 松开 a 键
kb.release('a')
上面我们是通过传入字符的方式按按钮,这里只能点击单个字符的按钮。在 keyboard 模块中 Key 类中,提供了大量预设的按钮,我们可以直接使用:
from pynput import keyboard
# 创建键盘
kb = keyboard.Controller()
# 按下大小写锁定
kb.press(keyboard.Key.caps_lock)
# 松开大小写锁定
kb.release(keyboard.Key.caps_lock)
上面就是我们 press 和 release 的用法了。 3.2、按下两个按钮
我们可以通过多次调用 press 的方法按下几个按钮,当然我们还有一种简便写法:
from pynput import keyboard
# 创建一个键盘
kb = keyboard.Controller()
# 按下 shift+a
with kb.pressed(keyboard.Key.shift):
kb.press('a')
kb.release('a')
上面的效果就是我们打出了一个 A。 3.3、打字
理论上来说,press 和 release 方法可以完成键盘大多数操作,打字也不例外,但是出于效率的考虑我们可以使用 type 方法:
from pynput import keyboard
# 创建键盘
kb = keyboard.Controller()
# 打字
kb.type('Hello world')
在我们打中文字的时候,输入法并不会影响我们的操作。当时当我们打英文时,如果输入法是中文模式,则会是我们平时打拼音的效果。 3.4、事件监听
键盘的监听同样是由 keyboard 中 Listener 类实现的:
from pynput import keyboard
# 按下按钮
def on_press(key):
print('按下了{0}'.format(key))
# 松开按钮
def on_release(key):
print('松开了{0}'.format(key))
# 监听
with keyboard.Listener(
on_press=on_press,
on_release=on_release) as listener:
listener.join()
https://mp.weixin.qq.com/s/35fjE4Vd4S4evIh8O5Maqg