当前位置:   article > 正文

【python自动化】03. pynput库自动操作键鼠(保姆级代码注释)

pynput


『python自动化』分享win32gui、cv2、easyocr等库相关的新手入门教程,目标是编写python程序进行自动化办公,解放双手。

欢迎关注 『python自动化』 系列,持续更新中
欢迎关注 『python自动化』 系列,持续更新中

资源下载

拿来即用,所见即所得。

我的gitee仓库pynput库自动操作键鼠
在这里插入图片描述


安装pynput库

pip install pynput
  • 1

在这里插入图片描述


实现思路

  • pynput库比起之前的pywin32库提供了更简便的键鼠操作。

  • 另一个区别是先初始化一个鼠标或是键盘的对象,对于这个对象进行操作,不同于面向窗口的win32。但是缺点是,导致了前台的问题,操作顶层的前台窗口。

API介绍

下面的代码实战会详细介绍每个方法的参数,也可以访问pywin32的官方文档查看。(建议这么做,因为以后我们自学其他库都要经历查看文档这个过程)

官网网址
https://pythonhosted.org/pynput/
  • 1
  • 2

代码实战

一、鼠标控制

1. 创建鼠标控制对象

mouse = Controller()
  • 1

2. 获取一次当前鼠标位置

原型:鼠标对象.position
实例:x,y=mouse.position

x,y=mouse.position#返回了一个位置坐标的元组
print("x方向鼠标位置:{},y方向鼠标位置:{}".format(x,y))
  • 1
  • 2

3. 修改鼠标位置

原型:鼠标对象.position=(x坐标,y坐标)
实例:mouse.position=(666,666)

mousePosition=mouse.position
print("修改前鼠标位置:{0}".format(mousePosition))
mouse.position=(666,666)#把鼠标位置设置为  (666,666)
mouseposition=mouse.position
print("修改后鼠标位置:{0}".format(mouseposition))
  • 1
  • 2
  • 3
  • 4
  • 5

4. 鼠标执行点击与弹起

原型:鼠标对象.press=(按键)
实例:mouse.press(Button.left)

print("3秒后点击鼠标停留的位置")
win32api.Sleep(3000)#休眠等待3秒
# 模拟左键点击与弹起操作
mouse.position=(666,666)#把鼠标位置设置为  (666,666)
mousePosition=mouse.position
print("即将被左键点击与弹起的鼠标位置:{0}".format(mousePosition))
mouse.press(Button.left)#左键按下
win32api.Sleep(50)#有些要求点击有一些延迟
mouse.release(Button.left)#左键弹起
# 模拟右键点击与弹起操作
print("即将被右键点击与弹起的鼠标位置:{0}".format(mousePosition))
mouse.press(Button.right)#右键按下
win32api.Sleep(50)#有些要求点击有一些延迟
mouse.release(Button.right)#右键弹起
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

5. 鼠标点击封装调用

官方现有的函数
原型:mouse.click(操作的鼠标键位,点击次数)
示例:mouse.click(Button.left,1)
返回值:None

mouse.position=(888,888)
mousePosition=mouse.position
mouse.click(Button.left,1)#鼠标左键点击1次,第一个参数表示左右键,第二个参数表示点击次数
  • 1
  • 2
  • 3

我们自己封装一个函数,新增了一个参数用于表示点击延迟
原型:mzhClick(操作的鼠标键位,点击次数,点击延迟)
示例:mzhClick(Button.left,2,10)
返回值:None

def mzhClick(ButtonType,clickTimes,clickDelay):
    # 模拟左键点击延迟一段时间后再弹起的操作
    for i in range(clickTimes):
        mouse.press(ButtonType)#左键按下
        win32api.Sleep(clickDelay)#有些时候,我们的这个点击延迟可以加入随机数,这样看起来更接近真人的操作
        mouse.release(ButtonType)#左键弹起
mouse.position=(629,254)
mousePosition=mouse.position
mzhClick(Button.left,2,10)#双击,每次点击弹起延时10毫秒
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

二、鼠标监听

1. 鼠标移动监听

这个程序运行后你的所有鼠标移动都会有显示提示,不移动则不会输出信息。

import win32api
import time
from pynput.mouse import Listener, Button

def mouseListener(on_move):#监听函数
    with Listener(on_move=on_move) as listener:#定义on_move回调函数用于在鼠标移动时生效
        listener.join()#添加监听器

