关于手机app或者小程序自动化如何移动滑块
1.前言
最近由于某多频繁升级为了有数据无奈弄了自动化.自动化难点在于滑块处理
2.自动化工具选择airtest
1.正常协议过滑块
首先计算出缺口图片
到滑块图片的距离
然后与本地图片的大小与页面上图片css大小进行比例换成✖️我们本地计算出来的距离
2.airtest完成滑动
至此我们要完成airtest移动滑块就需要计算自动化工具要滑动多少
本着上面过协议的思路
我们先要计算出滑块到缺口的距离
先用hook或者mit形式获取滑块
这里一般就使用opencv
j计算一下
import cv2
def show(name):
'''展示圈出来的位置'''
cv2.imshow('Show', name)
cv2.waitKey(0)
cv2.destroyAllWindows()
def _tran_canny(image):
"""消除噪声"""
image = cv2.GaussianBlur(image, (3, 3), 0)
return cv2.Canny(image, 50, 150)
def detect_displacement(img_slider_path, image_background_path,slide_width):
"""
距离计算
:param img_slider_path: 缺口图片位置
:param image_background_path: 背景图片位置
:param slide_width: 滑块显示的距离
:return : 滑动的距离
"""
# # 参数0是灰度模式
image = cv2.imread(img_slider_path, 0)
template = cv2.imread(image_background_path, 0)
# 寻找最佳匹配
res = cv2.matchTemplate(_tran_canny(image), _tran_canny(template), cv2.TM_CCOEFF_NORMED)
# 最小值,最大值,并得到最小值, 最大值的索引
min_val, max_val, min_loc, max_loc = cv2.minMaxLoc(res)
top_left = max_loc[0] + 30 # 横坐标 可加可不加,后面滑动时候也要减去调整建议不加
# 展示圈出来的区域
# x, y = max_loc # 获取x,y位置坐标
# w, h = image.shape[::-1] # 宽高
# print(w, h)
# print(top_left)
# print(template.shape[1])
# cv2.rectangle(template, (x, y), (x + w, y + h), (7, 249, 151), 2)
# show(template)
top_left = int(top_left * (slide_width / template.shape[1]))
return top_left
关于代码中slide_width参数,我们要打开airtest中的实时坐标
然后滑块图片最右侧
到滑块图片最左侧
我们真实操作滑块滑动距离是上述计算出来的距离-滑块的起始按住的位置
到 小滑块最右的位置
aitest部分代码
from poco.drivers.android.uiautomation import AndroidUiautomationPoco
from airtest.core.api import *
def get_poco():
'''获取设备poco'''
class_name = '你的设备'
connect_device(f"Android:///{class_name}?cap_method=JAVACAP&&ori_method=ADBORI&&touch_method=ADBTOUCH")
set_current(class_name)
dev = device()
poco = AndroidUiautomationPoco(use_airtest_input=True, screenshot_each_action=False,device=dev)
return poco
def start_verification(poco):
w = get_verify_verification_w() #你自己获取上述距离的方法
print(f"w----------{w}")
w = w - 90 #90为滑块的-`滑块的起始按住的位置`到 `小滑块最右的位置`
s_h = 0.623
s_w = 0.185
e_h = s_h +-random.randint(5,20)/1000 #滑块上下宽度浮动
width, height = poco.get_screen_size()
e_w = round(s_w + w/width,3)
print("滑动开始")
print([(s_w, s_h),(e_w,e_h)])
poco.swipe([s_w, s_h],[e_w,e_h])
print("滑动结束")
time.sleep(3)
print("按返回键")
关于swip方法补充
duration – 在屏幕上滑动的时长,默认是 0.5
steps – 滑动过程中的步数,默认为 5
fingers – 滑动的手指数量,1 或者 2,默认为 1
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek “源神”启动!「GitHub 热点速览」
· 我与微信审核的“相爱相杀”看个人小程序副业
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 如何使用 Uni-app 实现视频聊天(源码,支持安卓、iOS)
· C# 集成 DeepSeek 模型实现 AI 私有化(本地部署与 API 调用教程)
2020-12-08 ProxyDroid+wifi设置抓xx点评抓不到的包
2019-12-08 python爬虫-京东商品爬取