如何通过Python脚本实现手机App界面的自动化点击与滑动?

阿敏同学_6692

阿敏同学_6692

2026-06-03

277人浏览

原创

appium连不上手机设备的常见原因:usb调试未开启或授权被拒、驱动未安装、端口被占;adb devices不识别源于调试开关未启、模式非mtp/ptp、厂商后台限制;报错“could not find device”多因adb通信中断或desired capabilities配置错误。

如何通过python脚本实现手机app界面的自动化点击与滑动?

用 Appium 连不上手机设备的常见原因

Appium 启动失败、adb devices 不识别、或报错 Could not find a connected Android device,基本都卡在这几步:

  • USB 调试没开(开发者选项里必须手动启用,且“USB 调试”和“USB 调试(安全设置)”两个都要勾选)
  • 手机弹出的“允许 USB 调试吗?”提示被误点“拒绝”,后续再连也不会再弹——得进「开发者选项」里手动撤销已授权电脑
  • ADB 驱动未安装(Windows 下尤其常见,建议用官方 adb.exe + 手机厂商驱动,别信第三方“一键安装工具”)
  • Appium Server 端口被占(默认 4723),启动前先执行 lsof -i :4723(macOS/Linux)或 netstat -ano | findstr :4723(Windows)查占用进程

Python 脚本里如何精准定位并点击 App 中的按钮

靠 ID 或 text 定位最稳,但很多 App 的 resource-id 是动态生成的(比如带时间戳或 UUID),直接写死会失效。优先按这个顺序尝试:

  • 用 driver.find_element(By.ID, "com.example:id/btn_submit") —— 如果开发规范,这是最快最可靠的方式
  • 退而求其次用 driver.find_element(By.XPATH, '//*[@text="立即登录" and @class="android.widget.Button"]') —— 注意双引号嵌套,避免引号冲突
  • 慎用 By.CLASS_NAME,因为 android.widget.Button 下可能混着 TextView 或自定义 View,容易误点
  • 如果元素在列表里(比如 RecyclerView),不能直接用 find_element,得先定位父容器,再用 find_elements 取索引,例如:items = driver.find_elements(By.ID, "item_container"); items[2].click()

滑动操作为什么总偏移或无效

Appium 的 swipe 方法底层调用的是 adb shell input swipe,它依赖屏幕物理坐标,而不同分辨率、状态栏高度、导航栏是否隐藏都会导致计算偏差。更稳妥的做法是用 TouchAction 模拟真实手势:

python-code-analyz
python-code-analyz

专业Python代码分析与优化,支持语法检查、安全扫描、性能评估、复杂度分析及重构后优化代码生成。

下载
from appium.webdriver.common.touch_action import TouchAction
action = TouchAction(driver)
action.press(x=200, y=800).wait(200).move_to(x=200, y=300).release().perform()
  • 不要硬编码像素值,先用 driver.get_window_size() 获取宽高,再按比例算(比如从底部 80% 滑到顶部 20%)
  • wait(200) 很关键:太短(500ms)又像人工慢划,200ms 是实测较稳的中间值
  • 真机上滑动后要加 time.sleep(1) 等动画结束,否则下一步操作可能作用在旧界面

运行时抛 StaleElementReferenceException 怎么办

这不是脚本写错了,而是页面刷新或 Activity 重建后,之前找的元素对象已“过期”。Appium 不会自动重查,必须显式重定位:

  • 别存元素引用做多次操作,例如 btn = driver.find_element(...); btn.click(); time.sleep(1); btn.click() —— 第二个 click() 必然失败
  • 每次操作前重新获取:把查找逻辑封装成函数,如 def get_login_btn(): return driver.find_element(By.ID, "login_btn"),然后 get_login_btn().click()
  • 对频繁变动的区域(如 Feed 流),用 driver.find_elements 动态取最新列表,别缓存 list[0] 用到底

真正麻烦的是 WebView 混合页——Appium 默认切不到 H5 上下文,得先 driver.contexts 查可用 context,再 driver.switch_to.context("WEBVIEW_com.example.app"),这步漏掉,所有元素都找不到。

Python免费学习笔记(深入):立即使用
在学习笔记中,你将探索 Python 的核心概念和高级技巧!

相关文章

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

python脚本 python

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
python打包成可执行文件
python打包成可执行文件

本专题为大家带来python打包成可执行文件相关的文章,大家可以免费的下载体验。

2023.07.20

1671

4

python能做什么
python能做什么

python能做的有:可用于开发基于控制台的应用程序、多媒体部分开发、用于开发基于Web的应用程序、使用python处理数据、系统编程等等。本专题为大家提供python相关的各种文章、以及下载和课程。

2023.07.25

4184

7

format在python中的用法
format在python中的用法

Python中的format是一种字符串格式化方法,用于将变量或值插入到字符串中的占位符位置。通过format方法,我们可以动态地构建字符串,使其包含不同值。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

2023.07.31

1669

3

python教程
python教程

Python已成为一门网红语言,即使是在非编程开发者当中,也掀起了一股学习的热潮。本专题为大家带来python教程的相关文章,大家可以免费体验学习。

2023.08.03

24297

23

python环境变量的配置
python环境变量的配置

Python是一种流行的编程语言,被广泛用于软件开发、数据分析和科学计算等领域。在安装Python之后,我们需要配置环境变量,以便在任何位置都能够访问Python的可执行文件。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

2023.08.04

2967

5

python eval
python eval

eval函数是Python中一个非常强大的函数,它可以将字符串作为Python代码进行执行,实现动态编程的效果。然而,由于其潜在的安全风险和性能问题,需要谨慎使用。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

2023.08.04

3007

5

scratch和python区别
scratch和python区别

scratch和python的区别:1、scratch是一种专为初学者设计的图形化编程语言,python是一种文本编程语言;2、scratch使用的是基于积木的编程语法,python采用更加传统的文本编程语法等等。本专题为大家提供scratch和python相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.11

1163

5

python合并两个列表
python合并两个列表

Python是一种强大的编程语言,具有许多方便的功能和工具。在Python中,有多种方法可以合并两个列表。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

2023.08.10

596

4

python是前端还是后端
python是前端还是后端

Python属于前端也属于后端,其灵活性和丰富的生态系统使得开发人员能够在不同的领域中灵活运用。本专题为大家提供python相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.11

2323

5

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Apifox官方手册
Apifox官方手册

共0课时 | 0人学习

apipost极速入门
apipost极速入门

共6课时 | 0.6万人学习