代碼如下:
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輸入信息,可以多個sheet
3.運行RunData.py文件