python实现app自动化脚本
第一步:安装Android SDK(1)下载platform-tools(2)添加环境变量将下载好的压缩包文件解压,路径尽量不要包含中文字符右键点击我的电脑–>属性–>高级系统设置–>环境变量–>选中系统环境变量中的Path–>编辑–>新建–>输入第一步的解压路径–>一路确定打开cmd窗口,输入adb version,如下即安装成功第二步:调试手机,
·
第一部分:打开应用
第一步:安装Android SDK
(1)下载
(2)添加环境变量
- 将下载好的压缩包文件解压,路径尽量不要包含中文字符
- 右键点击我的电脑–>属性–>高级系统设置–>环境变量–>选中系统环境变量中的Path–>编辑–>新建–>输入第一步的解压路径–>一路确定
- 打开cmd窗口,输入
adb version,如下即安装成功
第二步:调试手机,连接电脑
(1)使用USB线将电脑与手机相连
(2)将手机调制开发模式
- 可以到「设置」-「开发者选项」-「Android 调试」查看
- 如果在设置里找不到开发者选项,在「设置」-「关于手机」连续点击「版本号」7 次
(3)打开手机USB调试
- 可以到「系统和更新」-「开发人员选项」-「USB调试」
(4)验证是否连接成功
- 打开cmd窗口
- 输入
adb devices,如下即连接成功
第三步:寻找应用入口,重中之重,决定后续能否继续进行
(1)使用adb命令获取所有安装的app包名
adb shell pm list packages
.....
package:com.huawei.lbs
package:com.android.bluetooth
package:com.android.providers.contacts
package:com.netease.cloudmusic
package:tv.danmaku.bili # 作为测试数据
package:com.android.captiveportallogin
package:com.huawei.audioaccessorymanager
package:com.huawei.hiaction
package:com.huawei.trustedthingsauth
package:com.eg.android.AlipayGphone
package:com.huawei.android.airsharing
package:cn.wps.moffice_eng
package:com.free.player
package:com.huawei.rcsserviceapplication
package:com.huawei.ohos.famanager
.....
(2)获取某个应用包名的启动入口
adb shell dumpsys package tv.danmaku.bili | findstr activity
5106328 tv.danmaku.bili/com.alibaba.cloudgame.joystick.ui.activity.JoystickGroupActivity filter 51a3fc3
第四步:启动该应用
adb shell am start -n tv.danmaku.bili/com.alibaba.cloudgame.joystick.ui.activity.JoystickGroupActivity
第二部分:app元素定位
第一步:安装uiautomator2
-
谷歌公司进行UI自动化测试工具uiautomator的Python版本,功能类似浏览器F12中可以根据ID找到UI元素的位置,并做出相应的手势动作模拟人为操作
pip install --pre -U uiautomator2
第二步:给手机安装atx-agent
- 首先设备连接到PC,并能够adb devices发现该设备(参考adb工具安装步骤),安装完成后手机上会出现一个
黄色小汽车ATX应用python -m uiautomator2 init
第三步:安装控件定位工具,帮助我们获取屏幕中的控件
- 针对Android和iOS原生应用快速定位元素坐标,自动生成代码并点击运行
pip install --pre weditor # 如果报错,直接指定低版本安装 pip install weditor==0.6.4
第四步:启动weditor
- 该应用会在本地起一个服务,监听端口17310,自动打开一个浏览器窗口,将我们手机投射到该窗口,在右边可以直接写代码
python -m weditorC:\Users\fatpuffer>python -m weditor listening on http://192.168.0.108:17310 [I 220414 21:08:22 web:2246] 304 GET / (::1) 9.37ms [I 220414 21:08:24 web:2246] 304 GET /cdn.jsdelivr.net/bootstrap/3.3.7/css/bootstrap.min.css (::1) 1389.65ms [I 220414 21:08:24 web:2246] 304 GET /unpkg.com/element-ui/lib/theme-chalk/index.css (::1) 6.68ms [I 220414 21:08:24 web:2246] 304 GET /static/libs/css/buttons.css (::1) 5.98ms [I 220414 21:08:24 web:2246] 304 GET /static/libs/fontawesome/css/font-awesome.min.css (::1) 5.99ms [I 220414 21:08:24 web:2246] 304 GET /cdn.jsdelivr.net/bootstrap.select/1.12.2/css/bootstrap-select.min.css (::1) 7.98ms [I 220414 21:08:24 web:2246] 304 GET /cdn.jsdelivr.net/npm/jstree@3.3.8/dist/themes/default/style.min.css (::1) 8.96ms

第三部分:实现自动观看视频领取宝箱
- 实现同时打开抖音极速版、快手极速版、今日头条极速版、趣头条四个app,在app之前进行切换观看视频,获取宝箱
import time import random from decimal import Decimal import uiautomator2 as u2 from time import sleep d = u2.connect("输入自己的设备编号") packages = {'com.ss.android.ugc.aweme.lite', 'com.kuaishou.nebula', 'com.jifen.qukan', 'com.ss.android.article.lite'} def start_app(package_name, flag=False): d.app_start(package_name) if flag: sleep(10) def close_app(package_name): d.app_stop(package_name) def view_app(package_name, flag=False): if package_name == "com.jifen.qukan" and flag: sleep(10) rand1 = random.randint(8, 11) / 100 rand2 = random.randint(5, 7) / 100 x = Decimal(0.4 + rand1).quantize(Decimal("0.00")) y = Decimal(0.9 + rand2).quantize(Decimal("0.000")) d.click(x, y) elif package_name == "com.ss.android.article.lite" and flag: sleep(10) rand1 = random.randint(1, 9) / 100 rand2 = random.randint(1, 10) / 1000 x1 = Decimal(0.3 + rand1).quantize(Decimal("0.00")) y1 = Decimal(0.1 + rand2).quantize(Decimal("0.000")) d.click(x1, y1) sleep(3) rand3 = random.randint(1, 4) / 10 rand4 = random.randint(2, 4) / 10 rand5 = random.randint(1, 5) / 100 x2 = Decimal(rand3 + rand5).quantize(Decimal("0.000")) y2 = Decimal(rand4 + rand5).quantize(Decimal("0.000")) d.click(x2, y2) sleep(7) d.swipe_ext("up", random.randint(8, 9) / 10) while True: current_time = int(time.time()) for app in packages: print("打开应用:%s" % app) start_app(app, True) flag = True while True: for app in packages: d.app_start(app) view_app(app, flag) flag = False # 每个应用的视频观看10秒 sleep(10) # 连续工作2小时,关闭应用休息5分钟 survive_seconds = int(time.time()) - current_time if survive_seconds >= 2 * 60 * 60: for app in packages: close_app(app) sleep(random.randint(1, 3)) sleep(5 * 60) break
第四部分:文档
https://crifan.github.io/android_automation_uiautomator2/website/
更多推荐


所有评论(0)