带薪摸鱼?不我只是想换一种生活方式

					**

Python版按键精灵,不动手也能摸鱼,就叫海底捞吧

**前言:首先十分感谢B站up主“不高兴就喝水”提供的源码思路,主要就是python找图后模 拟键鼠的操作的操作。主要基于pyautogui库开发的一个脚本。
我这个脚本就是在水哥的源码基础上,做了二次开发。主要增加的功能见图
前6项是水哥的,后4项是我自己添的
库文件很重要,放在前面

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

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值