上篇文章了解了基于pyautoGUI库的元素识别,这次又遇到一个问题:桌面应用程序做自动化测试时,无法识别到页面元素,且页面的元素,每运行一次都会变动(累计增加),为了达到目的,在网上找了相关资料,坐下总结
一、前期准备
1、准备好图片(整个桌面程序的截图)
2、在百度智能云注册API(https://login.bce.baidu.com/?account=&redirect=http%3A%2F%2Fconsole.bce.baidu.com%2Fai%2F%3F_%3D1553338619822%26fromai%3D1#/ai/ocr/overview/index),
原理很简单,就是用了百度智能云的图片识别接口进行识别,结果写到本地,其他厂的我也试过,个人感觉腾讯的要比百度的精确,并且得出来的结果更加好用,可以方便的写入excel,但是无奈要收费,所以最终用了百度,每天1000次免费识别,够用了。
3、安装支持的库:
pip install baidu-aip
二、文件目录
其中:要识别的图片文件夹存放需要识别的图片;successful.txt存放从图片上识别的所有数据;123.txt存放筛选后所需的数据
三、示例代码
#coding:utf-8
import os
from aip import AipOcr
print("正在努力识别中,请耐心等待".center(60))
APP_ID = '1xxxxx2'
API_KEY = 'xxxxxx' # 需要自己去注册
SECRET_KEY = 'GxxxxxxxxL'
client = AipOcr(APP_ID, API_KEY, SECRET_KEY)
BASE_DIR = os.getcwd()
id_list = os.listdir(os.path.join(BASE_DIR, "要识别的图片"))
success_path = os.path.join(BASE_DIR, "successful.txt")
sss = os.path.join(BASE_DIR, "123.txt")
count = 0
for id in id_list:
img = open(os.path.join(BASE_DIR, "要识别的图片", id), 'rb').read()
msg = client.basicGeneral(img) # 识别图片
str1 = ""
for i in msg["words_result"]:
print("{}".format(i["words"]).center(60))
str1 += "{}\n".format(i["words"])
with open(success_path, 'a') as f:
f.write("{}\n\n".format(str1))
print("\n")
print("写入中,请稍等。。。".center(60))
count += 1
print("\n\n")
print("执行结束,共完成了{}图片的识别,资料已写入到successful.txt".format(count).center(60))
# 打开文件,筛选需要的行数数据
with open(success_path, 'r') as f: #打开文件
lines = f.readlines() #读取所有行
last_line = lines[-11] #取最后一行
print('文件' + success_path + '倒数第11行为:'+ last_line)
last_data = last_line[6 : 10]
print(last_data)
# 写入文件保存筛选结果
with open(sss, 'a') as f:
f.write("{}\n\n".format(last_data))
print("\n")
print("写入成功".center(60))
运行结果
基本上实现了所需功能,这样,只要每次运行后读取123.txt文档中的数据就可以执行下一步操作了。(由于时间急,后续在考虑封装优化代码吧)