uiautomator2 adb 安装与运行 python控制手机软件

研究了三天才搞定的python自动化控制手机软件,将学到的步骤和遇到的各种坑在这里记录下来,方便我之后查找

写代码前的准备工作

一、下载adb软件、添加环境变量、调试

1.0 下载adb

https://www.banxiayue.com/adb-1-0-39.html
这个是下载地址,有好几个版本

1.1 下载好后配置环境变量

打开环境变量 ----将adb的文件地址复制到环境变量中,直接上图来的更直接
uiautomator2 adb 安装与运行 python控制手机软件_第1张图片
uiautomator2 adb 安装与运行 python控制手机软件_第2张图片
uiautomator2 adb 安装与运行 python控制手机软件_第3张图片

1.2打来手机的调试功能

我的手机是华为手机
uiautomator2 adb 安装与运行 python控制手机软件_第4张图片
uiautomator2 adb 安装与运行 python控制手机软件_第5张图片
1.3 用数据线将手机与电脑连接

1.4 打开cmd,输入 adb devices 指令 查看是否连接

window + R 键打开运行窗口,输入cmd,按回车打开cmd窗口。
uiautomator2 adb 安装与运行 python控制手机软件_第6张图片
uiautomator2 adb 安装与运行 python控制手机软件_第7张图片
这里遇到的坑:
下载的adb版本过低,怎么都没有办法连接上,如果连接出现offine说明是版本过低,就重新下载高版本adb替换掉低版本的

二、 uiautomator2 安装

2.0 在cmd中输入 pip3 install --pre -U uiautomator2 下载uiautomator2库
uiautomator2 adb 安装与运行 python控制手机软件_第8张图片

三、 安装 手机设备环境

3.0 cmd窗口中输入 python -m uiautomator2 init 下载到手机上一个叫ATX的软件
uiautomator2 adb 安装与运行 python控制手机软件_第9张图片
uiautomator2 adb 安装与运行 python控制手机软件_第10张图片

3.1 在cmd中输入 python -m weditor 命令,连接 手机与电脑,同时会打开浏览器窗口,显示将手机上的内容投射到电脑上

uiautomator2 adb 安装与运行 python控制手机软件_第11张图片
uiautomator2 adb 安装与运行 python控制手机软件_第12张图片
在此,前期的准备工作就全部做完了,接下来就可以写代码来操控手机软件了。
注意:在这个期间不要将cmd窗口关闭,也不要讲数据线拔掉,一直连接着手机与电脑

下面的是我研究了几天,写出来的自动发送消息的代码,可以自动发送消息,但有bug,技术不到家,也暂时不打算完善了。

import time
import uiautomator2

text = "戳你一下,看你在干嘛"

def diandian():
    """点点代码, 要打开到点点页面才能执行代码"""
    d = uiautomator2.connect("192.168.8.101")
    num = 0
    for i in range(150):
        if d(resourceId="com.immomo.momo:id/img_dialog_close"):
            print(1)
            d(resourceId="com.immomo.momo:id/img_dialog_close").click()
        elif d(resourceId="com.immomo.momo:id/iv_close_vip_view"):
            d(resourceId="com.immomo.momo:id/iv_close_vip_view").click()
            print("今日点击达到上限结束循环,共点击  %d  次" % (num))
            break

        d(resourceId="com.immomo.momo:id/card_right_btn").click()
        time.sleep(0.1)
        num += 1
        print("已点击:%d" % (num))
        time.sleep(0.5)

def dongtai():
    '''附近动态  打开到附近动态的页面才能执行'''
    d = uiautomator2.connect("192.168.8.101")
    num = 1

    for i in range(150):
        d(resourceId="com.immomo.momo:id/iv_user_head").click()  # 点击头像
        print("已点击头像 %d" % (num))
        time.sleep(1)

        if not d(text="打招呼"):
            d.swipe(0, 1000, 700, 1000)  # 从左向右滑动屏幕,返回上一级
            # d(description="Navigate up").click()  # 向上一级返回
            print("返回上一级菜单 %d" % (num))
            time.sleep(1)
            d.swipe(400, 800, 400, 400)  # 向上滑动屏幕
        else:
            if d(resourceId="com.immomo.momo:id/profile_layout_start_chat"):
                d(resourceId="com.immomo.momo:id/profile_tv_start_chat", text="打招呼").click()
                print("------1.1-----")
            elif d(text="打招呼"):
                d(text="打招呼").click()
            time.sleep(0.5)
            d(text="礼貌地打个招呼...").set_text(text)
            d(text="发送").click()
            print("---2---")
            # d.click(0.07, 0.067)
            d.swipe(0, 1000, 700, 1000)  # 从左向右滑动屏幕,返回上一级
            time.sleep(0.2)
            d.swipe(0, 1000, 700, 1000)  # 从左向右滑动屏幕,返回上一级
            print("---2.2---")
            time.sleep(0.5)
            if d(description="Navigate up"):
                d(description="Navigate up").click()  # 向上一级返回
            print("返回上一级菜单 %d" % (num))
            time.sleep(1)

            d.swipe(400, 800, 400, 400)  # 向上滑动屏幕
            print("暂停 %d 秒" % (2))
            time.sleep(2)
            num += 1


def fujinren():
    '''附近人  打开到附近动态的页面才能执行'''
    d = uiautomator2.connect("192.168.8.101")
    num = 1

    for i in range(100):
        if d(resourceId="com.immomo.momo:id/user_avatar_layout"):
            print("--------2.0-------------")
            if d(resourceId="com.immomo.momo:id/nearby_live_indicate_layout_text"):
                print("--------2.1----------")
                d.swipe(260, 664, 260, 400)  # 向上滑动屏幕
                print("=========2 end ==========\n")
            else:
                d(resourceId="com.immomo.momo:id/userlist_item_iv_face").click()  # 点击头像
                print("已点击头像 %d" % (num))
                time.sleep(1)
                num += fujinren_dazhaohu(d, text, num)


def fujinren_dazhaohu(d, text, num):
    """单独封装附近人打招呼的方法"""
    print("----------1----------")
    if d(resourceId="com.immomo.momo:id/profile_layout_start_chat"):
        d(resourceId="com.immomo.momo:id/profile_tv_start_chat", text="打招呼").click()
        print("------1.1-----")
    elif d(text="打招呼"):
        d(text="打招呼").click()
    time.sleep(0.5)
    d(text="礼貌地打个招呼...").set_text(text)
    d(text="发送").click()
    print("------------3---------")
    d.click(0.062, 0.064)
    print("---------3.1---------")
    time.sleep(0.5)
    d.click(0.07, 0.069)
    print("----------3.2--------")
    if d(description="Navigate up"):
        d(description="Navigate up").click()  # 向上一级返回
    print("--------4---------")
    print("返回上一级菜单")
    time.sleep(1)

    d.swipe(260, 664, 260, 400)  # 向上滑动屏幕
    print("暂停 %d 秒" % (2))
    print("===========end============\n")
    print("num:%d" % num)
    num += 1
    time.sleep(2)
    return num


if __name__ == '__main__':
    # diandian()
    dongtai()
    # fujinren()
    

你可能感兴趣的:(uiautomator2 adb 安装与运行 python控制手机软件)