def on_move(x, y):
    timeStruct = time.localtime(int(time.time()))  # 获得当前时间时间戳后转化为本地时间
    strTime = time.strftime("%Y-%m-%d %H:%M:%S", timeStruct)  # 日期格式 2022-08-23 07:26:21
    print("{}鼠标坐标:{}".format(strTime,(x, y)))
    #win32api.Sleep(100)  #警告:不要取消注释这一行代码。不要尝试在这入延时,否则会真的让你的鼠标移动速度变慢,你可以类比理解为降低了你的鼠标DPI
    #也许你可以用上述特性来制作一个软件用于在fps游戏中压枪·······?
mouseListener(on_move)#调用我们写好的监听函数
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

在这里插入图片描述

2. 鼠标点击监听

原型:mouseListener(点击监听回调)
示例:mouseListener(on_click)

from pynput.mouse import Listener, Button

def mouseListener(on_click):
    with Listener(on_click=on_click) as listener:#定义on_click回调函数用于在鼠标点击时生效
        listener.join()

def on_click(x, y, button, pressed):
    print("鼠标位置为:{},执行操作为:{},是否点击或松开:{}".format((x, y), button, pressed))
mouseListener(on_click)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

在这里插入图片描述

3. 监听鼠标点击、滚动、拖动

原型:mouseListener(移动监听回调, 点击监听回调, 滚动监听回调)
示例:mouseListener(on_move, on_click, on_scroll)

from pynput.mouse import Listener, Button
from pynput import mouse

def mouseListener(on_move, on_click, on_scroll):
    with Listener(on_move=on_move, on_click=on_click, on_scroll=on_scroll) as listener:
        listener.join()
def on_move(x, y):
    pass

def on_click(x, y, button, pressed):
    if button == mouse.Button.left:
        print('鼠标左键单击')
    elif button == mouse.Button.right:
        print('鼠标右键单击')
    else:
        print('鼠标滚轮按下,即将结束程序')
    print("鼠标坐标:{},鼠标操作为:{},鼠标按下弹起状态:{}".format((x, y), button, pressed))
    if button == Button.middle:
        return False

#其实这里滚动监听不知道为啥有点问题,我只能监听滚轮,大家有知道的可以评论区讨论分享一下
def on_scroll(x, y, dx, dy):
    print("鼠标位置为:{},滚轮上下滑动,1表示上滚,-1表示下滚:{}".format((x, y), (dx, dy)))

mouseListener(on_move, on_click, on_scroll)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25

在这里插入图片描述


三、键盘控制

1. 创建键盘控制对象

from pynput.keyboard import Controller, Key
keyboard =Controller()
  • 1
  • 2

2. 键盘单个键位按下与弹起

一般按键按下
原型:keyboard.press(按键字符串或是特殊键码)
示例:keyboard.press(“a”)

一般按键弹起
原型:keyboard.release(按键字符串或是特殊键码)
示例:keyboard.release(“a”)

  • 特殊键位,所有的包括ctrl在内的键盘上的其他键位通过这种方式操作

特殊按键按下
原型:keyboard.release(按键字符串或是特殊键码)
示例:keyboard.press(Key.space)#按下 空格键位

特殊按键弹起
原型:keyboard.release(按键字符串或是特殊键码)
示例:keyboard.release(Key.space)#弹起空格键位

补充一下常见的特殊键位

alt= <Key.f1: 0>
一个通用的 Alt 键。这是一个修饰符。

alt_gr= <Key.f1: 0>
AltGr 键。这是一个修饰符。

alt_l= <Key.f1: 0>
左 Alt 键。这是一个修饰符。

alt_r= <Key.f1: 0>
右 Alt 键。这是一个修饰符。

backspace= <Key.f1: 0>
退格键。

caps_lock= <Key.f1: 0>
大写锁定键。

cmd= <Key.f1: 0>
一个通用的命令按钮。在PC平台上,这对应于 Super 键或 Windows 键,而在Mac上,它对应于 Command 键。这可能是一个修饰符。

cmd_l= <Key.f1: 0>
左侧命令按钮。在PC平台上,这对应于 Super 键或 Windows 键,而在Mac上,它对应于 Command 键。这可能是一个修饰符。

cmd_r= <Key.f1: 0>
右命令按钮。在PC平台上,这对应于 Super 键或 Windows 键,而在Mac上,它对应于 Command 键。这可能是一个修饰符。

ctrl= <Key.f1: 0>
一个通用的 Ctrl 键。这是一个修饰符。

ctrl_l= <Key.f1: 0>
左 Ctrl 键。这是一个修饰符。

