影刀RPA新手教程手机APP自动化完全指南——ADB连接、元素定位与批量操作去年有个做电商的朋友找我帮忙说他在手机上管理三个店铺的商品价格每天手动比价要花两小时。我当时就想影刀能不能控制手机研究了一圈发现还真可以通过ADB连接加上影刀的移动端自动化能力我给他搭了一套手机端电商比价工具。这篇就从这个案例出发把影刀手机APP自动化和十二大核心知识全讲清楚。影刀安装与手机端准备影刀在电脑端安装我就不多说了官网下载安装包双击就行。手机APP自动化需要额外准备你的电脑和手机要在同一个WiFi下手机要开启开发者模式和USB调试。安卓手机的开发者模式打开方式是——设置-关于手机-连点版本号7次。然后在开发者选项里打开USB调试和无线调试。用数据线连一次电脑授权后就可以用无线ADB了。影刀里有个ADB连接指令输入手机的IP和端口就能连。我当时踩了个坑手机重启后端口会变每次都要重新查。后来写了个Python脚本自动扫描端口importsubprocess resultsubprocess.run([adb,devices],capture_outputTrue,textTrue)print(result.stdout)![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/f8d221f760a547499c5f9b30dbdeb733.png#pic_center)看到设备列表里有你的手机就说明连上了。元素定位四合一手机端也有手机APP的元素定位和网页不一样影刀用的是UI Automator体系。但核心思路一致——元素捕获为主XPath为辅CSS在手机端用不了那是网页的正则做数据清洗。元素捕获在手机端是通过ADB截屏UI树分析实现的。影刀的捕获手机元素功能能抓到APP里的按钮、输入框、文本。淘宝APP的搜索框捕获一下就能拿到。但有些APP的元素层级特别深或者用了自绘UI比如Flutter应用元素捕获抓不到。这时候上XPath//android.widget.TextView[text立即购买]或者用resource-id定位//*[resource-idcom.taobao.taobao:id/search_edit]我比价工具里有个坑——某电商APP的商品价格是个自绘控件UI树上只有一个空壳节点。最后用OCR文字识别解决了截屏后识别价格区域的文字。正则表达式在手机端主要用来提取数据。从商品标题里提取价格(\d\.?\d*)变量与数据类型比价工具的数据骨架拼多多店群自动化报活动上架比价工具的核心数据结构是一个商品比价字典product{name:蓝牙耳机,platform_a_price:89.0,platform_b_price:95.0,platform_c_price:79.0,url_a:taobao://item?id123,url_b:jd://item/456,url_c:pdd://goods/789}字典取值时键不存在会报错两个方案用If先判断或者用Python的get方法给默认值product.get(“url_c”, “”)。列表用于批量存储——一天要比价的商品列表。JSON用于和服务器同步数据HTTP请求拿到JSON文本json.loads转成字典操作操作完json.dumps转回文本发出去。字符串操作里索引和拼接最常用。商品名截取前20个字符product_name[:20]。价格拼接平台名 “” str(price) “元”。流程控制比价工具的逻辑流比价工具的主流程是For次数循环——遍历要比价的商品列表。每个商品循环体内调用三个子流程平台A比价、平台B比价、平台C比价。ForEach列表循环用于遍历商品列表。相似元素循环用于手机APP上的列表页——比如搜索结果页的商品卡片。While条件循环用在滑动加载更多的场景。手机APP是无限滚动加载的不知道到底有多少商品用一个While循环不停滑动直到出现没有更多了的文本元素。If条件判断用于比价结果分支——如果平台C最便宜且差价超过10元就发通知。Try-Catch包住每个平台的比价逻辑一个平台出错不影响其他平台。网页自动化手机端也有网页场景比价工具虽然主要在APP上操作但有些电商的H5页面也要处理。影刀的网页自动化在手机端通过内置浏览器实现。等待策略三种都要用。固定等待用在页面加载兜底。元素等待用得最多——等搜索结果出现。条件等待用于等价格元素加载完有些价格是异步加载的页面出来了但价格还是加载中。弹窗处理在手机网页上特别烦。APP内置浏览器经常弹广告弹窗五步标准流程走一遍捕获弹窗-判断存在-点关闭-继续操作-Try-Catch兜底。盲点弹窗用Try-Catch包住整块操作。翻页在手机端不是点下一页而是滑动屏幕。但逻辑一样——滑到底部判断是否还有更多内容。懒加载配合滚动和index去重iframe切换和窗口切换在H5页面里也会遇到。数据处理比价结果的存储比价结果我用Excel存。影刀的Excel读写指令支持指定区域读写。批量处理时攒够一批再写别一条一条写。文本提取与清洗——商品标题里经常带emoji和特殊符号用正则清洗importre clean_namere.sub(r[^\w\u4e00-\u9fff\s],,raw_name)JSON解析用在和比价服务器对接上。数据库连接用于历史价格记录——SELECT查询历史最低价executemany批量插入当天数据用完关闭连接。数据库五个常见报错记住就行连接超时查网络、权限不足查密码、SQL语法错误打印SQL、字符集指定utf8、连接数超限及时关闭。鼠标键盘图像自动化手机端的核心手机APP自动化的核心操作就是点击、滑动、输入。影刀的点击手机元素“滑动屏幕”输入文本指令覆盖了大部分需求。模拟模式和驱动模式在手机端对应的是坐标点击和元素点击。坐标点击就是点屏幕的某个xy坐标元素点击是通过UI树找到元素再点。坐标点击更快但容易因屏幕分辨率变化而偏移元素点击更稳定但慢。我比价工具有个加入购物车的操作商品详情页的加购按钮是自绘的元素捕获定位不到。用图像识别——先截图保存加购按钮的图片然后用wait_appear等这张图片出现click点它。图像识别支持9个锚点位置加偏移量微调精确定位没问题。OCR文字识别在比价工具里用得很多。价格数字、库存信息、优惠券金额很多都是图片形式展示的。截屏后OCR识别再正则提取数字。进阶技能ADB与Python协同ADB是手机自动化的底层能力。除了影刀封装的ADB指令你还可以直接用Python执行ADB命令importsubprocess# 截屏subprocess.run([adb,shell,screencap,-p,/sdcard/screen.png])# 下载到电脑subprocess.run([adb,pull,/sdcard/screen.png,C:/temp/screen.png])# 点击坐标subprocess.run([adb,shell,input,tap,500,800])# 滑动subprocess.run([adb,shell,input,swipe,500,1500,500,500,300])HTTP请求用于对接比价API——有些平台有开放接口直接查价格比APP操作快十倍。Python协同可以做复杂的数据分析pandas算价差、画趋势图。OCR识别前面说过了补充一个技巧——识别小数字时把图片放大2倍再识别准确率会提高很多。平台实战三个APP的比价淘宝APP采集的核心是搜索流程稳定。搜索框用resource-id定位搜索结果用相似元素循环遍历。价格有些是图片要OCR。拼多多APP的反爬比较狠频繁操作会弹验证码。我加了随机等待——每次操作后等1到3秒随机数用Python生成importrandomimporttime time.sleep(random.uniform(1,3))抖音电商的购物车页面是纯自绘UI元素全部定位不到全程靠图像识别坐标点击OCR。这个流程跑了三天才稳定我当时排查一个坐标偏移的问题就搞了一下午。小红书虽然是内容平台但也有电商。笔记里的商品链接用元素捕获抓价格要跳转到商品页OCR。TEMU店群矩阵自动化运营核价报活动系统联动比价结果推送比价结果要推送到飞书。用HTTP请求调飞书机器人API把比价信息格式化成卡片消息发出去。飞书多维表格记录历史比价数据用飞书开放平台API写入。邮件发送用影刀的发送邮件指令把Excel附件发出去。定时任务设在每天上午10点和下午2点各跑一次。工程化与规范手机流程的稳定性手机APP自动化的流程稳定性比网页难搞。屏幕分辨率不同、APP版本更新、网络波动任何一个都可能让流程崩掉。子流程封装是必须的。每个平台的比价逻辑独立成子流程一个平台崩了不影响其他平台。参数传递——主流程传商品名给子流程子流程返回最低价和链接。调试技巧打断点一行行排查。手机自动化特别需要断点因为你看不到中间状态。在每个关键操作后加一个截屏指令出问题时看截屏就知道卡在哪。命名规范统一用平台-操作-场景格式比如淘宝-搜索商品-比价“拼多多-获取价格-比价”。版本选择上社区版够个人用创业版支持定时任务和更多并发企业版有集中管理。手机自动化对并发要求不高社区版起步够用。速查表与常见报错ADB连接失败——检查手机和电脑是否同WiFi、USB调试是否开启、端口是否正确。元素捕获不到——APP可能用了自绘UI换OCR或图像识别。坐标点击偏移——不同手机分辨率不同用比例坐标而非绝对坐标x_ratio 500/1080实际坐标 x_ratio * 屏幕宽度。OCR识别错误——放大图片、增加对比度、限定识别区域。APP闪退——操作太快了加随机等待。滑动没反应——滑动距离太短或速度太快调整swipe的参数。飞书消息发不出去——检查机器人webhook地址是否正确。Excel写入报错Array to String——列表要先转字符串。日期偏移——Excel日期比Python多2天。内存不足——大文件流式读取。我在 home.linyan.cloud 放了一份手机APP自动化的ADB命令速查表需要的可以去看。#影刀RPA #手机自动化 #ADB #RPA教程作者林焱