**
Python版按键精灵,不动手也能摸鱼,就叫海底捞吧
**前言:首先十分感谢B站up主“不高兴就喝水”提供的源码思路,主要就是python找图后模 拟键鼠的操作的操作。主要基于pyautogui库开发的一个脚本。
我这个脚本就是在水哥的源码基础上,做了二次开发。主要增加的功能见图
库文件很重要,放在前面
import pyautogui
import time
import xlrd
import pyperclip
import pyWinhook
import keyboard
from tkinter import *
我来对实现功能简单介绍一下:
功能一:
之前水哥的左键单击是鼠标自动移动到目标图片处然后左键单击,但有些时候,比 如说一个输入框,它是没有明显特征的,或者说它前面有一个描述性的字段,但是你去点击它并不能触发网页的焦点事件,也就是没法输入内容。我这个功能叫鼠标 相对移动后左键。先利用8.0把鼠标移动到目标图片处,再做您自己设定好的相对 移动后左键单击,比如说‘100 50’意思是鼠标向右移动100个像素点,向下移动50个像素点。负数方向相反,屏幕左上角坐标(0,0)这是只要把输入框前的描述字段的图片截取下来,再做相对移动即可。
上菜
#7代表鼠标相对移动后,鼠标左键单击
elif cmdType.value == 7.0:
XDMove = sheet1.row(i)[1].value
#print(type(XDMove))此时是字符串
#分割字符串后,转化为数字。得到相对移动的距离X和Y
strFgf=" "
tempX = XDMove[:XDMove.index(strFgf)]
tempY = XDMove[XDMove.index(strFgf):]
MoveX = int((tempX[1:]))
MoveY = int((tempY[:len(tempY)-1]))
#取得鼠标当前位置
initMouseX, initMouseY = pyautogui.position()
time.sleep(0.5)
pyautogui.click(initMouseX+MoveX,initMouseY+MoveY,2,0.25,button='left')
print("横坐标:"+initMouseX+MoveX,"纵坐标:"+initMouseY+MoveY," 左键一次")
功能二:
关键位置暂停功能,也可以做单步调试。用法就是之前的自动化脚 本都太智能了,完全无法进行人工的干预操作,比如说我们在网页上提交表单,它 需要你输入验证码,或者支付的时候需要你输入支付密码,这个时候全靠之前设定 好的操作,即使可以。您也不会放心,所以您只要在这个关键步骤之前,使用这个 功能,就可以让脚本暂停,你自己来操作。完成后按下F4,脚本会继续执行未完 成的步骤。*
上菜
#10 关键位置暂停功能,按下F4程序继续
elif cmdType.value == 10.0:
print("请按下F4继续脚本的运行")
keyboard.wait('F4')
功能三
热键组合,这段代码我参考了b站up主大羽的源码。最多支持同时按下3个键位。 配合工作中的常用快捷键使用比如ctrl+a 之类的,挺好用的。
#定义热键事件
#hotkey_get方法用来判断热键组合个数,并把热键传到对应的变量上
def hotkey_get(hk_g_inputValue):
newinput = hk_g_inputValue.split(',')
if len(newinput) == 1:
pyautogui.hotkey(hk_g_inputValue)
elif len(newinput) == 2:
pyautogui.hotkey(newinput[0], newinput[1])
elif len(newinput) == 3:
pyautogui.hotkey(newinput[0], newinput[1], newinput[2])
#hotkey_Group方法调用hotkey_get方法,并判断其热键内容是否需要循环。
def hotkeyGroup(hotkey_reTry,hkg_inputValue):
if hotkey_reTry == 1:
hotkey_get(hkg_inputValue)
print("执行了:",hkg_inputValue)
time.sleep(0.1)
elif hotkey_reTry == -1:
while True:
hotkey_get(hkg_inputValue)
print("执行了:",hkg_inputValue)
time.sleep(0.1)
elif hotkey_reTry > 1:
i = 1
while i < hotkey_reTry + 1:
hotkey_get(hkg_inputValue)
print("执行了:",hkg_inputValue)
i += 1
time.sleep(0.1)
# 9代表_热键组合
elif cmdType.value == 9.0:
# 取重试次数,并循环。
hotkey_reTry = 1
if sheet1.row(i)[2].ctype == 2 and sheet1.row(i)[2].value != 0:
hotkey_reTry = sheet1.row(i)[2].value
inputValue = sheet1.row(i)[1].value
hotkeyGroup(hotkey_reTry, inputValue)
time.sleep(0.5)
功能四
设置了键盘输入监控功能。它的每一步操作,按下了什么按 键都会被记录下来。并且设置了启动热键,按下回车即可执行。当然也可以按按钮 执行。
#监听到键盘事件调用
def onKeyboardEvent(event):
print(event.Key) # 返回按下的键
if event.Key == 'Return' :
gettimes(event)
return True
# 创建管理器
hm = pyWinhook.HookManager()
# 监听键盘
hm.KeyDown = onKeyboardEvent
hm.HookKeyboard()
root.mainloop()
功能五
UI启动,更加直观。用户自定义执行次数
def gettimes(event):
if u.get() != "" :
#取用户输入的值,控制循环次数
k=int(u.get())
time.sleep(0.3)
root.destroy()
j=1
if 0<k<=100:
while j <= k :
mainWork(sheet1)
j+=1
time.sleep(0.1)
print("等待0.1秒")
else:
print("请输入1~100之间的整数")
else:
print("请输入次数")
#实例化窗口
root = Tk()
name = Label(root, text="请输入执行次数(1-100之间)").grid(row=0, column=0)
u = StringVar()
ent1 = Entry(root, textvariable=u)
ent1.grid(row=0, column=1)
#submit = Button(root, text="执行", command=gettimes).grid(row=4, column=4)
submit = Button(root, text="执行").grid(row=4, column=4)
root.bind('<Button-1>', gettimes)
我这段代码挺low的。但有UI总比没有强吧。哈哈
写在最后
非程序员出身,python几乎零基础。以前做过3个月php的网站开发,代码水平有限,大佬看到了不要喷。我的做事遵旨是用爱发电,从开源里来,得回到开源里去。这样社区才能欣欣向荣。大家可以点赞,收藏,评论。鼓励一下我。
源码跟exe文件,已经打包传百度网盘了。欢迎大家学习使用,有更好的想法和玩法。都可以评论。
百度网盘链接:
链接:https://pan.baidu.com/s/1iZ1sFUmm8EnYI9mTdONrOw
提取码:wzy6