自动点击脚本

news2024/11/25 20:30:33

一个简单的自动点击脚本
配置文件张这样,需要的自己截图
在这里插入图片描述
excel配置文件
在这里插入图片描述

#!/usr/bin/python3


# sys.path.append("C:\\Users\苏\\.vscode\\extensions\\ms-python.vscode-pylance-2023.10.50\\dist\\typeshed-fallback\\stubs\\PyAutoGUI")
# print(sys.path)
import sys
import pyautogui as pag
import xlrd
import time
import pyperclip as pc
import datetime
import os
import logging as log
  
# 配置日志记录器  
log.basicConfig(filename='./log/example.log', format='%(asctime)s.%(msecs)03d %(levelname)s: %(message)s',level=log.DEBUG) 
# import opencv-python

pag.PAUSE = 0.04

confPath = 'F:\桌面\qqSpeedScript\\conf\\' #配置excel的目录
excelPath = confPath + 'ttt.xls' #配置的excel文件

runTimeStamp = time.time()

#坐标,点击次数,鼠标哪个键
def mouseClick(x,y, times, button):
    if times <= 1:
        pag.click(x,y)
        return
    for idx in range(times-1):
        pag.click(x,y)

#图片名 confPath+name
def getImgLoc(name):
    location = (0,0,0,0)
    for i in range(5):
        try:
            location = pag.locateOnScreen('./conf/'+name, confidence=0.6)
            # location = pag.locateOnScreen('./conf/'+name)
            # print('I:getImgLoc:', confPath+name, location)
        except:
            log.info("Unexpected error:", i, sys.exc_info()[0], confPath+name)
            print("Unexpected error:", i, sys.exc_info()[0], confPath+name)
    if location is not None:
        return  pag.center(location)       # 找图的中心点
    else:
        print('W:notFind Img')

def runTime(pre):
    global runTimeStamp
    now = time.time()
    print(pre + ':' + str(now - runTimeStamp))
    runTimeStamp = now

def ctrlV():
    pag.keyDown('ctrl')
    pag.keyDown('v')
    pag.keyUp('v')
    pag.keyUp('ctrl')

def sleepToDesignatedTime(expectedTime):
    if len(expectedTime) > 6:
        expectedTime = expectedTime[0:6]
    # 指定时间  
    specified_time = datetime.datetime(*expectedTime).timestamp()  
    # 当前时间  
    current_time = datetime.datetime.now().timestamp()
    diffTime = (specified_time-current_time) 
    
    print('%ds sleeping...' % diffTime)
    log.info('%ds sleeping...' % diffTime)
    if diffTime < 0.0:
        print('W:input time is illegal')
        raise RuntimeError('input time is illegal')
        return
    time.sleep(diffTime)

def shutDown(second):
    if second > 7200:
        print("W:", 'second time is too long')
    print('[I]%d秒后关机' % second)
    os.system(f"shutdown /s /t {second}")

def workFlow():
    # 读取excel表格
    data = xlrd.open_workbook(excelPath)
    sheet = data.sheet_names() #获取sheet
    # print(sheet)
    table = data.sheet_by_name('Sheet1') #读取指定sheet
    # print(table.nrows, table.ncols)

    
    for rowIdx in range(table.nrows):
        if rowIdx == 0 :
            continue
        row_val = table.row_values(rowIdx)
        print(type(row_val), row_val)
        log.info("row_val:%r" % row_val)

        #flag=0 不需要开
        if int(row_val[0]) == 0 :
            continue
        
        #默认打开商城
        #搜索道具
        runTime('Start')
        imgX, imgY = getImgLoc('searchBox.png')
        runTime('getImgLoc Cost:')
        mouseClick(imgX, imgY, 3, 'left')
        #搜索
        if len(row_val) < 2 :
            print("W:第%d行参数不够" % rowIdx)
            continue

        print('row_val[2]:', row_val[2])
        pc.copy(row_val[2])
        # pc.paste() #发现不能粘贴到搜索框
        # pag.hotkey('ctrl','v') #不知道为什么不行
        ctrlV()
        pag.press('enter')

        runTime('preOpen')
        #打开箱子
        imgX, imgY = getImgLoc(row_val[4])
        mouseClick(imgX, imgY, 1, 'left')
        runTime('endOpen')
        #确认打开
        okX, okY = getImgLoc('oK.png')
        mouseClick(okX, okY, 1, 'left')
        runTime('OK')
        time.sleep(2)
        #继续开启
        runTime('pre continue')
        openContinueX, openContinueY = getImgLoc('continueOpen.png')
        log.info("imgX:%r,imgY:%r, okX:%r, okY:%r, oCX:%r, oCY:%r" % (imgX, imgY, okX, okY, openContinueX, openContinueY))
        runTime('end continue')

        print('开%d次' % int(row_val[3]))
        #sleep到指定时间后,开始运行
        t = [2024, 3, 5, 0, 0, 0]
        sleepToDesignatedTime(t)
        if openContinueX > 1 and openContinueY >  1:
            
            #存在继续开启按钮
            for timesIdx in range(int(row_val[3])):
                log.info("Continue.start[%r]"%timesIdx)
                mouseClick(openContinueX, openContinueY, 1, 'left')
                # time.sleep(0.05)
                log.info("Continue.end[%r]"%timesIdx)
                # runTime('continue exists')
                
            runTime('final')
        else:
            for timeIdx in range(int(row_val[3])):
                log.info("noContinue.start[%r]"%timeIdx)
                pag.press('enter')
                mouseClick(imgX, imgY, 1, 'left') #打开箱子
                mouseClick(okX, okY, 1, 'left') #确认打开
                # time.sleep(0.05)
                log.info("noContinue.end[%r]"%timeIdx)
                
                # runTime('continue not exists')
            runTime('final1')
        
        #默认5秒后关机
        ShutdownSecond = 5
        shutDown(ShutdownSecond)
        # pag.press('enter')



        #获取按钮位置


