0.前言
最开始写过利用夜神模拟器结合appium,做APP自动化测试 1.python–安卓APP自动化测试环境搭建(Appium+夜神模拟器) 这是win10实现的,电脑总不能一直开着,想到能不能在树莓派上跑一下,弄了很久也没安装成功安卓模拟器,退而求其次现在用旧手机作为安卓终端,直接控制实现。
1.实验目的
自动化实现【什么值得买】APP自动打卡功能,并截图发送到微信,及时检查打卡是否成功。
2.实验方法
树莓派连接安卓手机,adb代码控制打卡截图,上传【巴法云】推送到微信。
-
连接手机 安卓手机通过数据线连接树莓派后,打开手机USB调试,找到【开发者选项】-【指针位置】 ,打开之后能够看到当前按压位置的准确坐标,记录下来作为输入密码用。 -
解锁手机 直接用adb的命令可以模拟触摸操作,很多功能也有现成的。 【 需要点亮屏幕,上划进入解锁界面,输入密码】 在这里隐去部分解锁密码,测试好每个数字精确位置,如下代码,首先adb keyevent26是作为开启电源键;滑动屏幕需要adb swipe从一个位置到另一个位置;输入密码需要adb tap 数字位置。
def mobile_in(code):
os.popen('adb shell input keyevent 26')
time.sleep(1)
os.popen('adb shell input swipe 800 1800 800 1000')
time.sleep(1)
for i in range(len(code)):
if code[i] == '9':
os.popen('adb shell input tap 820 1600')
time.sleep(0.5)
elif code[i] == '6':
os.popen('adb shell input tap 850 1400')
time.sleep(0.5)
- APP打卡
首先确定APP包的具体名称【com.smzdm.client.android/.app.HomeActivity】 可以通过以下命令行查看。
adb shell pm list package
打开APP后,需要找到打卡位置坐标进行tap,完成打卡。 在这里思路和python–安卓APP自动化测试环境搭建(Appium+夜神模拟器),不太一样,之前可以通过关键字进行定位,在这里为了方便还是通过坐标进行定位,注意如果有APP更新或者其他弹窗提示,需要进一步对应进行优化。
def check():
time.sleep(3)
os.system('adb shell am start -n com.smzdm.client.android/.app.HomeActivity')
time.sleep(5)
os.system('adb shell input tap 950 2200')
time.sleep(5)
os.system('adb shell input tap 880 310')
time.sleep(5)
os.system('adb shell am force-stop com.smzdm.client.android')
- 截图上传
截图上传这个想法,是整体功能做好了以后突然想到的,参照之前ESP32cam拍照上传,所以可以截图上传,推送到微信,对打卡情况进行检查。 ESP32cam拍照上传参考: 2.【好奇心驱动力】ESP32-CAM人体感应拍照并推送到微信 【巴法云】官方示例都是基于ESP32的,需要考虑上传数据具体格式,通过查看接入文档,能够找到图片HTTP POST要求,消息体是图片二进制格式。 对应对构造POST内容。 截图保存到树莓派,直接通过adb screencap,开始以为截图会保存一份到手机,后面发现只存一份到代码同一目录下。
def screencap():
os.system("adb shell screencap -p /sdcard/a.png")
os.system("adb pull /sdcard/a.png .")
load()
def upload():
data = open("a.png","rb").read()
headers = {"Content-Type":"image/jpg","Authorization":uid,"Authtopic":topic,"Wechatmsg":wechatMsg}
rep = requests.post(url=post_url,data=data,headers=headers)
print (rep)
- 定时启动
定时启动暂时用的是python schedule库,没有用树莓派sudo crontab -e,这个后续运行一段时间再进行调整,主要是懒得再写日志了。
schedule.every().day.at("20:49").do(main)
while True:
schedule.run_pending()
time.sleep(1)
3.实验结果
【解锁手机】 【APP打卡】
【截图上传】 代码运行结果
微信提醒 打卡记录
4.后续问题
最好能够在树莓派上安装安卓模拟器,这样能够省去连接手机。 代码运行改为计划任务比较好。 【源代码】 https://download.csdn.net/download/m0_46622606/50678738
|