赞
踩
欢迎关注 『python自动化』 系列,持续更新中
欢迎关注 『python自动化』 系列,持续更新中
拿来即用,所见即所得。
我的gitee仓库pynput库自动操作键鼠
pip install pynput
pynput库比起之前的pywin32库提供了更简便的键鼠操作。
另一个区别是先初始化一个鼠标或是键盘的对象,对于这个对象进行操作,不同于面向窗口的win32。但是缺点是,导致了前台的问题,操作顶层的前台窗口。
下面的代码实战会详细介绍每个方法的参数,也可以访问pywin32的官方文档查看。(建议这么做,因为以后我们自学其他库都要经历查看文档这个过程)
官网网址
https://pythonhosted.org/pynput/
mouse = Controller()
原型:鼠标对象.position
实例:x,y=mouse.position
x,y=mouse.position#返回了一个位置坐标的元组
print("x方向鼠标位置:{},y方向鼠标位置:{}".format(x,y))
原型:鼠标对象.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))
原型:鼠标对象.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)#右键弹起
官方现有的函数
原型:mouse.click(操作的鼠标键位,点击次数)
示例:mouse.click(Button.left,1)
返回值:None
mouse.position=(888,888)
mousePosition=mouse.position
mouse.click(Button.left,1)#鼠标左键点击1次,第一个参数表示左右键,第二个参数表示点击次数
我们自己封装一个函数,新增了一个参数用于表示点击延迟
原型: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毫秒
这个程序运行后你的所有鼠标移动都会有显示提示,不移动则不会输出信息。
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)#调用我们写好的监听函数
原型: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)
原型: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)
from pynput.keyboard import Controller, Key
keyboard =Controller()
一般按键按下
原型:keyboard.press(按键字符串或是特殊键码)
示例:keyboard.press(“a”)
一般按键弹起
原型:keyboard.release(按键字符串或是特殊键码)
示例:keyboard.release(“a”)
特殊按键按下
原型: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>
向上箭头键。
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秒
使用
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键
键盘字符串输出
原型: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方法
按下或是弹起键位就会输出键位的键码信息,按左上角的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()
大家喜欢的话,给个
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。