记录一次爬虫抓取淘宝直播数据全过程

作者: 鲁智深 分类: Python 发布时间: 2020-03-13 15:12

爬虫第一步需要抓包app分析数据格式,但淘宝系的app都开启SSL Pinning验证,导致抓包失效。

那么什么是SSL Pinning呢?简单地说一下,SSL Pinning是一种防止中间人攻击(MITM)的技术,主要的机制是在客户端发起请求->收到服务器发来的证书这一步之后,对收到的证书进行校验,如果收到的证书不被客户端所信任,就直接断开连接不继续请求。

既然知道问题,开始动手解决,百度上的大部分教程教你如果安装 Xposed 框架 JustTrustMe 组件,通过将各种已知的的HTTP请求库中用于校验证书的API都进行Hook,使无论是否是可信证书的情况,校验结果返回都为正常状态,从而实现绕过证书检查的效果。

上面方法没有测试,我是降低手机版本制 Android5.1 进行抓包,机型是魅蓝note3,先看一下关于手机部分

关于手机

关于手机

系统降级

如果是 Android7.0 版本以上手机,可以通过魅族官方网站的

下载update包

下载update包

系统升级/降级,进入「 文件管理 」并使用 update.zip 进行升级(涉及降级、不同版本类型互刷等行为,必须清除应用数据)

刷机教程

刷机教程

关闭手机后,同时按住“音量+键”和“电源键”,直至手机震动后松开。勾选“立即升级”和“清除数据”按钮,并点击“开始”

系统降级

系统降级

获取root权限,删除不必要的软件提高手机运行速度

设置–》flyme账户–》登录账户,设置–》指纹安全–》root权限

root权限

root权限

安装 kingroot 软件

链接:https://pan.baidu.com/s/1HX7ENsDMa9SfVj4hZsUt-A 提取码:or7p

卸载软件

卸载预装软件

安装系统证书

浏览器访问 http://chls.pro/ssl 下载 charles https证书

charles

charles

更改 charles-proxy-ssl-proxying-certificate.pem 后缀为 charles-proxy-ssl-proxying-certificate.crt

手机从存储盘安装证书,设置–》指纹安全–》设备管理与凭证–》从存储盘安装。

测试抓包是否成功

测试抓包

测试抓包

实现自动化操作

通过 adb 连接手机,手机需要开启开发者模式–》usb控制权限

1
2
3
4
5
6
启动adb服务器 adb start-server
手机开发者模式--》usb调试 (模拟器版本不一致需要覆盖adb)
查看当前连接的安卓设备 adb devices
进入手机文件 adb -s 设备名称 shell
adb devices
adb -s 设备名称 install apk文件名

这里要用到 airtest 实现自动化操作

airtest

airtest

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
from airtest.core.api import *
from poco.drivers.android.uiautomation import AndroidUiautomationPoco
dev1 = connect_device("Android://127.0.0.1:5037/179590f6")
poco = AndroidUiautomationPoco(dev=dev1, use_airtest_input=True, screenshot_each_action=False)
auto_setup(__file__)


poco(text="淘宝直播").click()
poco(resourceId='com.taobao.live:id/homepage2_search_btn').wait_for_appearance(timeout=9)
poco(resourceId="com.taobao.live:id/homepage2_search_btn").click()
poco(resourceId='com.taobao.live:id/taolive_search_edit_text').wait_for_appearance(timeout=9)
poco(resourceId="com.taobao.live:id/taolive_search_edit_text").click()
text("下饭")
device().adb.shell(["am", "broadcast", "-a", "ADB_EDITOR_CODE", "--ei", "code", "3"])
sleep(2)
# 获取手机的屏幕分辨率
xy = poco.get_screen_size()
x = xy[0]
y = xy[1]

poco(text="好货正在播").wait_for_appearance(timeout=9)
for i in range(0, 1000):
    swipe((0.5*x, 0.95*y), (0.5*x, 0.2*y), duration=1)
    sleep(3)

airtest 教程

bibi视频教程 https://space.bilibili.com/254507574?spm_id_from=333.788.b_765f7570696e666f.2

airtest中文文档 https://airtest.netease.com/docs/docs_AirtestIDE-zh_CN/index.html

使用Airtest超快速开发App爬虫 https://www.kingname.info/2019/01/19/use-airtest/

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!

发表评论

电子邮件地址不会被公开。 必填项已用*标注