【RPA】关于0基础学习水哥RPA很痛苦这件事

前言:首先十分感谢B站up主“不高兴就喝水”的视频,作为0基础的观众,我直接下载了包。

然后。。。。。。开始痛苦的学习起来了。

忘了,我是有点呆的秋人(昵称还在审核中)

好,开始回顾痛苦~

首先,我根据使用说明书,我下载了最新的python3.12,后面因为一些兼容原因我换成了python3.11,同时我也下载了pycharm 社区版。我安装完各个库以后,双击打开water.py文件,屏幕快速闪了一下,也没有程序框弹出,我接连试了几次都是相同的情况。我没有去纠结为什么这个问题,因为我认为可以先通过pycharm来先学习代码。下面是我逐字逐句学习代码的过程:其中的一些基础语法def if elif while这些就是直面的英语理解就可以了,百度一下几分钟就可以理解了。

第一步 理解鼠标操作的逻辑 

def function_name(parameters):
    # 函数体
    # 执行函数的代码逻辑
#需要用到的库,大白话就是我们要用的方法方式
import pyautogui
import time
import xlrd
import pyperclip

#定义鼠标事件

#pyautogui库其他用法 https://blog.csdn.net/qingfengxd1/article/details/108270159
#定义鼠标操作方法,在这里的时候我花了40分钟时间去搞懂lOrR是什么意思,直至后面我才意识到是鼠标左右键的缩写
#因为我是逐行逐句去看代码就开始思考reTry的默认值是多少,这里也纠结了一下,后面看完全篇才发现是尾巴赋值。retry大白话就是重试的意思。
#reTry:这是一个布尔值参数,只有True和False这两种状态。
#如果找不到图像,并且 reTry 参数为 True,则会不断重试查找图像并点击,直到找到为止
#i += 1:将 i 的值加 1,用于追踪重试的次数
def mouseClick(clickTimes,lOrR,img,reTry): 
    if reTry == 1:
        while True:
	#获取应用程序位置
            location=pyautogui.locateCenterOnScreen(img,confidence=0.9)
            if location is not None:
		#interval 单击之间等待秒数,clickTimes是鼠标的点击次数
		#duration为执行此次动作的设置时间,0为立即执行
		#x y鼠标的坐标,confidence是查找图片精确度 默认为1;locateCenterOnScreen定位函数
		#lOrR是鼠标左键右键 left righ
                pyautogui.click(location.x,location.y,clicks=clickTimes,interval=0.2,duration=0.2,button=lOrR)
                break
            print("未找到匹配图片,0.1秒后重试")
            time.sleep(0.1)
    elif reTry == -1:
        while True:
            location=pyautogui.locateCenterOnScreen(img,confidence=0.9)
            if location is not None:
                pyautogui.click(location.x,location.y,clicks=clickTimes,interval=0.2,duration=0.2,button=lOrR)
            time.sleep(0.1)
    elif reTry > 1:
        i = 1
        while i < reTry + 1:
            location=pyautogui.locateCenterOnScreen(img,confidence=0.9)
            if location is not None:
                pyautogui.click(location.x,location.y,clicks=clickTimes,interval=0.2,duration=0.2,button=lOrR)
                print("重复")
                i += 1
            time.sleep(0.1)

第二步是对数据的检查方法和逻辑 的理解

# 数据检查 def是定义这个函数用法规则,方便我们后续直接调用,sheet1.nrows就是表格里面的行
# cmdType.value  1.0 左键单击    2.0 左键双击  3.0 右键单击  4.0 输入  5.0 等待  6.0 滚轮
# ctype     空:0
#           字符串:1
#           数字:2
#           日期:3
#           布尔:4
#           error:5
#if sheet1.nrows < 2::检查数据表的行数是否小于 2。因为cmd表格第一行是表头
#如果是,输出提示信息 "没数据啊哥",并将 checkCmd 设置为 False,表示数据检查未通过。
def dataCheck(sheet1):
    checkCmd = True
    #行数检查
    if sheet1.nrows<2:
        print("没数据啊哥")
        checkCmd = False
    #每行数据检查
    i = 1
    while i < sheet1.nrows:
        # 第1列 操作类型检查
        #(1)[0]第2行第1列 i是行 从0开始
        cmdType = sheet1.row(i)[0]   
        #如果操作类型不是数字类型(ctype != 2)或不属于特定的几个值,输出提示信息 "第 x 行,第1列数据有毛病",并将 checkCmd 设置为 False
        if cmdType.ctype != 2 or (cmdType.value != 1.0 and cmdType.value != 2.0 and cmdType.value != 3.0 
        and cmdType.value != 4.0 and cmdType.value != 5.0 and cmdType.value != 6.0):
            print('第',i+1,"行,第1列数据有毛病")
            checkCmd = False
        # 第2列 内容检查
        cmdValue = sheet1.row(i)[1]
        # 读图点击类型指令,内容必须为字符串类型
        #字符串是一种数据类型,用于表示文本数据。
        #字符串是由字符组成的序列,可以包含字母、数字、符号和空格等字符
        if cmdType.value ==1.0 or cmdType.value == 2.0 or cmdType.value == 3.0:
            if cmdValue.ctype != 1:
                print('第',i+1,"行,第2列数据有毛病")
                checkCmd = False
        # 输入类型,内容不能为空
        if cmdType.value == 4.0:
            if cmdValue.ctype == 0:
                print('第',i+1,"行,第2列数据有毛病")
                checkCmd = False
        # 等待类型,内容必须为数字
        if cmdType.value == 5.0:
            if cmdValue.ctype != 2:
                print('第',i+1,"行,第2列数据有毛病")
                checkCmd = False
        # 滚轮事件,内容必须为数字
        if cmdType.value == 6.0:
            if cmdValue.ctype != 2:
                print('第',i+1,"行,第2列数据有毛病")
                checkCmd = False
        i += 1
    return checkCmd

