本博客包含多个文档和书籍的翻译,但有能力者推荐阅读英文原版

Python爬虫App数据抓取 – Appium

Coding Alan 2个月前 (12-06) 514次浏览 0个评论

准备工作

模拟器

  • Google AVD(Android Studio)
  • Genymotion
  • 夜神模拟器:https://www.yeshen.com/(macOS 上暂不支持多开)
  • 网易MuMu模拟器:http://mumu.163.com/(macOS上支持多开)

抓包工具

  • Fiddler: https://www.telerik.com/fiddler(支持 Windows, Linux)
    Fiddler 下方命令行中输入 bpu 域名可对指定域名进行请求包拦截处理,再次输入 bpu 可取消对该域名的拦截
    Fiddler 下方命令行中输入bpafter 域名可对指定域名进行响应包拦截处理,再次输入 bpa可取消对该域名的拦截
  • mitmproxy

    安装证书:http://mitm.it/,双击证书在 macOS 中搜索 mitm 设置为信任,在 Windows 中按照步骤执行安装,此时即可对 https 进行抓包的加密、解密处理;除对浏览器添加代理外,也可对 Wifi 进行代理配置
    iOS 上安装证书除在通用中启用描述文件外还需在“通用>关于本机>证书信息设置”中进行启用
    安卓有些手机自带浏览器无法下载或无法安装,请使用其它浏览器下载,安装可在WLAN>高级设置>安装证书路径下进行
    过滤内容:在 mitmproxy 命令界面输入 f,然后输入过滤命令,再次输入 f 可退出,按下 z 可清除所有的请求

    拦截请求:在 mitmproxy命令界面输入 i

    mitmdump 所配合使用的 Python 脚本示例:
  • Packet Capture: https://www.coolapk.com/apk/app.greyshirts.sslcapture
    运行于 Android 平台,无需 root 权限
  • Anyproxy

Chrome 插件: SwitchyOmega

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

Android SDK 国内代理:

adb(Android Debug Bridge)

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

uiautomator

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

Python爬虫App数据抓取 - Appium

网友开发了改进版本: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 客户端

Python爬虫App数据抓取 - Appium

连接后点击右上角放大镜图标可进入 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 和 xpathPython爬虫App数据抓取 - Appium

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 都进行了屏蔽,从而绕过证书检查。

注意:

  • 手机必须获取 root 权限
  • 安装 Xposed 框架存在一定风险(真机建议使用已集成 Xposed 框架的系统)
  • 手机可以直接刷带有 Xposed 框架的系统

下载地址:

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,从而通过代码进行反向解析

Python爬虫App数据抓取 - Appium如以下是抖音当前的数字混淆对应关系

 

 

常见问题

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 模拟器,执行如下命令进行连接:

 

 

喜欢 (0)
[]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址