影刀RPA新手教程:手机APP自动化完全指南——ADB连接、元素定位与批量操作
去年有个做电商的朋友找我帮忙,说他在手机上管理三个店铺的商品价格,每天手动比价要花两小时。我当时就想,影刀能不能控制手机?研究了一圈发现还真可以,通过ADB连接加上影刀的移动端自动化能力,我给他搭了一套手机端电商比价工具。这篇就从这个案例出发,把影刀手机APP自动化和十二大核心知识全讲清楚。
影刀安装与手机端准备
影刀在电脑端安装我就不多说了,官网下载安装包双击就行。手机APP自动化需要额外准备:你的电脑和手机要在同一个WiFi下,手机要开启开发者模式和USB调试。
安卓手机的开发者模式打开方式是——设置-关于手机-连点版本号7次。然后在开发者选项里打开USB调试和无线调试。用数据线连一次电脑授权后,就可以用无线ADB了。
影刀里有个"ADB连接"指令,输入手机的IP和端口就能连。我当时踩了个坑,手机重启后端口会变,每次都要重新查。后来写了个Python脚本自动扫描端口:
importsubprocess result=subprocess.run(['adb','devices'],capture_output=True,text=True)print(result.stdout)看到设备列表里有你的手机就说明连上了。
元素定位四合一:手机端也有
手机APP的元素定位和网页不一样,影刀用的是UI Automator体系。但核心思路一致——元素捕获为主,XPath为辅,CSS在手机端用不了(那是网页的),正则做数据清洗。
元素捕获在手机端是通过ADB截屏+UI树分析实现的。影刀的"捕获手机元素"功能能抓到APP里的按钮、输入框、文本。淘宝APP的搜索框,捕获一下就能拿到。
但有些APP的元素层级特别深,或者用了自绘UI(比如Flutter应用),元素捕获抓不到。这时候上XPath:
//android.widget.TextView[@text='立即购买']或者用resource-id定位:
//*[@resource-id='com.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?id=123","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_name=re.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教程
作者:林焱