python3.6+Appium实现手机微信自动回复

一、环境准备

1、jdk1.8.0

2、android-sdk_r24.4.1-windows.zip

3、Python3.6

4、Appium-Server-GUI-windows-1.22.0.zip

5、Appium-Python-Client

6、Appium-Inspector-windows-2021.12.2.zip

简单说明:jdk为java运行环境,SDK为Android运行环境,Python3.6+Appium-Python-Client库为Appium客户端,Appium-Server为Appium服务器,Appium-Inspector用于定位页面元素。

二、Appium框架原理、加载过程

Appium基本原理为

python3.6+Appium实现手机微信自动回复_第1张图片 Appium加载过程为

 python3.6+Appium实现手机微信自动回复_第2张图片

 

三、实战

1、在appium安装目录双击Appium Server GUI.exe先启动服务器,点击编辑配置,填入SDK和jdk根目录,保存后启动服务器。

python3.6+Appium实现手机微信自动回复_第3张图片python3.6+Appium实现手机微信自动回复_第4张图片

Appium Server启动成功

python3.6+Appium实现手机微信自动回复_第5张图片

2、执行代码,启动微信APP

        执行代码前需要安装Appium-Python-Client库,用于连接Appium服务器。

        platformName是设备系统类型,deviceName为设备名称,appPackage为应用包名,appActivity为应用启动入口,noReset为不在会话前重置应用状态,默认为false  切记要保证为True,不然APP数据会被清掉,所有聊天记录都清空,血的教训。。。

deviceName、appPackage、appActivity这三个东西可以在如下连接方法找到https://blog.csdn.net/l15767016983/article/details/122943734

如果deviceName想为IP:port,则需要在如下连接方法找到deviceName

https://blog.csdn.net/l15767016983/article/details/122939195

from appium import webdriver


if __name__ == '__main__':
    desired_caps = {
        "platformName": "Android",
        "deviceName": "81c94a60",
        "appPackage": "com.tencent.mm",
        "appActivity": "com.tencent.mm.ui.LauncherUI",
        "noReset": True
    }
    driver = webdriver.Remote('http://localhost:4723/wd/hub', desired_caps)

        运行代码前需要确保Appium服务器正常运行,不然会连接不了服务器。

3、Inspector定位元素

        安装完Inspector后在安装目录双击Appium Inspector.exe运行Inspector,填写请求JSON

python3.6+Appium实现手机微信自动回复_第6张图片

 启动会话,微信被成功启动。

python3.6+Appium实现手机微信自动回复_第7张图片

 Inspector有几个小工具,包括选择元素、录制代码、滑动坐标、点击坐标点、刷新等工具用于操作页面。

python3.6+Appium实现手机微信自动回复_第8张图片

 可以找到元素的ID、CLASS_NAME、XPATH等信息,用于操作元素。

(1)点击元素,进入和某人的聊天页面。

name="对方正在输入..."
count=1
while True:#循环等待消息
    print("第{0}次循环。。。".format(count))
    child = driver.find_elements(AppiumBy.ID, "com.tencent.mm:id/btg")
    for i in child:
        try:
            msg_person=i.find_element(AppiumBy.ID, "com.tencent.mm:id/hga").text#联系人昵称
            if name in msg_person:
                msg_count=i.find_element(AppiumBy.ID, "com.tencent.mm:id/kn6").text#新消息数
                    if int(msg_count)>0:#和某人的消息数大于0则进入该聊天
                        i.click()
                        driver.find_element(AppiumBy.ID, "com.tencent.mm:id/fz").click()#返回上一步
        except Exception:
            pass
    count+=1
    time.sleep(5)

 (2)点击输入框,输入聊天内容,发送内容。如果想自动回复各种消息可以弄一个聊天机器人,例如图灵,可以免费注册。

b4a=driver.find_element(AppiumBy.ID,"com.tencent.mm:id/b4a")#输入框
b4a.click()#需要点击一下唤起键盘,不然全面屏可能找不到发送的元素
b4a.send_keys(msg)
driver.find_element(AppiumBy.ID,"com.tencent.mm:id/b8k").click()#点击发送

 (3)查看当前页面的聊天记录。

        时间ID为com.tencent.mm:id/b8z,文字/小表情的ID为com.tencent.mm:id/b4b,大表情包ID为com.tencent.mm:id/b4c,发送者昵称ID为com.tencent.mm:id/b3s。

    child=driver.find_element(AppiumBy.ID, "com.tencent.mm:id/b79").find_elements(AppiumBy.XPATH, ".//*")
    for i in child:
        resource_Id=i.get_attribute("resourceId")
        if resource_Id:
            text=i.get_attribute("text")
            if "com.tencent.mm:id/b8z" in resource_Id:
                msg_time = text# 1 时间
                print(msg_time)
            elif "com.tencent.mm:id/b3s" in resource_Id:
                sender = i.get_attribute("contentDescription")# 2 发送者
                print(sender)
            elif "com.tencent.mm:id/b4b" in resource_Id:
                text_msg= text# 3 文字消息/小表情
                print(text_msg)
            elif "com.tencent.mm:id/b4c" in resource_Id:
                big_msg = "[表情]"# 4 大表情
                print(big_msg)

(4)滑动页面,加载更多聊天记录。

size = driver.get_window_size()
driver.swipe(size['width'] * 0.5, size['height'] * 0.25, size['width'] * 0.5, size['height'] * 0.65)

(5)打印整页XML资源

print(driver.page_source)#打印整页XML资源

你可能感兴趣的:(微信,自动化,adb,python,软件测试)