代码如下:
GetData.py
import xlrd
class ReadExcel():
def __init__(self,file):
self.open_excel = xlrd.open_workbook(file)
# 获取Sheet名
def GetSheetName(self):
sheet_name = self.open_excel.sheet_names()
return sheet_name
# 获取数据
def ExcelData(self,sheetname):
sheet = self.open_excel.sheet_by_name(sheetname)
# 第一行作为dict的key
keys = sheet.row_values(0)
# nrows:总行数,ncols:总列数
nrows,ncols = sheet.nrows,sheet.ncols
# 整个sheet的数据
y = []
if nrows < 2:
print ('总行数少于1')
else:
# 循环取行的数据
for i in range(1,nrows):
# 一行的数据
k = {}
# 循环取列的数据
for j in sheet.row_values(i):
# 获取当前取的数据下标
data_index = sheet.row_values(i).index(j)
# 写入字典,第一行作为key
k[keys[data_index]] = j
y.append(k)
return y
if __name__ == '__main__':
E = ReadExcel(r'./Operation.xlsx')
print (E.GetSheetName(),E.ExcelData('Sheet1'))
GetPosition.py
import aircv as ac
import sys
def matchImg(imgsrc,imgobj,confidencevalue=0.9):#imgsrc=原始图像,imgobj=待查找的图片
imsrc = ac.imread(imgsrc)
imobj = ac.imread(imgobj)
match_result = ac.find_all_template(imsrc,imobj,confidencevalue) # {'confidence': 0.5435812473297119, 'rectangle': ((394, 384), (394, 416), (450, 384), (450, 416)), 'result': (422.0, 400.0)}
if match_result:
return match_result[0]['result']
else:
input('没有找到图片,结束运行')
sys.exit()
if __name__ == '__main__':
position = matchImg(r'.\imgobj.png',r'F:\test\rrrr\222.png',confidencevalue = 0.9)
RunData.py
from GetData import ReadExcel
from GetPosition import matchImg
from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains
import time
class RunData():
def __init__(self):
self.driver = webdriver.Chrome()
def ProcessExcelData(self,data):
for i in data:
if i['操作图片路径']:
self.driver.get_screenshot_as_file(r'.\imgobj.png')
size = matchImg(r'.\imgobj.png',r'%s'%(i['操作图片路径']))
time.sleep(1)
if i['操作方式'] == '输入网址':
self.driver.get(i['值'])
elif i['操作方式'] == '输入':
ActionChains(self.driver).move_by_offset(size[0], size[1]).click().send_keys(i['值']).perform()
ActionChains(self.driver).move_by_offset(-size[0], -size[1]).perform()
elif i['操作方式'] == '点击':
ActionChains(self.driver).move_by_offset(size[0], size[1]).click().perform()
ActionChains(self.driver).move_by_offset(-size[0], -size[1]).perform()
elif i['操作方式'] == '等待':
time.sleep(eval(i['值']))
elif i['操作方式'] == '关闭浏览器':
self.driver.quit()
if __name__ == '__main__':
E = ReadExcel(r'./Operation.xlsx')
Sheet = E.GetSheetName()
for j in Sheet:
TestData = E.ExcelData(j)
R = RunData()
R.ProcessExcelData(TestData)
原理;
GetData.py获取excel操作步骤,GetPosition.py通过截图获取当前页面操作的坐标点,再通过RunData.py文件进行操作
使用步骤:
1.截取需要操作的元素
2.在excel输入信息
3.运行RunData.py文件