Python图像识别自动化脚本

  1. 安装python3.4以上版本,并配置环境变量
    >python安装教程<
  2. 安装依赖包
    pip install pyperclip pip install xlrd pip install pyautogui==0.9.50 pip install opencv-python pip install pillow
  3. 把每一步要操作的图标、区域截图保存至本文件夹  png格式(注意如果同屏有多个相同图标,回默认找到最左上的一个,因此怎么截图,截多大的区域,是个学问,如输入框只截中间空白部分肯定是不行的,宗旨就是“唯一”)
  4. 在cmd.xls 的sheet1 中,配置每一步的指令,如指令类型1234  对应的内容填截图文件名,指令5对应的内容是等待时长(单位秒) 指令6对应的内容是滚轮滚动的距离,正数表示向上滚,负数表示向下滚
  5. 保存文件
  6. 双击waterRPA.py打开程序,按1表示excel中的指令执行一次,按2表示无限重复执行直到程序关闭
  • 如果报错不能运行用vscode运行看看报错内容
  • 开始程序后请将程序框最小化,不然程序框挡住的区域是无法识别和操作的
  • 如果程序开始后因为你选择了无限重复而鼠标被占用停不下来,alt+F4吧~
    >二次开发和优化参考pyautogui库用法<
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
import pyautogui
import time
import xlrd
import pyperclip

[[定义鼠标事件]]
[[pyautogui库其他用法]] [https://blog.csdn.net/qingfengxd1/article/details/108270159](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:5

def 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('输入有误或者已经退出!')

yfsutlfv.jpg