当前位置: 首页 > news >正文

Airtest实施手机精准截图

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_input=True, screenshot_each_action=False)#获取屏幕分辨率
android = device()
xy=android.get_current_resolution()screen = G.DEVICE.snapshot()#使用poco去寻找控件
if poco(text="游戏增强器").exists():a=poco(text="游戏增强器").get_position()#获取控件的中心坐标b=poco(text="游戏增强器").get_size()#获取控件的实际长宽#计算左上角坐标,转化成绝对坐标x1=int((a[0]-0.5*b[0])*xy[0])y1=int((a[1]-0.5*b[1])*xy[1])#计算右下角坐标,转化成绝对坐标x2=int((a[0]+0.5*b[0])*xy[0])y2=int((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(filename="test2.png", msg="test02", quality=90, max_size=1200)# G:\多多买菜项目\西安买菜项目\西安多多买菜项目.air\图片print("截图中3")path = lujing+"/{}.png".format(a_image)print("截图完成{}".format(path))print("截图中4")pil_image.save(path.format(a_image), quality=99, optimize=True)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: 指定行的内容,如果行号不存在,返回None"""try:# 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/01"date_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)
http://www.lryc.cn/news/411495.html

相关文章:

  • 前端面试宝典【设计模式】【2】
  • 技术汇总笔记7:条件分支相关内容
  • 一文让你学会python:面向对象
  • mac电脑安装 docker镜像 btpanel/baota
  • Python写UI自动化--playwright(pytest.ini配置)
  • java实现序列化操作
  • 视频帧的概念
  • 卫星导航系统的应用领域与发展前景
  • FPGA开发——数码管的使用(二)
  • 技术汇总记录笔记5:在 C++ 中,如何使用正则表达式来验证一个字符串是否只包含数字?
  • ai模特换装软件哪个好用?不知道怎么穿搭就用这几个
  • HCL实验2:VLAN
  • 输出总分题目
  • 自定义协议(应用层协议)——网络版计算机基于TCP传输协议
  • 在jmeter中使用javascript脚本
  • [Bugku] web-CTF靶场详解!!!
  • 系统架构师(每日一练11)
  • 【前端】fis框架学习
  • STM32高级运动控制系统教程
  • 链式栈,队列与树形结构
  • Android历史版本与APK文件结构
  • 文件解析漏洞集合
  • 如何利用大语言模型进行半监督医学图像分割?这篇文章给出了答案
  • 库文件的制作和makefile文件操作基础实现
  • 【Linux】进程创建进程终止进程等待
  • 编程的进阶和并发之路
  • 文件系统 --- 文件结构体,文件fd以及文件描述符表
  • 【第三节】python中的函数
  • “论云原生架构及其应用”写作框架软考高级论文系统架构设计师论文
  • 深度剖析Google黑科技RB-Modulation:告别繁琐训练,拥抱无限创意生成和风格迁移!