做 APP 爬虫时,我们通常使用 APP 抓包的方法来来获得接口路径,进而请求数据。遇到复杂的签名,可能还需要做安卓逆向来破解。
当然,我们也可以选择使用 Appium + mitmdump 来进行爬取。mitmdump 没问题,很稳定,挂着即可。但是 Appium 过于笨重,操作缓慢,开发不便,稳定性欠佳。而 Airtest 看起来也是个不错的选择,事实上确实如此。可是,我就爬个 APP,Airtest 是不是太重了?
那么,有没有一款软件,运行在安卓,通过接收 restful API 请求,进而转化为对设备的操作呢?而且它不依赖 ADB,甚至不需要 root 权限。答案是有的,它就是 Hermit,一切操作均在安卓端完成,对外只提供一个 API 。
Hermit,是一款用于安卓自动化测试的安卓软件,安装包仅有 2.8MB 。具有一系列的操作能力,譬如,通过无障碍 /root 的方式,点击,滑动、设置与读取剪切板信息(支持中文)等操作,同样,它也自带了一个布局分析器,类似 Android Studio 的 LayoutInspector,可以分析界面层次和范围、获取界面上的控件信息,进而方便点击、滑动等操作。

由于 Hermit 只提供 API,所以我们可以用喜欢的语言直接调用 API,通过发送 GET 、POST 之类的请求来控制手机。
我们可以基于 Hermit 的 API 来制作一个 python 模块,导入模块后直接调用函数,即可操作手机。而这个模块我已经做好,并将其取名为 pyhermit,如果您喜欢 Java,您可以封装一个库并叫做 Jermit 等。以此类推,可以有 Germit 、Cermit 等等。
它有哪些优点?
-
开源,体积小,轻量级
-
支持通过 root 与无障碍两种方式操控手机。
-
支持所有主流语言控制手机,二次开发方便。
-
自带界面分析工具,开发自动化测试,轻轻松松。
-
能通过次序来点击具有相同属性的一组控件,例如屏幕中出现多个关注按钮的时候。
基于无障碍的功能
- 坐标点击
- 坐标滑动
- 根据控件 id 的点击(如有多个相同 id,可根据次序点击)
- 根据控件 text 的点击(同上,可根据次序点击)
- 根据控件 content-desc 的点击
- 查看屏幕截图
- 模拟输入功能(支持中文)
- 九大全局功能(返回、按下 home 键、最近任务、显示通知、快速设置、长按电源键、分屏、锁屏、截屏)
- 实时获取界面控件详细信息
基于 Root 的功能
- 坐标点击
- 坐标滑动
- 屏幕截图
- 申请并判断 root 权限
- 发送任意 keyevent
- 长按坐标
- 根据包名启动 APP
获取设备信息能力
- 获取、设置剪切板内容(支持中文)
- 设备屏幕长宽
- CPU 最大、最小、实时频率
- CPU 名
- 内存总量、可用量
- 存储总量、可用量
- 所有安装的包名
- 设备语言、系统版本号、手机型号、手机厂商
之前在社区发过第一版,但是还不太成熟,第二版相较于第一版有了很大的提升,感兴趣的朋友可以玩玩。
文档地址: https://www.lookcos.cn/docs/hermit
Github: https://github.com/LookCos/hermit