☰
Python+Appium自动化操作微信,看这一篇就够了
2026/10/27 1:55:29 网站建设 项目流程

简介

它是一个开源的自动化测试工具, 这个工具支持在iOS这个平台上运行的原生应用, 同时也支持使用Java、PHP这些语言来编写的代码。

已经将相关功能封装完毕, 现在能够为每一位用户提供那些在日常生活与工作里随处可见的JSON格式的命令, 同时也能提供属于移动设备范畴内的额外控制指令, 例如像什么多点触控手势操作或是屏幕朝向的变化等等。

只要你给小编发一封私信, 并且在内容里面写上数字01, 那么你就可以获得大量的学习资料了。

环境

这篇文章主要提到的情况呢, 是这样子的。

JDK

需要配置环境变量。

-sdk

需要配置环境变量。

安装那个库, 就是使用那个 pip 这个工具, 并且后面跟着两个减号。

在安装完成并且启动之后, 你可以去点击编辑配置这个选项, 来对 JDK 以及 SDK 进行设置, 具体的操作样子就像下面这张图展示给大家看的那样。

mumu

把 mumu 这个模拟器给下载好之后, 你可以根据自己的实际情况去改一下安装的路径, 剩下的那些选项都默认不管就可以了, 等装好了之后再把它打开, 接着点一下那个应用中心, 在里面搜一搜微信这个名字, 只要搜到了就赶紧把这个程序给装上, 然后等微信那边的事情全部弄完了以后, 再用你自己自己的那个微信号登进去看看行不行。

因为我们会通过安卓的 adb 去连接虚拟机, 所以需要在控制台这里执行 adb 127.0.0.1:7555 这个命令, 好让 adb 把连接建立到虚拟机上面去。

在上面连接模拟器的命令执行完之后, 我们就可以在cmd控制台里面输入了 adb 这个程序, 然后来看清楚了现在到底连接上了哪一个虚拟机。

使用

首先需要把那个东西以及mumu都打开, 原因在于在前面我们已经做好了相关的设置, 所以现在我们可以直接去点击那个启动服务器按钮, 具体的样子见下图所示:

启动之后如图所示:

现在的话, 咱们是可以先借助于某个方法来先把微信给启动起来的那具体的代码的实现呢就是下面这样的。

desired_caps = {

"platformName": "Android", # 操作系统

"deviceName": "emulator-5554", # 设备 ID

"platformVersion": "6.0.1", # 设备版本号

"appPackage": "com.tencent.mm", # app 包名

"appActivity": "com.tencent.mm.ui.LauncherUI", # app 启动时主 Activity

'noReset': True, # 是否保留 session 信息,可以避免重新登录

'unicodeKeyboard': True, # 使用 unicodeKeyboard 的编码方式来发送字符串

'resetKeyboard': True # 将键盘给隐藏起来

}

driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub', desired_caps)

执行上面那段代码之后, 你要是看到mumu模拟器里面的微信已经启动起来了, 那就说明基本环境已经调通了;要是执行程序后发现根本调不到 mumu 模拟器中的微信, 那你就在cmd里面先执行一下那个 adb 127.0.0.1:7555 这个命令, 然后再去执行程序就行了。

添加好友

现在我们来动手进行添加好友这个操作的实现, 具体的整体步骤是这样的: 首先得打开微信软件, 接着去点击那个加号标志,然后点击选择添加朋友这一项, 然后在里面的搜索框中把微信号给它输进去, 再去点击一下搜索按钮, 最后点击添加到通讯录就可以了, 关于实现此功能的具体代码表现情况, 在下面给大家展示出来。

desired_caps = {

"platformName": "Android", # 操作系统

"deviceName": "emulator-5554", # 设备 ID

"platformVersion": "6.0.1", # 设备版本号

"appPackage": "com.tencent.mm", # app 包名

"appActivity": "com.tencent.mm.ui.LauncherUI", # app 启动时主 Activity

'noReset': True, # 是否保留 session 信息,可以避免重新登录

'unicodeKeyboard': True, # 使用 unicodeKeyboard 的编码方式来发送字符串

'resetKeyboard': True # 将键盘给隐藏起来

}

driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub', desired_caps)

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/fcn').click()

