Alan Hou的个人博客

Python爬虫App数据抓取 – Appium

准备工作

模拟器

抓包工具

Chrome 插件: SwitchyOmega

Json 在线解析:https://www.json.cn/

Android SDK 国内代理:

adb(Android Debug Bridge)

真机配合 adb 使用需开启 USB 调试

uiautomator

命令行直接输入uiautomatorviewer,打开连接设备时,直接点击左上角图标获取快照,即可分析页面中相应元素的 class, resource-id 等

网友开发了改进版本:https://github.com/512433465/autotest_helper,包含快速获取 xpath、生成 Python 代码等功能

https://github.com/lazytestteam/lazyuiautomatorviewer

Appium

http://appium.io/

安装包直接下载安装服务端,也可通过 NodeJS 来安装。

注:Alan 从 GitHub 上下载安装时下载 zip 解压后安装出现问题(可能和解压工具有关),而直接下载 dmg 文件则可正常安装

安装过程如报错(npm ERR! Failed at the appium-chromedriver@x.x.x postinstall script.)在其后添加相关参数:

安装 Appium 的Python 客户端

连接后点击右上角放大镜图标可进入 Inspector

Desired Capabilities 详解见:https://github.com/appium/appium/blob/master/docs/en/writing-running-appium/caps.md

获取安卓包名及启动的 Activity

方法一(aapt 路径请根据实际安装情况进行调整)

方法二

Desired Capabilities示例(macOS 上改用了网页MuMu 模拟器,版本号请在设备的设置中查询)

配置好后可保存设置,点击 Start Session开启可视化界面,其间可进行录制并生成多种语言的代码,右下方还会生成元素的 id 和 xpath

SSL Pinning

但此时如添加代理访问抖音等 APP会报网络错误,那我们就需要学习SSL Pinning:

HTTPS的三种连接方式

  1. 根据浏览器或者操作系统(Android)自带的证书链(需要去证书机构进行购买,较少)
  2. 使用自签名证书(多见于内部使用,较少)
  3. 自签名证书加上 SSL Pinning特性
    SSL Pinning,即 SSL 证书绑定,是验证服务器身份的一种方式,是在 https 协议建立通信时增加的代码逻辑,它通过自己的方式验证服务器身份,然后决定通信是否继续下去,它唯一指定了服务器的身份,所以安全性较高。

SSL Pinning 的解决方案

安装 Xposed 框架 + JustTrustMe 组件

Xposed 是一个框架,它可以改变系统和应用程序的行为,而不接触任何 APK。它支持很多模块,每个模块可以用来帮助实现不同的功能。

JustTrustMe 是一个用来禁用、绕过 SSL 证书 检查的,它基于 Xposed 模块。JustTrustMe 是将 APK 中所有用于检验 SSL 证书的 API 都进行了屏蔽,从而绕过证书检查。

注意:

下载地址:

https://repo.xposed.info/module/de.robv.android.xposed.installer

https://github.com/Fuzion24/JustTrustMe

官网说明了直接安装仅支持带有 root 的权限的Android 4.0.3到4.4,因此在这个版本区间内的可直接安装,安装完 JustTrustMe 之后应记得在 Xposed 的模块中勾选启用。

对于更高版本还应参见http://forum.xda-developers.com/showthread.php?t=3034811

以Android 6.0为例,下载文件有:

https://dl-xda.xposed.info/modules/de.robv.android.xposed.installer_v32_de4f0d.apk(当前稳定版)

https://dl-xda.xposed.info/framework/sdk23/x86/xposed-v89-sdk23-x86.zip(根据自己的系统是 x86, ARM,RMB64进行对应版本选择,这里为 x86)

字体解析

在查看抖音分享页面时会看到其中的点赞数等数字使用了图标字体,而非纯文本,那该如何进行解析呢?通过代码可定位到字体文件,下载到本地并使用如下工具打开:

http://fontstore.baidu.com/static/editor/index.html

如下图所示,在相应数字上右击并点击字形信息可获取每个数字对应的 Unicode,从而通过代码进行反向解析

如以下是抖音当前的数字混淆对应关系
如以下是抖音当前的数字混淆对应关系

 

 

常见问题

1、adb server version (xx) doesn’t match this client (xx); killing…

这是在使用 adb 连接夜神安卓模拟器时出现的报错,解决方案:

macOS下进入/Applications/Nox\ App\ Player.app/Contents/MacOS/,备份 adb 文件,然后将platform-tools目录下的 adb 文件拷入该目录中

Windows 方法类似,不同的是需拷贝adb.exe、AdbWinApi.dll、AdbWinUsbApi.dll多个文件

2、Original error: UIAutomation2 is only supported since Android 5.0 (Lollipop). You could still use other supported backends in order to automate older Android versions.

在使用 Appium 时遇到的这个问题,针对Mac 上的夜神 模拟器暂无解决方案,根据网上的做法改用了网易 MuMu 模拟器,执行如下命令进行连接:

 

 

退出移动版