ctrl_r= <Key.f1: 0>
右 Ctrl 键。这是一个修饰符。

delete= <Key.f1: 0>
删除键。

down= <Key.f1: 0>
向下箭头键。

end= <Key.f1: 0>
结束键。

enter= <Key.f1: 0>
Enter 或 Return 键。

esc= <Key.f1: 0>
Esc 键。

f1= <Key.f1: 0>
功能键。定义了 F1 到 F20。

home= <Key.f1: 0>
主页键。

insert= <Key.f1: 0>
插入键。对于某些平台,这可能是未定义的。

left= <Key.f1: 0>
一个左箭头键。

menu= <Key.f1: 0>
菜单键。对于某些平台,这可能是未定义的。

num_lock= <Key.f1: 0>
NumLock 键。对于某些平台,这可能是未定义的。

page_down= <Key.f1: 0>
PageDown 键。

page_up= <Key.f1: 0>
PageUp 键。

pause= <Key.f1: 0>
暂停/中断键。对于某些平台,这可能是未定义的。

print_screen= <Key.f1: 0>
PrintScreen 键。对于某些平台,这可能是未定义的。

right= <Key.f1: 0>
一个右箭头键。

scroll_lock= <Key.f1: 0>
滚动锁定键。对于某些平台,这可能是未定义的。

shift= <Key.f1: 0>
一个通用的 Shift 键。这是一个修饰符。

shift_l= <Key.f1: 0>
左 Shift 键。这是一个修饰符。

shift_r= <Key.f1: 0>
右 Shift 键。这是一个修饰符。

space= <Key.f1: 0>
空格键。

tab= <Key.f1: 0>
Tab 键。

up= <Key.f1: 0>
向上箭头键。
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92
  • 93
  • 94
  • 95
  • 96
  • 97
  • 98
  • 99
  • 100
  • 101
  • 102
  • 103
  • 104
import time
from pynput.mouse import Controller,Button
mouse = Controller()#创建鼠标控制对象
mouse.click(Button.left,1)#鼠标左键点击一次目的是为了激活输入窗口
time.sleep(1)#休眠1秒
from pynput.keyboard import Controller, Key
keyboard =Controller()##创建键盘控制对象
#一般键位
keyboard.press("a")#按下 a键位
keyboard.release("a")#弹起 a键位
keyboard.press("A")#按下 A键位
keyboard.release("A")#弹起 A键位
time.sleep(1)#休眠1秒
#特殊键位,所有的包括ctrl在内的键盘上的其他键位通过这种方式操作
keyboard.press(Key.space)#按下 空格键位
keyboard.release(Key.space)#弹起空格键位
keyboard.press(Key.ctrl)#按下 空格键位
keyboard.release(Key.ctrl)#弹起空格键位
time.sleep(1)#休眠1秒
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19

3. 键盘多个键位组合使用

使用alt+tab实现自动切换界面,原理就是按下一个键不马上弹起,继续按下别的键

#3.键盘多个键位组合使用
# 切换界面
from pynput.keyboard import Controller, Key
keyboard =Controller()
with keyboard.pressed(Key.alt):#按住alt键的同情况下
    keyboard.press(Key.tab)#按住tab
    keyboard.release(Key.tab)#弹起tab键
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

4. 键盘字符串输出

键盘字符串输出
原型:keyboard.type(要输的内容字符串)
示例:keyboard.type(“我输入了内容!”)

键盘字符输出
原型:keyboard.touch(字符,是否输入)
示例:keyboard.touch(“&”,True)

from pynput.keyboard import Controller, Key
keyboard =Controller()
keyboard.type("我输入了内容!")

keyboard.type("&")
keyboard.touch("&",True)#输入字符用touch方法
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

四、键盘监听

制作一个简易的键码查询器

按下或是弹起键位就会输出键位的键码信息,按左上角的esc键位可以退出程序。

#键码查询器,想知道哪个键位的键码就运行程序按下按键。原理是监听按键的按下和弹起并打印键码
from pynput.keyboard import Key, Listener

def on_press(key):
    print('按下的键位是{0}'.format(
        key))

def on_release(key):
    print('弹起的键位是{0}'.format(
        key))
    if key == Key.esc:
        # Stop listener
        print("按esc键退出")
        return False

# Collect events until released
with Listener(
        on_press=on_press,
        on_release=on_release) as listener:
    listener.join()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20

在这里插入图片描述


总结

大家喜欢的话,给个

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/黑客灵魂/article/detail/839553
推荐阅读
相关标签