当前位置: 首页 > article >正文

新手避坑指南:用Python+uiautomator2写第一个安卓自动化脚本(附贴吧实战)

Pythonuiautomator2安卓自动化实战从零编写贴吧签到脚本第一次接触安卓自动化测试时我盯着满屏的adb命令和陌生的Python库名发呆了半小时。直到在模拟器上看到机械臂自动完成贴吧签到、滑动浏览、点赞回帖的全过程才意识到自动化脚本就像给手机装上了数字手指——精准、不知疲倦且可复现。本文将带你绕过我踩过的所有坑用最轻量的uiautomator2工具链完成第一个真正可用的自动化脚本。1. 环境配置避开90%新手的安装陷阱1.1 工具链的极简选择开发安卓自动化脚本需要四个核心组件Python 3.8推荐使用Miniconda管理环境Android Debug Bridge (ADB)版本需≥1.0.41uiautomator2Python库与手机端服务的桥梁Weditor可视化元素定位器安装时常见的版本冲突问题# 错误示范混用pip和conda安装 conda create -n u2 python3.8 pip install uiautomator2 # 可能引发库冲突 # 正确做法纯pip环境 python -m venv u2_env source u2_env/bin/activate pip install --upgrade pip wheel1.2 ADB连接的魔鬼细节当执行adb devices显示unauthorized时按此流程排查在手机开发者选项中撤销USB调试授权重新插拔USB线或重启模拟器确保电脑端没有多个adb进程# 查看并杀死残留adb进程 tasklist | findstr adb taskkill /F /PID 进程ID实测发现夜神模拟器需要特殊处理进入安装目录的nox_adb.exe执行adb kill-server后用nox_adb.exe connect 127.0.0.1:62001连接2. 元素定位Weditor可视化实战技巧2.1 解析百度贴吧的UI层次打开Weditor后按F5刷新界面层级会看到类似XML的结构node index3 text同意 resource-idcom.baidu.tieba:id/agree classandroid.widget.TextView/三种最可靠的定位方式对比定位方式示例代码适用场景resource-idd(resourceIdcom.baidu.tieba:id/agree)官方APP规范开发时首选textd(text同意)按钮文字固定时descriptiond(description确定按钮)无障碍标签完善时2.2 动态等待策略元素加载需要智能等待而非固定sleep# 设置全局隐式等待单位秒 d.implicitly_wait(10) # 显式等待特定元素更精准 d(text同意).wait(timeout15) # 最长等15秒 d(text同意).wait_gone(timeout5) # 等待元素消失3. 脚本编写贴吧自动化全流程实现3.1 启动与权限处理完整处理隐私弹窗的代码模板import uiautomator2 as u2 def handle_privacy_popup(d): try: if d(text同意).exists: d(text同意).click() print(已处理隐私弹窗) elif d(text我知道了).exists: d(text我知道了).click() except Exception as e: print(f权限处理异常: {str(e)}) # 连接设备 d u2.connect(emulator-5554) d.app_start(com.baidu.tieba) handle_privacy_popup(d)3.2 滑动与点击的工程化实践贴吧引导页滑动的防呆设计def swipe_through_guide(d, swipe_count3): width, height d.window_size() for _ in range(swipe_count): # 从右向左滑动起始点X坐标取屏幕宽度的80% d.swipe(width*0.8, height/2, width*0.2, height/2, 0.5) d.sleep(1) # 滑动后稳定等待 # 点击立即体验 if d(description立即体验按钮).exists: d(description立即体验按钮).click() else: d.xpath(//*[text立即体验]).click()3.3 签到功能的完整实现自动判断签到状态的逻辑def tieba_sign(d, tieba_name): # 进入指定贴吧 d(resourceIdcom.baidu.tieba:id/btn_search).click() d(resourceIdcom.baidu.tieba:id/et_search_keyword).set_text(tieba_name) d.press(enter) # 处理签到按钮 if d(text签到).exists: d(text签到).click() print(f【{tieba_name}】签到成功) elif d(text已签到).exists: print(f【{tieba_name}】今日已签) else: print(f【{tieba_name}】未找到签到按钮) # 返回主页 d.press(back)4. 异常处理与性能优化4.1 常见崩溃场景应对编写健壮脚本需要处理的异常元素定位超时增加wait timeout并添加重试机制应用无响应定期检查d.app_current()状态内存泄漏每10次操作后重启APP示例重试装饰器from functools import wraps import time def retry(max_attempts3, delay1): def decorator(func): wraps(func) def wrapper(*args, **kwargs): attempts 0 while attempts max_attempts: try: return func(*args, **kwargs) except Exception as e: print(fAttempt {attempts1} failed: {str(e)}) attempts 1 time.sleep(delay) raise RuntimeError(fFailed after {max_attempts} attempts) return wrapper return decorator retry(max_attempts5) def safe_click(element): element.click()4.2 提升执行速度的秘诀通过对比测试发现uiautomator2比Appium快约30%还可通过以下方式优化禁用动画在开发者选项中关闭所有动画缩放减少截图避免频繁使用d.screenshot()批处理命令使用d.xpath(//*).all()一次性获取元素速度对比实测数据执行相同贴吧操作操作步骤uiautomator2耗时(ms)Appium耗时(ms)启动APP12001800处理弹窗500800完成签到30004500总耗时47007100在小米10上实测发现uiautomator2的点击响应延迟稳定在80-120ms之间而Appium存在200-300ms的波动。当需要处理列表滚动等复杂操作时这种差异会指数级放大。