time.sleep(5)

print('在搜索框输入微信号')

driver.find_element_by_id('com.tencent.mm:id/bhn').send_keys('ityard')

time.sleep(3)

print('点击搜索')

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

time.sleep(3)

print('点击添加到通讯录')

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

简单说一下, 在代码中我们通过调用 .('com..mm:id/xx') 来获取微信上的元素, 如果有重复的情况, 则可以使用 .('com..mm:id/xx') 来取值, 通过调用 ('xx') 来实现信息的输入操作, 通过 click() 函数来实现点击操作。

刚才我们讲了怎样用 (s)('com..mm:id/xx') 这个方法把元素给拿到手。所以, 咱们接下来就得一块儿看看具体的内容。这里头最关键的一点儿就是得先弄明白了 xx 到底是啥意思。

首先我们点击其中的带有放大镜的那个地方, 如下图所示。

点击之后会进到如下界面:

我们在图中所需功能的下方, 把代码里的信息配置进去, 等配置好之后, 点击那个启动会话按钮来进行启动, 启动以后我们就发现这个和mumu里面的微信的效果是不一致的, 如下图所示。

此时此刻, 只需轻轻点击上图中红框圈起来的刷新按钮这个操作就可以完成了。接下来, 我们就能够确定元素的值是什么了。关于这个值的含义, 也就是前面提到的 xx 部分。

举例来说的话, 我们要去确定在微信里面用来添加位置的那个加号 ⊕ 的具体值。具体做法是, 用鼠标去点击那个加号 ⊕ 一下。通过这样的方式查看, 结果就像下面这张图片里所显示的那样:

我们继续执行点击的操作, 具体的动作是按下 ⊕ 这个键, 详细的使用步骤如下: 首先你需要进入 mumu 模拟器里面, 然后打开微信程序, 接着找到并点击位于微信应用界面中的 ⊕ 这一项内容, 其表现形式可以参考如下图所示的图片说明。

你先去点击, 然后再到那个地方里头去找一找那个刷新按钮是什么样子, 并且你看下面那个图片里的内容展示出来的情况。

通过观察图片, 我们能看到列表里面的每一选项对应的值都统一是 com..mm:id/gam。针对这种情况, 我们在编写代码的时候就会使用 ('com..mm:id/gam') 这个字符串来进行获取操作。

基于前面已经讲过的相关知识点, 相信绝大多数读者对于这项技术的具体使用情况已经有了一种比较基础的认知。

发送消息

这个基本的发送消息流程在我们的模拟里是这样的, 先把微信给打开, 然后呢去点击那个搜索按钮上的小放大镜图标, 接下来就在弹出来的搜索框里面输入好友的昵称, 最后呢选中搜索出来的那个好友并且开始发送文字信息再加上一个表情符号, 具体的代码实现情况如下所示:

desired_caps = {

"platformName": "Android", # 操作系统

"deviceName": "emulator-5554", # 设备 ID

"platformVersion": "6.0.1", # 设备版本号

"appPackage": "com.tencent.mm", # app 包名

"appActivity": "com.tencent.mm.ui.LauncherUI", # app 启动时主 Activity

'noReset': True, # 是否保留 session 信息,可以避免重新登录

'unicodeKeyboard': True, # 使用 unicodeKeyboard 的编码方式来发送字符串

'resetKeyboard': True # 将键盘给隐藏起来

}

driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub', desired_caps)

time.sleep(10)

print('点击微信搜索框')

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

time.sleep(10)

print('在搜索框输入搜索信息')

driver.find_element_by_id('com.tencent.mm:id/bhn').send_keys('Python小二')

time.sleep(3)

print('点击搜索到的好友')

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

time.sleep(3)

# 输入文字

driver.find_element_by_id('com.tencent.mm:id/al_').send_keys('hello')

time.sleep(3)

# 输入表情

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

time.sleep(3)

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

# 点击发送按钮发送信息

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

# 退出

driver.quit()

最后再来说一说话, 因为模拟器这边, 它的反应速度有可能就会比较慢一点这样子, 假如说在程序执行的过程之中出现了一些错误现象的话, 那么就可以把那个中间的等待时间 time.sleep(x) 这个参数设置得更大一些去用。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询