if __name__ == "__main__":
    workFlow()

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1522868.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

python入门(二)

python的安装很方便&#xff0c;我们这里就不再进行讲解&#xff0c;大家可以自己去搜索视频。下面分享一下Python的入门知识点。 执行命令的方式 在安装好python后&#xff0c;有两种方式可以执行命令&#xff1a; 命令行程序文件&#xff0c;后缀名为.py 对于命令行&…

Javaweb day17 day18 day19

mysql-DDL 数据库操作 写法 客户端工具 &#xff08;也可以使用idea&#xff09; 表 写法 约束 数据类型 案例 写法 表的查询修改删除 写法 删除

鲸鱼优化算法双馈风电机组一次调频三机九节点虚拟惯量下垂控制DFIG matlab/simulink

以频率偏差变化最小为优化目标&#xff0c;采用鲸鱼算法优化风电机组一次调频控制系数。 采用matlab.m文件与simulink.slx文件联合。 系统频率优化结果 鲸鱼算法 时域模型

[MTK6771] android13系统启用OMAPI 支持esim.me

OMAPI是啥&#xff1f;看看谷歌的解释&#xff1a; 说了一大堆懂的人不需要看&#xff0c;不懂的还是看不懂&#xff0c;我就是后者 总之说人话就是&#xff0c;像SIM卡&#xff0c;NFC这类模块需要用到这个东西&#xff0c;那么接着往下看 上层APP想要使用这个OMAPI供应商稳…

C语言-strtok(切片的使用)

strtok&#xff08;切片的使用&#xff09; 使用规则 使用的基本情况 strcpy 第二次调用的时候传的是空指针 所以打印出来的是 每一次调用函数都会把当前函数的地址记住 所以二次调用的时候 传的是null 连起始位置都不传了 只是传null 但是需要知道的是 当知道三段 你调用第…

Golang高效流控实践

流控对于构建高可靠弹性系统至关重要&#xff0c;本文介绍了Golang内置的流控组件&#xff0c;通过该组件就可以打造适合各种业务场景的流控系统。原文: Rate Limiting in Go: Controlling Traffic with Efficiency[1] Jon Cellier Unsplash 导言 流控(Rate limiting)是构建可扩…

element-plus怎么修改表单中的label字体颜色及大小

问题描述&#xff1a; 当我们在vue3中使用element-plus组件库提供的表单组件时&#xff0c;有时我们需要修改表单中label的字体颜色等属性&#xff0c;这是如果直接选中label的class进行修改是不起作用的&#xff0c;我们只需深度选择即可选中并进行修改。 比如&#xff1a; …

阿里二面:什么情况会发生Full GC?如何避免频繁Full GC?

阿里二面&#xff1a;什么情况会发生Full GC&#xff1f;如何避免频繁Full GC&#xff1f; Minor GC、Major GC 和 Full GC区别&#xff1f; Minor GC、Major GC和Full GC是垃圾回收中的三个重要概念&#xff0c;它们描述了垃圾回收的不同阶段和范围&#xff1a; Minor GC&am…

旋转花键的制造工艺

旋转花键的制造工艺是一门精细的技术&#xff0c;涉及多个步骤和精细的操作&#xff0c;以确保最终产品的质量和性能&#xff0c;下面简单介绍下旋转花键的制造工艺。 1、原材料准备&#xff1a;制造旋转花键的核心是选择合适的材料&#xff0c;根据花键的规格和性能要求&#…

