Pyautogui实现自动化办公-RPA小case

293 阅读4分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第 16 天,点击查看活动详情

今天和一个朋友聊天,他咨询了一个pyautogui的自动化办公问题,他是一个抖音商户,因为抖音商户如果3分钟不回复客户就会降低店铺等级,故他在休息的时候需要有个软件能够自动回复客户信息,之前写过pyautogui的基本用法,传送门(python自动化办公--pyautogui控制鼠标和键盘操作),故在这个需求上找到了一个方法,其基本原理就是自动识别到聊天界面的消息列表的未读消息,然后在休息的时候发送一个"客服不在",从而绕过平台的回复策略

图片

  1. 安装python3.4以上版本,并配置环境变量(目前有装3.9遇到坑的,我个人用的3.7.6)

教程:www.runoob.com/python3/pyt…

  1. 安装依赖包

方法:在cmd中(win+R  输入cmd  回车)输入

pip install pyperclip 回车pip install xlrd 回车pip install pyautogui==0.9.50 回车pip install opencv-python -i https://pypi.tuna.tsinghua.edu.cn/simple 回车pip install pillow 回车

这几步如果哪步没成功,请自行百度 如 pip install opencv-python失败

  1. 把每一步要操作的图标、区域截图保存至本文件夹  png格式(注意如果同屏有多个相同图标,回默认找到最左上的一个,因此怎么截图,截多大的区域,是个学问,如输入框只截中间空白部分肯定是不行的,宗旨就是“唯一”)

  2. 在cmd.xls 的sheet1 中,配置每一步的指令,如指令类型1234  对应的内容填截图文件名(别用中文),指令5对应的内容是等待时长(单位秒) 指令6对应的内容是滚轮滚动的距离,正数表示向上滚,负数表示向下滚,数字大一点,先用200和-200试试

  3. 保存文件

  4. 双击waterRPA.py打开程序,按1表示excel中的指令执行一次,按2表示无限重复执行直到程序关闭

  5. 如果报错不能运行用vscode运行看看报错内容(百度vscode安装与运行python程序,将报错内容xxxError后面的贴到百度上面去搜搜看)

  6. 开始程序后请将程序框最小化,不然程序框挡住的区域是无法识别和操作的

  7. 如果程序开始后因为你选择了无限重复而鼠标被占用停不下来,alt+F4吧~

想自己开发和优化的可以看看pyautogui库其他用法 

blog.csdn.net/qingfengxd1…

完整源码:

import pyautoguiimport timeimport xlrdimport pyperclip
#定义鼠标事件
#pyautogui库其他用法 https://blog.csdn.net/qingfengxd1/article/details/108270159
def mouseClick(clickTimes,lOrR,img,reTry):    if 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)                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)



# 数据检查# cmdType.value  1.0 左键单击    2.0 左键双击  3.0 右键单击  4.0 输入  5.0 等待  6.0 滚轮# ctype     空:0#           字符串:1#           数字:2#           日期:3#           布尔:4#           error:5def dataCheck(sheet1):    checkCmd = True    #行数检查    if sheet1.nrows<2:        print("没数据啊哥")        checkCmd = False    #每行数据检查    i = 1    while i < sheet1.nrows:        # 第1列 操作类型检查        cmdType = sheet1.row(i)[0]        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
#任务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            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代表输入        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'    #打开文件    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)        elif key=='2':            while True:                mainWork(sheet1)                time.sleep(0.1)                print("等待0.1秒")        else:        print('输入有误或者已经退出!')

完整的文件压缩包公众号后台发送:waterRPA

获取下载