作者:星安果
来源:AirPython
前几天,有一个小姐姐私聊我,说她每次打开微信,界面上密密麻麻的红点提示让她很惆怅,每一条消息她都要一条条去点击,太费时间且焦虑了
本篇文章将以之前聊过的python的UiAutomator2 编写自动化脚本,来帮小姐姐解决这个问题
准备
在开始实战之前,需要做如下准备:
1、在 PC 端配置 Android 开发环境
2、安装依赖库及应用
其中:
uiautomator2 负责自动化;weditor 负责连接设备,查看应用的界面元素
# 安装依赖 pip3 install -U uiautomator2 # 如果需要截屏,需要安装pillow pip3 install pillow # 安装weditor,实时查看 App 的界面元素信息 pip3 install -U weditor
3、在手机上安装 atx-agent 应用
# 安装apk服务到手机上 python -m uiautomator2 init
实战
在实战之前,在命令行输入 weditor命令,浏览器会自动打开设备管理页面
查看手机的 ip 地址,通过 ip 地址 连接设备后,界面会展示当前设备界面的元素信息
1、打开微信 App
在局域网下通过 IP 地址连接设备,然后通过微信 App 的包名打开应用
import uiautomator2 as u2 # 微信App的包名 PACKAGE_NAME = 'com.tencent.mm' # 连接设备 self.device = u2.connect('192.168.0.101') # 获取屏幕的宽、高度 self.width, self.height = self.device.window_size() # 利用应用包名打开App self.device.app_start(PACKAGE_NAME, stop=True)
2、等待主页加载完成
由于上面冷启动 App 比较耗时,这里需要进行等待主页的页面元素加载完成
利用 WEditor 定位获取底部 Tab 的元素 ID,然后利用「 ID + 文本内容 」定位到 Tab 控件,通过设置一个最大超时时间,一直等待查询控件成功为止
def __wait_home_appear(self): """ 等待主页加载完成 :return: """ self.device(resourceId='com.tencent.mm:id/cns', text='微信').wait(timeout=20) self.device(resourceId='com.tencent.mm:id/cns', text='通讯录').wait(timeout=20) self.device(resourceId='com.tencent.mm:id/cns', text='发现').wait(timeout=20) self.device(resourceId='com.tencent.mm:id/cns', text='发现').wait(timeout=20) print('首页加载完成')
3、判断是否存在未处理消息
和上面一样,使用 WEditor 获取顶部 Tab 未读消息控件的文本内容
如果文本内容不为空,那么代表存在未处理的消息;否则,直接退出程序即可
def __has_unread_msg(self): """ 是否有未读的消息 :return: """ try: number_unread_msg = self.device(resourceId='com.tencent.mm:id/gik') return number_unread_msg.get_text() != "" except Exception: return False
4、查找未处理消息进行处理
在当前界面查找消息列表,筛选出头像右上角包含数字的控件
如果查找的元素不为空,并且文本内容为整形且大于 0,则模拟执行一次点击操作,然后返回到主页面
# 未处理消息控件 element = self.device(resourceId='com.tencent.mm:id/ga3', instance=0) if element.exists and self.__is_number(element.get_text()): # 存在未处理的消息 element.click() if not self.__is_home_page(): # 返回到主页面 self.device.press('back') else: # 不存在未处理的消息 pass
5、查找与定位优化
有 2 种方式去查找定位所有未读的消息,分别是:
这里更推荐后者,因为第二种方式更加稳定精确,而且支持循环定位查找
我们获取到底部 Tab 控件的中心点坐标,使用 double_click() 指定两次点击的时长为 0.05s,模拟快速点击两下
def click_twice_quickly(device, element): """ 快读点击两下 :param device: :param id: 控件ID :return: """ bounds = element.bounds() center_x, center_y = ((bounds[2] + bounds[0]) / 2, ((bounds[3] + bounds[1]) / 2)) print(center_x,center_y) device.double_click(center_x, center_y, 0.05)
6、循环操作
只需要循环判断是否存在未处理的消息,如果存在,就快速点击底部 Tab 定位到未读的消息项进行一次阅读操作,直到不存在未处理的消息为止
while True: # 存在未读消息 if self.__has_unread_msg(): # 连续点击两下,快速定位 click_twice_quickly(self.device, element) # 处理未读消息 pass # 没有未读消息 else: logger.debug('没有可读的消息了,退出!') break
最后
通过上面的实例,我们处理了首页消息的所有未读消息;至于通讯录、朋友圈、个人消息的提示,可以按同样的方式去处理
数据分析咨询请扫描二维码
统计学基础 - 理解统计学的基本概念和方法是数据分析师必备的技能之一。统计学为他们提供了处理数据、进行推断和建模的基础。 数 ...
2024-11-25数据分析师在如今信息爆炸的时代扮演着至关重要的角色。他们不仅需要具备扎实的数据分析技能,还需要不断学习和适应不断发展的技 ...
2024-11-25数据分析师的工作职责涉及多个关键方面,从数据的获取到处理、分析再到可视化,旨在为企业的决策提供有力支持。让我们深入了解数 ...
2024-11-25数据分析师:洞察力量的引擎 数据分析师的兴起 数据分析师行业目前正处于快速发展阶段,市场需求持续增长,薪资水平也有所提升。 ...
2024-11-25数据收集与整理 - 从各种来源收集数据,清洗和整理以确保数据质量和可用性。 数据分析与建模 - 运用统计学方法和机器学习模型对 ...
2024-11-25数据分析是当今社会中不可或缺的一项技能,涵盖了广泛的工具和技术。其中,掌握各种数据处理函数对于数据分析师至关重要。本文将 ...
2024-11-25“大数据治理”是一个涵盖广泛的复杂概念,其核心在于确保大规模、多样化的数据资源能够被有效管理和利用。不仅涉及数据的采集、 ...
2024-11-25一、引言 背景介绍 随着信息技术的快速发展和互联网的普及,大数据已经成为现代社会的重要资产。大数据的兴起不仅推动了各行各业 ...
2024-11-25《Python数据分析极简入门》 第2节 7 Pandas分组聚合 分组聚合(group by)顾名思义就是分2步: 先分组:根据某列数据的值进行 ...
2024-11-25数据分析需要学习的内容非常广泛,涵盖了从理论知识到实际技能的多个方面。以下是数据分析所需学习的主要内容: 数学和统计学 ...
2024-11-24数据分析师需要具备一系列多方面的技能和能力,以应对复杂的数据分析任务和业务需求。以下是数据分析师所需的主要能力: 统计 ...
2024-11-24数据分析师需要学习的课程内容非常广泛,涵盖了从基础理论到实际应用的多个方面。以下是根据我搜索到的资料整理出的数据分析师需 ...
2024-11-24《Python数据分析极简入门》 第2节 6 Pandas合并连接 在pandas中,有多种方法可以合并和拼接数据。常见的方法包括append()、conc ...
2024-11-24《Python数据分析极简入门》 第2节 5 Pandas数学计算 importpandasaspdd=np.array([[81,&n ...
2024-11-23数据分析涉及多个方面的学习,包括理论知识和实践技能。以下是数据分析需要学习的主要方面: 基础知识: 数据分析的基本概念 ...
2024-11-22数据分析适合在多个单位工作,包括但不限于以下领域: 金融行业:金融行业对数据分析人才的需求非常大,数据分析师可以从事经 ...
2024-11-22数据分析是一种涉及从大量数据中提取有用信息和洞察力的过程。其工作内容主要包括以下几个方面: 数据收集与整理:数据分析师 ...
2024-11-22数据分析师需要掌握多种技能,以确保能够有效地处理和分析数据,并为业务决策提供支持。以下是数据分析师需要掌握的主要技能: ...
2024-11-22数据开发和数据分析是两个密切相关但又有所区别的领域。以下是它们的主要区别: 定义和目标: 数据开发:数据开发涉及数据的 ...
2024-11-22数据架构师是负责设计和管理企业数据架构的关键角色,其职责涵盖了多个方面,包括数据治理、数据模型设计、数据仓库构建、数据安 ...
2024-11-22