相关文章:

新手避坑指南:用Python+uiautomator2写第一个安卓自动化脚本(附贴吧实战)

Pythonuiautomator2安卓自动化实战:从零编写贴吧签到脚本 第一次接触安卓自动化测试时,我盯着满屏的adb命令和陌生的Python库名发呆了半小时。直到在模拟器上看到机械臂自动完成贴吧签到、滑动浏览、点赞回帖的全过程,才意识到自动化脚本就像…...

GANs入门指南:从理论到实战的生成对抗网络全解析

1. 生成对抗网络入门指南:从理论到实战的全方位资源导航生成对抗网络(Generative Adversarial Networks,简称GANs)作为深度学习领域最具革命性的技术之一,自2014年Ian Goodfellow提出以来,已经彻底改变了计…...

LangGraph 状态管理完全指南:从零到一掌握图状态机的核心利器

状态管理,是LangGraph构建复杂AI智能体的基石。如果把节点比作智能体的“手脚”,状态就是智能体的“大脑”——它记录着任务执行过程中的一切信息,决定着每一步决策的准确性。状态设计得好,智能体就聪明;状态设计得差&…...

fastdds源码分析之PDP协议

文章目录1. 概述2. 发现流程3. 内置端点4. ParticipantProxyData 内容5. 两种 PDP 实现6. 与 EDP 的关系7. 总结1. 概述 PDP 是 RTPS 协议中用于发现参与者 (Participant) 的协议,是 DDS 发现机制的第一步。 2. 发现流程 ┌───────────────────…...

python画桃心

python用turtle画简单图案比较方便,大一学python的turtle模块时,记得要画各种图案,如国旗,桃心等等图案,期末课程设计时有可能还会遇到画54张扑克牌,当初室友就被迫选了这道题。!!&a…...

从“工具叠加”到“工作流革命”:龙虾与 IMA 的深度整合重塑了人机协作的边界

2026年3月,当行业还在争论Agent的实用性边界时,腾讯 ima skill 与 OpenClaw(龙虾)的深度打通,悄然完成了从概念验证到生产力落地的关键一跃。这不再是一次简单的功能更新,而是一个范式转移的信号&#xff1…...

Java 核心知识 多线程 线程池

一 Java多线程 Java核心知识体系7:线程不安全分析 Java核心知识体系8:Java如何保证线程安全性 Java核心知识体系9-并发与多线程:线程基础 Java核心知识体系10-线程管理 Java中的多线程 https://www.cnblogs.com/wxd0108/p/5479442.html 面…...

OpenClaw | 核心设计哲学:以Gateway为中心的可插件化单体系统

在当今AI Agent框架百花齐放的时代,每个项目都在探索如何构建既强大又灵活的个人AI助手系统。OpenClaw作为这一领域的后起之秀,其设计哲学独树一帜——它没有选择微服务架构的复杂性,也没有采用完全去中心化的设计,而是创造性地提…...

