上海建设工程信息网站,网站添加邮件发送怎么做,深圳网站建设方案维护,网站的制作步骤Airtest实施手机精准截图
一、接口查找
首先我们需要知道我们应该怎么实现用脚本去进行局部截图#xff0c;我们可以通过翻阅Airtest的API文档发现#xff0c;Airtest提供了 crop_image(img, rect) 方法可以帮助我们实现局部截图#xff0c;在我们往期的推文里也介绍过该接…Airtest实施手机精准截图
一、接口查找
首先我们需要知道我们应该怎么实现用脚本去进行局部截图我们可以通过翻阅Airtest的API文档发现Airtest提供了 crop_image(img, rect) 方法可以帮助我们实现局部截图在我们往期的推文里也介绍过该接口
二、简单用例 三、代码实现
__author__ AirtestProject
from airtest.core.api import *
from airtest.aircv import *auto_setup(__file__)from poco.drivers.android.uiautomation import AndroidUiautomationPoco
poco AndroidUiautomationPoco(use_airtest_inputTrue, screenshot_each_actionFalse)#获取屏幕分辨率
android device()
xyandroid.get_current_resolution()screen G.DEVICE.snapshot()#使用poco去寻找控件
if poco(text游戏增强器).exists():apoco(text游戏增强器).get_position()#获取控件的中心坐标bpoco(text游戏增强器).get_size()#获取控件的实际长宽#计算左上角坐标转化成绝对坐标x1int((a[0]-0.5*b[0])*xy[0])y1int((a[1]-0.5*b[1])*xy[1])#计算右下角坐标转化成绝对坐标x2int((a[0]0.5*b[0])*xy[0])y2int((a[1]0.5*b[1])*xy[1])# 局部截图screen aircv.crop_image(screen,(x1,y1,x2,y2))# 保存局部截图到log文件夹中try_log_screen(screen)
四、封装函数
4.1. 获取坐标 # 获取坐标
def huoqu_zuobiao(lable):# 获取标签lable_pos lable.attr(pos)lable_size lable.attr(size)lable_0x (lable_pos[0] - lable_size[0]/2)*x_0lable_0y (lable_pos[1] - lable_size[1]/2)*y_0lable_1x (lable_pos[0] lable_size[0]/2)*x_0lable_1y (lable_pos[1] lable_size[1]/2)*y_0lable_zuobiao [lable_0x,lable_0y,lable_1x,lable_1y]# print([zhutu_0x,zhutu_0y,zhutu_1x,zhutu_1y])# print(lable_zuobiao)return(lable_zuobiao)
4.2 、截图
# 截图
def jietu(zuobiao,lujing,s_0):screen G.DEVICE.snapshot()tu_pian aircv.crop_image(screen,zuobiao)print(截图中0)# xia_1y tupian_pos_1y# 保存局部截图到指定文件夹中pil_image cv2_2_pil(tu_pian)print(截图中1)#filename_0 (datetime.datetime.fromtimestamp(s_0)).strftime(%Y_%m_%d_%H_%M_%S_%f)# filename_00 timestamp_to_datetime()# filename_0 filename_00 filename_0 timestamp_to_datetime()print(截图中2)a_image str(filename_0)print(a_image)# 设置单张截图的最大尺寸不超过1200*1200# snapshot(filenametest2.png, msgtest02, quality90, max_size1200)# G:\多多买菜项目\西安买菜项目\西安多多买菜项目.air\图片print(截图中3)path lujing/{}.png.format(a_image)print(截图完成{}.format(path))print(截图中4)pil_image.save(path.format(a_image), quality99, optimizeTrue)print(截图中5)print(截图完成)return(path)4.3、截图命名
def timestamp_to_datetime():# 示例时间戳timestamp time.time()# 将时间戳转换为datetime对象dt_object datetime.fromtimestamp(timestamp)# 返回格式化的年月日时分秒毫秒# str_m str(dt_object.strftime(%Y_%m_%d_%H_%M_%S_%f)[:-2])str_m str(dt_object.strftime(%Y_%m_%d_%H_%M_%S_%f))print(str_m)print(type(str_m))return(str_m)五、扩展
5.1、读取文件行数
def read_specific_line(filename, lineno):读取文件中的指定行:param filename: 文件名:param lineno: 行号从1开始计数:return: 指定行的内容如果行号不存在返回Nonetry:# linecache从1开始计数所以需要减1line linecache.getline(filename, lineno)except IOError:print(f无法打开文件: {filename})line Nonereturn line.strip() # 移除行尾的换行符5.2 字符串转为日期并对比
def duibi_riqi(string):date_00 2023/01/01date_11 re.findall(r\d{1,4}[/-]\d{1,2}[/-]\d{1,4}, string)date_11 date_11[0]print(提取日期{}.format(date_11))# 使用strptime转换为日期# date datetime.strptime(date_string, %Y-%m-%d)date_0 datetime.strptime(date_00, %Y/%m/%d)date_1 datetime.strptime(date_11, %Y/%m/%d)print(类型,type(date_0),type(date_0))print(提取日期{},{}.format(date_0,date_1))if date_1 date_0:jieguo 小于elif date_1 date_0:jieguo 大于等于else:jieguo 大于等于print(jieguo)return(jieguo)