• 【python】自动化连接和操作手机微信



    1. 环境配置

    • JDK
    • Android SDK
    • Appium
    • MuMu

    1.1. JDK

    华为云JDK镜像:https://mirrors.huaweicloud.com/java/jdk/

    1.1.1. 下载安装

    去华为云镜像下载JDK,我下载的版本是:jdk-8u181-windows-x64.exe
    在这里插入图片描述

    1.1.2. 环境变量

    1、环境变量->系统变量->新建:变量名JAVA_HOME,变量值D:Program FilesJavajdk1.8.0_181
    在这里插入图片描述
    2、环境变量->系统变量->Path->编辑->编辑文本:在变量值末尾添加%JAVA_HOME%in;%JAVA_HOME%jrein;
    在这里插入图片描述

    1.2. Android SDK

    安卓开发工具网:https://www.androiddevtools.cn/

    1.2.1. 下载解压

    1、下载SDK Tools,我下载的版本是android-sdk_r24.4.1-windows.zip,把解压出来的android-sdk-windows文件夹放到D:Program Files目录下。
    在这里插入图片描述

    2、下载SDK Platform-Tools,我下载的版本是platform-tools_r22-windows.zip,把解压出来的platform-tools文件夹放在D:Program Filesandroid-sdk-windows目录下。
    在这里插入图片描述

    3、下载Build-Tools,我下载的版本是21.1.2.rar,解压后将21.1.2文件夹放到D:Program Filesandroid-sdk-windowsuild-tools目录下。
    在这里插入图片描述

    1.2.2. 环境变量

    1、环境变量->系统变量->新建:变量名ANDROID_HOME,变量值D:Program Filesandroid-sdk-windows
    在这里插入图片描述
    2、环境变量->系统变量->Path->编辑->编辑文本:在变量值末尾添加%ANDROID_HOME% ools;%ANDROID_HOME%uild-tools21.1.2;%ANDROID_HOME%platform-tools;
    在这里插入图片描述

    1.3. Appium

    github:https://github.com/appium/appium-desktop/releases/

    1.3.1. 下载解压

    从上述github地址下载Appium,我下载的版本是Appium-windows-1.18.3.zip,无需安装,解压即可。

    1.3.2. 编辑配置

    1、双击Appium.exe运行软件,点击编辑配置
    在这里插入图片描述
    2、它这里已经把我们之前配置的JAVA_HOMEANDROID_HOME自动补上了,我们就不用填了,如果没有,请再填一下
    在这里插入图片描述

    1.3.3. 模块安装

    pip install appium-python-client
    

    1.4. MuMu

    MuMu官网:http://mumu.163.com/

    从官网下载并安装网易MuMu模拟器(非手游助手)。安装模拟器后,去应用中心下载并安装微信,然后登录。

    2. 连接模拟器

    打开cmd控制台,输入命令adb connect 127.0.0.1:7555即可连接模拟器。

    Microsoft Windows [版本 10.0.18363.1198]
    (c) 2019 Microsoft Corporation。保留所有权利。
    
    C:Usersghgxj>adb connect 127.0.0.1:7555
    connected to 127.0.0.1:7555
    

    3. 启动服务器

    1、点击启动
    在这里插入图片描述
    2、启动成功
    在这里插入图片描述
    3、要一直保持Appium服务器运行,不能将它的窗口关闭

    4. 启动微信

    获取微信的appPackage和appActivity

    1、在mumu中打开并登录微信,然后cmd中运行下方命令:

    adb shell dumpsys activity recents | find "intent={"
    

    2、找到cmp=com.tencent.mm/.ui.LauncherUI
    在这里插入图片描述
    3、/前面的com.tencent.mm就是appPackage

    4、/后面的.ui.LauncherUIappActivity

    5、这两个参数我们写python代码的时候会用到

    5. 连接测试

    mumu中先关闭微信窗口,然后运行下方代码的同时观察mumu模拟器,如果微信启动则说明连接成功。

    from appium import webdriver
    caps = {
        "platformName": "Android",
        "deviceName": "emulator-5554",
        "platformVersion": "6.0.1",
        "appPackage": "com.tencent.mm",
        "appActivity": ".ui.LauncherUI",
        "noReset": "True",
        "unicodeKeyboard": "True",
        "resetKeyboard": "True"
    }
    driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub', caps)
    

    6. 微信编程

    既然已经能通过python代码连接微信了,下面我们来操作微信实现一个简单的通过微信号添加好友的功能。

    6.1. 具体流程

    1. 点击⊕号
    2. 点击添加朋友
    3. 点击搜索框
    4. 输入微信号
    5. 点击搜索
    6. 点击名片
    7. 点击添加到通讯录
    8. 点击发送

    6.2. 完整代码

    from appium import webdriver
    import time
    # 连接手机微信
    caps = {
        "platformName": "Android",
        "deviceName": "emulator-5554",
        "platformVersion": "6.0.1",
        "appPackage": "com.tencent.mm",
        "appActivity": ".ui.LauncherUI",
        "noReset": "True",
        "unicodeKeyboard": "True",
        "resetKeyboard": "True"
    }
    driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub', caps)
    # 发送好友申请
    try:
        time.sleep(10)
        print('点击⊕号')
        driver.find_element_by_id('com.tencent.mm:id/ef9').click()
        time.sleep(5)
        print('点击添加朋友')
        driver.find_elements_by_id('com.tencent.mm:id/gam')[1].click()
        time.sleep(5)
        print('点击搜索框')
        driver.find_element_by_id('com.tencent.mm:id/f98').click()
        time.sleep(5)
        print('输入微信号')
        driver.find_element_by_id('com.tencent.mm:id/bhn').send_keys('wxhghgxj')
        time.sleep(5)
        print('点击搜索')
        driver.find_element_by_id('com.tencent.mm:id/f94').click()
        time.sleep(5)
        print('点击名片')
        driver.find_element_by_id('com.tencent.mm:id/az_').click()
        time.sleep(5)
        print('点击添加到通讯录')
        driver.find_element_by_id('com.tencent.mm:id/g6f').click()
        time.sleep(5)
        print('点击发送')
        driver.find_element_by_id('com.tencent.mm:id/ch').click()
    except Exception as e:
        print(e)
    

    6.3. 元素定位

    从代码中不难发现,问题的关键是元素定位,我们一般通过元素id来定位,比如我们在微信中找一下

    1、点击搜索
    在这里插入图片描述
    2、JSON Representation中输入:

    {
        "platformName": "Android",
        "deviceName": "emulator-5554",
        "platformVersion": "6.0.1",
        "appPackage": "com.tencent.mm",
        "appActivity": ".ui.LauncherUI",
        "noReset": "True",
        "unicodeKeyboard": "True",
        "resetKeyboard": "True"
    }
    

    3、点击启动会话
    在这里插入图片描述
    4、鼠标移动到,可以看到元素的idcom.tencent.mm:id/ef9

    在这里插入图片描述
    5、然后再通过以下代码即可实现元素的定位和点击

    driver.find_element_by_id('com.tencent.mm:id/ef9').click()
    

    7. 引用参考

    https://www.cnblogs.com/lexus168/p/12573025.html
    https://mp.weixin.qq.com/s/cMdQKerwD-UIX5Xcnb_GIw

    8. 温馨提示

    本文所有安装包+代码下载地址:

    天翼云盘 (力荐):点击下载
    坚果云盘 (推荐):点击下载
    微软云盘 (推荐):点击下载
    百度网盘 (限速):点击下载 (提取码:s2fc )

  • 相关阅读:
    Python3高级基础(2)
    Python3面向对象基础
    Python3学习策略
    Python3基础之基本问题
    Python3基础之字典
    (转)修改IIS默认的localhost名称
    (转)IIS5.1的安装配置并发布ASP.NET网站
    (转)怎样查看局域网中自己的IP地址和其他电脑的IP地址?
    (转)sql中 in 、not in 、exists、not exists 用法和差别
    (转)union和union all的区别
  • 原文地址:https://www.cnblogs.com/ghgxj/p/14219068.html
Copyright © 2020-2023  润新知