跑步突发奇想,想搞懂脚本的原理,回来查了查,比如实现一个自动发送消息的脚本,无非就是编辑一行消息然后回车发送仅此而已,那用Python控制键盘来发送我们定制好的脚本不久可以解决,于是查了查,发现了这个库Pyautogui可以直接控制键盘和鼠标
基本操作
pyautogui的函数
moveTo(x,y) 将鼠标移动到指定的 x、y 坐标 (屏幕以左上角为原点(0,0),向下y增加,向右x增加)
moveTo(x,y,duration) 使用duration值设置几秒后移动鼠标到指定的 x、y 坐标
moveRel (x,y) 相对于当前的鼠标位置移动鼠标。
size() 获得屏幕的width和height值
position() 获得当前鼠标的位置
locateOnScreen(' *.png') 在屏幕上通过图像识别找到与图像相同的位置,并返回坐标size
center(size) 可通过locateOnScreen获得的图像坐标对象,并返回其图像上的 中心点坐标(可用moveTo,移动到此处)
dragTo(x,y) 按下左键移动鼠标。
dragRel (x,y) 按下左键,相对于当前位置移动鼠标。
click(x,y,button) 模拟点击(默认是左键)。
rightClick() 模拟右键点击。
middleClick() 模拟中键点击。
doubleClick() 模拟左键双击。
mouseDown(x,y,button)模拟在 x、y 处按下指定鼠标按键。
mouseUp(x,y,button)模拟在 x、y 处释放指定键。
scroll (units) 模拟滚动滚轮。正参数表示向上滚动,负参数表示向下滚动。
typewrite(message) 键入给定消息字符串中的字符。
typewrite([key1,key2])键入给定键字符串,只能是英文。
press(key) 按下并释放给定键。
keyDown(key) 模拟按下给定键,不释放。
keyUp(key) 模拟释放给定键。
hotkey([key1,key2]) 模拟按顺序按下给定键字符串,然后以相反的顺序释放,(实现粘贴复制操作)
pyautogui.PAUSE=1 将pyautogui.PAUSE 设置为 1,即每次函数调用后暂停一秒。
pyautogui.FAILSAFE=True 启动自动防故障功能
制作一个自动发送消息的脚本
有个bug就是当前的脚本还不能执行中文的输出,所以我们用到了另一个库pyperclip,这两个库结合就可以实现自动的输出中文脚本了,原理就是,pyperclip可以实现自动的复制,然后pyautogui就可以通过typewrite实现ctrl+v的输出。
pyperclip.copy(item)
pyautogui.hotkey('\n','ctrl', 'v','\n')
下面我们又加了需求,比如脚本一般是我让它开始它才开始的,所以我们还需要对程序进一步的进行深入的构建。
pynput库可以实现键盘的监听
from pynput.keyboard import Listener
import time
def on_press(key):
pass
def on_release(key):
all_key.append(str(key))
print(all_key)
if "'r'" in all_key:
print("开大招了")
all_key.clear()
if "'q'" in all_key:
print("开q技能了")
all_key.clear()
if "'w'" in all_key:
print("开w技能了")
all_key.clear()
if "'e'" in all_key:
print("开e技能了")
all_key.clear()
if 'Key.ctrl_l' in all_key and "'c'" in all_key: # ctrl+c
print('这是复制键')
all_key.clear()
if 'Key.ctrl_l' in all_key and "'v'" in all_key: # ctrl+v
print('这是粘贴键')
all_key.clear()
try:
if all_key[-1] == 'Key.ctrl_l':
time1 = time.time()
while True:
if time.time() - time1 >= 1:
all_key.clear()
break
except:
pass
# if key == Key.esc: # 停止监听
# return Falseurn False
def start_listen():
with Listener(on_press=None, on_release=on_release) as listener:
listener.join()
if __name__ == '__main__':
all_key = []
start_listen()