VQE算法在量子化学计算中的应用与优化

1. 量子化学计算中的VQE算法概述量子变分本征求解器(VQE)作为当前NISQ(含噪声中等规模量子)时代最具实用价值的量子算法之一,其核心思想是将量子处理器作为协处理器,与经典优化器协同工作,通过参数化量子电路逼近分子哈密顿量的基态能量。这种…...

【中等】矩阵的最小路径和-Java:经典动态规划方法

分享一个大牛的人工智能教程。零基础!通俗易懂!风趣幽默!希望你也加入到人工智能的队伍中来!请轻击人工智能教程大家好!欢迎来到我的网站! 人工智能被认为是一种拯救世界、终结世界的技术。毋庸置疑&#x…...

NVFP4:Blackwell架构下的4位低精度推理技术解析

1. NVFP4:Blackwell架构下的高效低精度推理新标准在AI模型部署的实际场景中,我们常常面临这样的困境:模型精度与推理效率就像天平的两端,提升一方往往意味着牺牲另一方。三年前当我第一次尝试将FP32模型量化到INT8时,即…...

【相当困难】斐波那契系列问题的递归和动态规划-Java:补充题目2

分享一个大牛的人工智能教程。零基础!通俗易懂!风趣幽默!希望你也加入到人工智能的队伍中来!请轻击人工智能教程大家好!欢迎来到我的网站! 人工智能被认为是一种拯救世界、终结世界的技术。毋庸置疑&#x…...

MySQL数据库教程

MySQL官方参考手册 数据库入门 数据库和表的基本操作 数据操作 单表查询 多表操作 索引 视图 事务 数据库编程 数据库管理与维护 数据库设计 数据库建模 The --host option (short form -h) tells the mysql client program the hostname or IP address of the MyS…...

Qwen3.5-9B-AWQ-4bit Qt桌面应用开发:跨平台AI助手客户端

Qwen3.5-9B-AWQ-4bit Qt桌面应用开发:跨平台AI助手客户端 1. 为什么需要本地化AI助手 在数字化办公场景中,我们经常遇到需要快速获取信息、处理文档或编写代码的需求。传统的云端AI服务虽然强大,但存在响应延迟、隐私顾虑和网络依赖等问题。…...

Particalground完全配置手册:20个参数详解与实战案例

Particalground完全配置手册:20个参数详解与实战案例 【免费下载链接】particleground A jQuery plugin for snazzy background particle systems 项目地址: https://gitcode.com/gh_mirrors/pa/particleground Particalground是一款强大的jQuery粒子背景插件…...

llvmlite与Numba的完美结合:打造高性能Python应用的终极方案

llvmlite与Numba的完美结合:打造高性能Python应用的终极方案 【免费下载链接】llvmlite A lightweight LLVM python binding for writing JIT compilers 项目地址: https://gitcode.com/gh_mirrors/ll/llvmlite 在Python开发领域,性能优化一直是开…...

PostCSS-pxtorem性能优化:提升CSS转换效率的7个关键方法

PostCSS-pxtorem性能优化:提升CSS转换效率的7个关键方法 【免费下载链接】postcss-pxtorem Convert pixel units to rem (root em) units using PostCSS 项目地址: https://gitcode.com/gh_mirrors/po/postcss-pxtorem PostCSS-pxtorem是一款强大的PostCSS插…...

RTRootNavigationController 高级用法:禁用交互式返回与动画定制

RTRootNavigationController 高级用法:禁用交互式返回与动画定制 【免费下载链接】RTRootNavigationController Implicitly make every view controller has its own navigation bar 项目地址: https://gitcode.com/gh_mirrors/rt/RTRootNavigationController …...

7个TanStack Query网络优化策略:从入门到精通的请求效率提升指南

7个TanStack Query网络优化策略:从入门到精通的请求效率提升指南 【免费下载链接】query 🤖 Powerful asynchronous state management, server-state utilities and data fetching for the web. TS/JS, React Query, Solid Query, Svelte Query and Vue …...

如何用Preact构建高性能社交互动界面:完整开发指南