lftp服务与http服务(包含scp服务)详解

目录 前言: 1.lftp服务 1.1lftp服务的介绍以及应用场景 1.2安装lftp服务 1.2进行配置 1.3实际操作 2.http服务 2.1http服务介绍以及应用场景 2.1安装httpd服务 2.2进行配置 2.3实际操作 3.scp服务 3.1scp服务的介绍以及应用场景 致谢: 前言: 在当今互联网…

由浅到深认识C语言(11):结构体

该文章Github地址&#xff1a;https://github.com/AntonyCheng/c-notes 在此介绍一下作者开源的SpringBoot项目初始化模板&#xff08;Github仓库地址&#xff1a;https://github.com/AntonyCheng/spring-boot-init-template & CSDN文章地址&#xff1a;https://blog.csdn…

一起学数据分析_2

写在前面&#xff1a;代码运行环境为jupyter&#xff0c;如果结果显示不出来的地方就加一个print()函数。 一、数据基本处理 缺失值处理&#xff1a; import numpy as np import pandas as pd#加载数据train.csv df pd.read_csv(train_chinese.csv) df.head()# 查看数据基本…

数据结构的概念大合集01(含数据结构的基本定义,算法及其描述)

概念大合集01 1、数据结构基础的定义2、数据结构2.1 数据元素之间关系的集合2.2数据结构的三要素2.2.1数据的逻辑结构2.2.2数据的存储&#xff08;物理&#xff09;结构2.2.3数据的运算 3、数据类型4、抽象数据类型类型&#xff08;ADT&#xff09;5、算法及其描述5.1算法的5个…

NCV4275CDT50RKG稳压器芯片中文资料规格书PDF数据手册引脚图图片价格功能

产品概述&#xff1a; NCV4275C 是一款低漏稳压器&#xff0c;可用于严酷汽车环境。它包括了较宽的运行温度范围和输出电压范围。输出调节为 5.0 V 或 3.3 V&#xff0c;额定输出电流为 450 mA。它还提供过电流保护、超温保护和可编程微处理器重置等多种功能。NCV4275C 采用 D…

观察者模式的理解和引用

1.前言 在之前的H5小游戏中&#xff0c;对于长连接发送的不同类型数据包的处理&#xff0c;是通过switch语句进行处理的&#xff0c;于是在自己的代码中出现了大量的case分支&#xff0c;不方便进行维护和后期的版本迭代。于是在老师的指导下&#xff0c;开始寻求使用观察者模…

互动投影游戏如何为科普教育馆带来更加生动有趣的科普体验?

近年科普教育馆在数字多媒体技术的支持下&#xff0c;让更多的家长和孩子注意到这一展示场景&#xff0c;尤其是对孩子来说&#xff0c;这里不仅是一个扩展知识的场景&#xff0c;更是一个发掘自我、探索未知世界的地方&#xff0c;而在这个过程中&#xff0c;多媒体互动技术的…

【MySQL高级篇】08-事务篇

第13章:事务基础知识 #09-事务的基础知识#1.事务的完成过程 #步骤1&#xff1a;开启事务 #步骤2&#xff1a;一系列的DML操作 #.... #步骤3&#xff1a;事务结束的状态&#xff1a;提交的状态(COMMIT) 、 中止的状态(ROLLBACK)#2. 显式事务#2.1 如何开启&#xff1f; 使用关键…

蓝桥:保险箱(Python,动态规划)

问题描述&#xff1a; 小蓝有一个保险箱&#xff0c;保险箱上共有 n 位数字。小蓝可以任意调整保险箱上的每个数字&#xff0c;每一次操作可以将其中一位增加 1 或减少 1。当某位原本为 9 或 0 时可能会向前&#xff08;左边&#xff09;进位/退位&#xff0c;当最高位&#x…

如果要做优化,CSS提高性能的方法有哪些?

文章目录 一、前言二、实现方式内联首屏关键CSS异步加载CSS资源压缩合理使用选择器减少使用昂贵的属性不要使用import其他 三、总结参考文献 一、前言 每一个网页都离不开css&#xff0c;但是很多人又认为&#xff0c;css主要是用来完成页面布局的&#xff0c;像一些细节或者优…

加密算法详解

加密学的发展和应用 计算机加密学的发展历程可以大致分为以下几个阶段&#xff1a; 古典密码学时期&#xff08;古代至20世纪初&#xff09;&#xff1a; 在古代&#xff0c;人们就已经开始使用简单的加密技术来保护通信内容&#xff0c;例如凯撒密码、维吉尼亚密码等。到了近…