第一部分:打开应用

第一步:安装Android SDK
(1)下载
(2)添加环境变量
  1. 将下载好的压缩包文件解压,路径尽量不要包含中文字符
  2. 右键点击我的电脑–>属性–>高级系统设置–>环境变量–>选中系统环境变量中的Path–>编辑–>新建–>输入第一步的解压路径–>一路确定
  3. 打开cmd窗口,输入adb version,如下即安装成功
    在这里插入图片描述
第二步:调试手机,连接电脑
(1)使用USB线将电脑与手机相连
(2)将手机调制开发模式
  • 可以到「设置」-「开发者选项」-「Android 调试」查看
  • 如果在设置里找不到开发者选项,在「设置」-「关于手机」连续点击「版本号」7 次
(3)打开手机USB调试
  • 可以到「系统和更新」-「开发人员选项」-「USB调试」
(4)验证是否连接成功
  1. 打开cmd窗口
  2. 输入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 weditor
    
    C:\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/

Logo

这里是“一人公司”的成长家园。我们提供从产品曝光、技术变现到法律财税的全栈内容,并连接云服务、办公空间等稀缺资源,助你专注创造,无忧运营。

更多推荐