开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第 16 天,点击查看活动详情
今天和一个朋友聊天,他咨询了一个pyautogui的自动化办公问题,他是一个抖音商户,因为抖音商户如果3分钟不回复客户就会降低店铺等级,故他在休息的时候需要有个软件能够自动回复客户信息,之前写过pyautogui的基本用法,传送门(python自动化办公--pyautogui控制鼠标和键盘操作),故在这个需求上找到了一个方法,其基本原理就是自动识别到聊天界面的消息列表的未读消息,然后在休息的时候发送一个"客服不在",从而绕过平台的回复策略
- 安装python3.4以上版本,并配置环境变量(目前有装3.9遇到坑的,我个人用的3.7.6)
教程:www.runoob.com/python3/pyt…
- 安装依赖包
方法:在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失败
-
把每一步要操作的图标、区域截图保存至本文件夹 png格式(注意如果同屏有多个相同图标,回默认找到最左上的一个,因此怎么截图,截多大的区域,是个学问,如输入框只截中间空白部分肯定是不行的,宗旨就是“唯一”)
-
在cmd.xls 的sheet1 中,配置每一步的指令,如指令类型1234 对应的内容填截图文件名(别用中文),指令5对应的内容是等待时长(单位秒) 指令6对应的内容是滚轮滚动的距离,正数表示向上滚,负数表示向下滚,数字大一点,先用200和-200试试
-
保存文件
-
双击waterRPA.py打开程序,按1表示excel中的指令执行一次,按2表示无限重复执行直到程序关闭
-
如果报错不能运行用vscode运行看看报错内容(百度vscode安装与运行python程序,将报错内容xxxError后面的贴到百度上面去搜搜看)
-
开始程序后请将程序框最小化,不然程序框挡住的区域是无法识别和操作的
-
如果程序开始后因为你选择了无限重复而鼠标被占用停不下来,alt+F4吧~
想自己开发和优化的可以看看pyautogui库其他用法
完整源码:
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
获取下载