第三步 理解我们cmd表格中的第一列和第二列如何通过定义mainwork来组合搭配实现功能 

#任务 img 在这段代码中是用于表示与操作相关的图片名称或标识的变量。
def mainWork(img):
    i = 1
    while i < sheet1.nrows:
        #取本行指令的操作类型
        cmdType = sheet1.row(i)[0]
        if cmdType.value == 1.0:
            #取图片名称
            img = sheet1.row(i)[1].value
            reTry = 1
            #ctype 为 2 表示数字类型  0为空
            if sheet1.row(i)[2].ctype == 2 and sheet1.row(i)[2].value != 0:
                reTry = sheet1.row(i)[2].value
            mouseClick(1,"left",img,reTry)
            print("单击左键",img)
        #2代表双击左键
        elif cmdType.value == 2.0:
            #取图片名称
            img = sheet1.row(i)[1].value
            #取重试次数
            reTry = 1
            if sheet1.row(i)[2].ctype == 2 and sheet1.row(i)[2].value != 0:
                reTry = sheet1.row(i)[2].value
            mouseClick(2,"left",img,reTry)
            print("双击左键",img)
        #3代表右键
        elif cmdType.value == 3.0:
            #取图片名称
            img = sheet1.row(i)[1].value
            #取重试次数
            reTry = 1
            if sheet1.row(i)[2].ctype == 2 and sheet1.row(i)[2].value != 0:
                reTry = sheet1.row(i)[2].value
            mouseClick(1,"right",img,reTry)
            print("右键",img) 
        #4代表输入,其中pyperclip.copy 将其复制到剪贴板,
        #然后使用 pyautogui.hotkey 进行模拟按键操作,将输入值粘贴到当前焦点位置,并打印相应信息
        elif cmdType.value == 4.0:
            inputValue = sheet1.row(i)[1].value
            pyperclip.copy(inputValue)
            pyautogui.hotkey('ctrl','v')
            time.sleep(0.5)
            print("输入:",inputValue)                                        
        #5代表等待
        elif cmdType.value == 5.0:
            #取图片名称
            waitTime = sheet1.row(i)[1].value
            time.sleep(waitTime)
            print("等待",waitTime,"秒")
        #6代表滚轮
        elif cmdType.value == 6.0:
            #取图片名称
            scroll = sheet1.row(i)[1].value
            pyautogui.scroll(int(scroll))
            print("滚轮滑动",int(scroll),"距离")                      
        i += 1
    

第四步 理解主要代码,就是我们上面已经定义完了 鼠标 表格 以及如何配合实现功能的规则。这一步相当于我们在下棋,棋子的本身的功能我们已经赋予了。

#来判断当前脚本是否作为主程序直接运行
if __name__ == '__main__':
    file = 'cmd.xls'
    #打开文件,通过 xlrd.open_workbook() 函数打开文件,将文件的内容读取到 wb 变量中。
    #然后使用 wb.sheet_by_index(0) 获取文件的第一个表格页,并将其赋值给变量 sheet1。
    #这样就得到了需要操作的表格数据
    wb = xlrd.open_workbook(filename=file)
    #通过索引获取表格sheet页
    sheet1 = wb.sheet_by_index(0)
    print('欢迎使用不高兴就喝水牌RPA~')
    #数据检查
    checkCmd = dataCheck(sheet1)
    if checkCmd:
        key=input('选择功能: 1.做一次 2.循环到死 \n')
        if key=='1':
            #循环拿出每一行指令
            mainWork(sheet1)
        #while True 是一个无限循环的语句
        elif key=='2':
            while True:
                mainWork(sheet1)
                time.sleep(0.1)
                print("等待0.1秒")    
    else:
        print('输入有误或者已经退出!')

最后,虽然文章只有一点点内容,但是只有自己亲自动手去花时间理解操作才发现,3天时间已经过去(本人上班族,只是兴趣想试一试),写这篇文章的目的也是让自己继续坚持下去,激励自己同时记录自己,可以以后复习。

有什么需要改进或错误的地方,望大家指正~

我是有点呆的秋人~

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值