如何用Preact构建高性能社交互动界面:完整开发指南 【免费下载链接】preact ⚛️ Fast 3kB React alternative with the same modern API. Components & Virtual DOM. 项目地址: https://gitcode.com/gh_mirrors/pr/preact Preact是一个仅4kB大小的现代J…...

Arm AutoFDO优化与ADB连接实战指南

1. Arm Lumex软件AutoFDO优化与ADB连接实战指南在移动应用和嵌入式系统开发中,性能优化始终是开发者面临的核心挑战。Arm Lumex软件提供的AutoFDO(自动反馈导向优化)技术,通过分析程序实际运行时的行为特征来指导编译器进行针对性…...

实测Yi-Coder-1.5B:52种编程语言,一键解决代码难题

实测Yi-Coder-1.5B:52种编程语言,一键解决代码难题 1. 为什么选择Yi-Coder-1.5B 1.1 轻量级但功能强大 Yi-Coder-1.5B是一个仅有15亿参数的开源代码模型,却支持52种主流编程语言。与动辄几十GB的大型模型相比,它能在普通笔记本…...

PyTorch Image Models云部署终极指南:AWS/Azure/GCP快速配置

PyTorch Image Models云部署终极指南:AWS/Azure/GCP快速配置 【免费下载链接】pytorch-image-models The largest collection of PyTorch image encoders / backbones. Including train, eval, inference, export scripts, and pretrained weights -- ResNet, ResNe…...

农村博士的消费困境:攒多少钱才敢买杯奶茶?

从田埂到实验室:农村读博的我,到底要攒够多少钱,才敢给自己花30块买一杯奶茶? 这里写目录标题 从田埂到实验室:农村读博的我,到底要攒够多少钱,才敢给自己花30块买一杯奶茶? 我们不敢消费,从来不是没钱,是背上了三道无形的枷锁 第一道枷锁:倾全家之力托举的“愧疚牢…...

DevDocs安全防护机制:防止XSS和内容污染的完整指南

DevDocs安全防护机制:防止XSS和内容污染的完整指南 【免费下载链接】devdocs API Documentation Browser 项目地址: https://gitcode.com/GitHub_Trending/de/devdocs DevDocs作为一款API文档浏览器,在处理大量用户输入和第三方内容时&#xff0c…...

6种核心降维算法原理与Python实战指南

1. 降维算法概述与核心价值在数据科学和机器学习领域,高维数据就像一间塞满杂乱物品的储藏室——虽然包含所有信息,但难以有效利用。我处理过的真实业务数据集中,经常遇到包含数百甚至数千个特征的情况,这不仅导致计算效率低下&am…...

枯木想要逢春: 我们不能因为过去的伤害而心死

破镜难重圆,枯木却逢春:好的感情,从来不是修镜子,而是养根 目录 破镜难重圆,枯木却逢春:好的感情,从来不是修镜子,而是养根 破镜难重圆,碎的从来不是镜子,是信任 枯木能逢春,活的从来不是运气,是根基 养根的第一步,是停止互相砍伐 养根的第二步,是找回共同的土壤…...

哈希表实战指南:从冲突解决到性能优化的完整教程

哈希表实战指南:从冲突解决到性能优化的完整教程 【免费下载链接】interview 📚 C/C 技术面试基础知识总结,包括语言、程序库、数据结构、算法、系统、网络、链接装载库等知识及面试经验、招聘、内推等信息。This repository is a summary of…...

【VS Code Copilot Next 工作流自动化终极指南】:20年IDE专家亲授从零配置到生产级落地的7大黄金法则

更多请点击: https://intelliparadigm.com 第一章:VS Code Copilot Next 自动化工作流的核心价值与演进脉络 VS Code Copilot Next 并非简单升级,而是将 AI 编程助手从“补全建议者”重塑为“上下文感知的工作流协作者”。其核心价值在于深度…...

GORM微服务通信:10个高效数据交换方案终极指南

GORM微服务通信:10个高效数据交换方案终极指南 【免费下载链接】gorm The fantastic ORM library for Golang, aims to be developer friendly 项目地址: https://gitcode.com/gh_mirrors/gor/gorm GORM是Golang生态中一款开发者友好的ORM库,专为…...