讲师中心 微信公众号
AI工具推荐 视频效率加速

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

阿敏同学_6692

阿敏同学_6692

发布时间:2026-06-03 10:14:35

|

277人浏览过

|

来源于php中文网

原创

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 模拟真实手势:

Li Python Sec Check
Li Python Sec Check

Python 安全规范检查工具:基于 CloudBase 规范、腾讯安全指南,LLM 智能分析(默认禁用,优先本地执行)

下载
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 不会自动重查,必须显式重定位:

立即学习“Python免费学习笔记(深入)”;

  • 别存元素引用做多次操作,例如 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"),这步漏掉,所有元素都找不到。

热门AI工具

更多
WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

SkildArt
SkildArt Hot

SkildArt是一款AI文本写作工具,一站式 AI 视觉创作平台。

切问学术

切问学术是一款AI论文写作工具,复旦大学NLP团队推出的AI学术智能体。

讯飞智作

讯飞智作是一款AI视频创作工具,AI文本配音工具,数字人课程、营销视频制作。

UP简历
UP简历 Hot

一款AI办公效率工具,主要用于基于AI技术的免费在线简历制作工具,适合需要提升相关任务效率的用户。

VibeKnow
VibeKnow Hot

一款AI视频创作工具,主要用于全球首个AI知识视频创作平台,文档、文章、网页,一键生成视频,适合需要提升相关任务效率的用户。

Loomy
Loomy Hot

一款AI工具,主要用于科大讯飞发布的桌面级 AI 助理,比 OpenClaw 更易用、更安全!,适合需要提升相关任务效率的用户。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

相关专题

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

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

1671

2023.07.20

python能做什么
python能做什么

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

4184

2023.07.25

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

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

1669

2023.07.31

python教程
python教程

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

24217

2023.08.03

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

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

2967

2023.08.04

python eval
python eval

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

2987

2023.08.04

scratch和python区别
scratch和python区别

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

1163

2023.08.11

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

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

596

2023.08.10

LLVM自定义Pass怎么写
LLVM自定义Pass怎么写

本专题聚焦LLVM自定义Pass开发,整理Pass类结构、run()方法、PreservedAnalyses、CMake构建、插件注册、-load-pass-plugin加载和测试用例编写流程。

100

2026.09.30

热门下载

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

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn