mitmproxy + Appium实现快手数据的抓取

mitmproxy

1,mitmproxy介绍

mitmproxy是一个支持Http和Https的抓包程序,类似于fiddler,Charles的功能,只不过是通过控制台的形式操作。
此外,mitmproxy还有两个关联组件:
mitmdump:是mitmproxy的命令行接口,利用它可以对接python脚本,实现监听后的处理。
mitmweb:是一个web程序,通过它可以清楚的观察到mitmproxy捕获的请求。

2,mitmroxy环境安装

pip install mitmproxy
注意:在python3.6版本的解释器下是可以安装成功,但是运行会出错,建议使用python3.7版本(3.7版本以上的未测试)
安装完成后使用命令:mitmdump --version 命令来进行测试显示一下结果则表示安装成功:
Mitmproxy: 5.1.1
Python:    3.7.7
OpenSSL:   OpenSSL 1.1.1g  21 Apr 2020
Platform:  Windows-10-10.0.18362-SP0
不使用mitmproxy测试是因为在Windows下不支持mitmproxy的控制台接口。

3, 证书配置

对于mitmproxy来说,如果想要截获HTTPS请求,就需要设置证书,mitmproxy在安装完成后会提供一套CA证书,在用户目录下的.mimtproxy目录下找到CA证书
1)Windows下安装证书双击mitmproxy-ca.p12,就会出现导入证书的引导页,有一个私钥密码设置直接跳过,然后选择“将所有证书都翻入下列存储”,点击浏览按钮,选择存储位置为“受信任的根证书颁发机构”,点击确定,下一步按钮即可完成Windows下证书的安装。
2)Android下证书的安装mitmproxy在安装完成后会提供一套CA证书,里面有一个mitmproxy-ca-cert.pem文件,将该文件传送到手机上,在手机设置里面选择证书的安装,命名随便即可。

4, Android设置网络与mitmproxy进行连接

手机与PC端在同一局域网下,点击手机网络,修改网络设置为手动,代理服务器主机名为PC端IP地址(cmd下运行ipconfig),端口号为默认为8080,保存。

Appium

1, 安装JDK

在JAVA官网http://www.oracle.com/technetwork/java/javase/downloads/index.html下载JDK的安装包

2, 安装SDK

1)下载SDK安装文件,并安装,记录SDK的安装所在文件夹,配置环境变量时使用。2)配置SDK打开SDK Manager.exe,选择安装组件时要注意:查看模拟器或者真机的安卓系统,根据安卓系统安卓组件,必须勾选Tools(Preview Channel),其余的组件根据自己的安卓系统进行勾选安装。
3)添加环境变量系统环境变量中添加:变量名:ANDROID_HOME 变量值:SDK所在文件位置系统变量Path中添加:%ANDROID_HOME%;%ANDROID_HOME%\tools;%ANDROID_HOME%\platform-tools
4)测试是否安装成功cmd下输入adb version查看,安装成功会显示出具体的版本号及位置信息等。

3,安装node.js

运行于服务端的JavaScript解释器
node.js官网下载安装包进行安装。
官网下载:https://nodejs.org/en/download/

4, 安装appium-python-client

appium的python客户端
进入cmd,输入:pip install Appium-Python-Client
安装过程中如果出现网络超时,可以通过换源来解决。

5, 模拟器的安装(用真机的忽略)

1)下载模拟器安装包进行安装
2)cmd下输入人adb devices进行测试

6,问题解决

1)SDK adb的版本和夜神adb的版本不一致导致,解决方法:1.将SDK中platform-tools目录下的adb.exe改名为adb_bak.exe,进行备份;2.将夜神模拟器安装目录下的adb.exe复制到SDK中platform-tools目录下
2)安装android sdk时,查看安装成功否,用命令adb version,提示adb不是内部或外部命令?方法一:在配置环境变量时,path下面添加adb.exe所在路径:D:\software\android-sdk_r24.4.1-windows\android-sdk-windows\platform-tools 配置好后重新在cmd执行adb version命令方法二:打开SDK中对应的路径,平台工具目录下找到adb.exe,AdbWinApi.dll,AdbWinUsbApi.dll并复制三个文件 将其复制到C:\Users\bakclass下,配置好后再cmd执行adb version命令,若还是不成功,重启cmd再输入命令,我是使用第二种方法成功的
3)安装appium-python-client时,提示pip不是内部或外部命令?
找到python安装的路径,查看script下是否有pip.exe
再命令行中进入到scripts目录,再执行命令pip install Appium-Python-Client
就可以成功了

mitmdump对接python脚本

在确保环境安装正常的情况下编写py脚本。
通过之前的抓包我们已经得到了数据包在具体的url中请求响应过来,我们不需要去关注该请求是get还是post,请求参数是什么,我们只需要通过抓包将该url进行对比,找到url中共有的字符串,在mitmdump进行截取的时候根据共有的字符串将我们需要截取的url进行目标截取。
url1 = 'gifshow'
url2 = 'ksapisrv'
if flow.request.url.find(url1) != -1 or flow.request.url.find(url2) != -1:ctx.log.warn(flow.request.url)data_list = flow.response.text.encode('gbk', 'ignore').decode('gbk', 'ignore')parse_data(data_list)
上述parse_data是目标url的响应结果解析函数,我们可以根据需求来对响应数据进行解析。

mitmdump获取request信息的一些常用方法:

flow.request.headers #获取所有头信息,包含Host、User-Agent、Content-type等字段
flow.request.url #完整的请求地址,包含域名及请求参数,但是不包含放在body里面的请求参数
flow.request.pretty_url #同flow.request.url目前没看出什么差别
flow.request.host #域名
flow.request.method #请求方式。POST、GET等
flow.request.scheme #什么请求 ,如https
flow.request.path # 请求的路径,url除域名之外的内容
flow.request.get_text() #请求中body内容,有一些http会把请求参数放在body里面,那么可通过此方法获取,返回字典类型
flow.request.query #返回MultiDictView类型的数据,url直接带的键值参数
flow.request.get_content()#bytes,结果如flow.request.get_text()
flow.request.raw_content #bytes,结果如flow.request.get_content()
flow.request.urlencoded_form #MultiDictView,content-type:application/x-www-form-urlencoded时的请求参数,不包含url直接带的键值参数
flow.request.multipart_form #MultiDictView,content-type:multipart/form-data
时的请求参数,不包含url直接带的键值参数

mitmdump获取响应信息的常用方法:

flow.response.status_code #状态码
flow.response.text#返回内容,已解码
flow.response.content #返回内容,二进制
flow.response.setText()#修改返回内容,不需要转码

至此我们已经将mitmdump数据截取完成,下面我们将使用Appium来实现自动化下滑,完成Appium自动化下滑实现数据的刷新。

Appium实现打开目标app,并实现点击滑动等操作。

1,appPackage与appActivity名称的获取

1,介绍
appPackage  待检测的APP名称
appActivity 待检测的APPappActivity名字
以上两条信息必须要相互对应,否则不能正确运行
2,查找目标APP的属性
方法:确保环境配置正确的情况下1)adb logcat > d:/log.txt  #将手机的日志信息保存到本地log.txt文件2)打开手机中需要操作的APP3)cmd终端Ctrl+C终止命令行的日志信息4)打开log.txt文件,搜索cmp 会显示cmp=com.tencent.weishi/com.tencent.oscar.module.main.MainActivity} from uid 10038 on display 0 类似信息5)appPackage = com.tencent.weishi6)appActivity = com.tencent.oscar.module.main.MainActivity

appium实现页面的上滑

获取窗口的大小def get_size(self):# 获取窗口尺寸,滑动窗口使用size = self.driver.get_window_size()x = size['width']y = size['height']return x, y
使用swipe来实现窗口的滑动def swipe_up(self):# 向上滑动size = self.get_size()x1 = int(size[0] * 0.5)y1 = int(size[1] * 0.9)y2 = int(size[1] * 0.1)self.driver.swipe(x1, y1, x1, y2, 500)
使用while True 来实现窗口的无限循环上滑
但注意,在循环下滑的时候中间休眠1s否则会出现滑动错误。

mitmproxy + Appium实现快手数据的抓取相关推荐

  1. ajax获取网页新闻,基于Ajax的新闻网页动态数据的抓取方法及系统

    主权项: 1.基于Ajax的新闻网页动态数据的抓取方法,其特征是,包括如下步骤:步骤(101):建立新闻网页爬取内容数据库,设置新闻网页爬取内容数据库的编码方式:获得待抓取新闻网页的新闻列表页面的UR ...

  2. C# 开发的网络数据包抓取的的实现

    利用C# 开发的网络数据包抓取的的实现 利用套接字Socket  socket=new Socket(AddressFamily.InterNetwork, SocketType.Raw, Proto ...

  3. PythonStock(37)股票系统:Python股票系统发布V2.0版本,改个名字吧,叫Python全栈股票系统2.0,可以实现数据的抓取(akshare),统计分析,数据报表展示。

    目录 前言 1,关于Python全栈股票系统V2.0 2,在CSDN上居然有人给代码打包收费下载!! 2,更新docker镜像 3,总结 前言 使用Python开发一个web股票项目. [github ...

  4. 基于WFP的windows驱动对TCP数据的抓取,修改以及注意事项

    基于WFP的windows驱动对TCP数据的抓取及修改 前言 目的 主要问题 步骤 一. WFP过滤TCP报文 WFP过滤层 二. 追加OPTIONS数据 TCP/IP数据报文格式 如何追加TCP头部 ...

  5. 利用新浪API实现数据的抓取\微博数据爬取\微博爬虫

    PS:(本人长期出售超大量微博数据.旅游网站评论数据,并提供各种指定数据爬取服务,Message to YuboonaZhang@Yahoo.com.由于微博接口更新后限制增大,这个代码已经不能用来爬 ...

  6. 关于淘宝网评论数据的抓取

    关于淘宝网评论数据的抓取 第一步 如何获取商品基本信息 我们打开多张淘宝的商品网页,分析网页的URL组成,寻找其中的规律,下面给出一个例子 我们发现了一个规律就是http://item.taobao. ...

  7. 利用新浪API实现数据的抓取\微博数据爬取\微博爬虫 1

    PS:(本人长期出售超大量微博数据.旅游网站评论数据,并提供各种指定数据爬取服务,Message to YuboonaZhang@Yahoo.com.由于微博接口更新后限制增大,这个代码已经不能用来爬 ...

  8. 用selenium实现对微博搜索数据的抓取

     http://computational-communication.com/post/bian-cheng-gong-ju/2014-06-25-searching-weibo-with-se ...

  9. python爬虫原理和运营商SDK数据建模抓取的区别

    当今是个不折不扣的大数据时代,大数据贯穿了我们的衣食住行,可以这么说,大数据是目前最宝贵的数据宝藏! 什么是Python爬虫? Python爬虫又叫网络爬虫 关于Python爬虫,我们需要知道的有: ...

最新文章

  1. crontab 总结
  2. Entity Framework 4.1/4.3 之五 (DBContext 之 2 查询功能)
  3. PI-安装SoapUI on Windows
  4. C#SetWindowPos窗口置顶
  5. 回溯的问题合集(Leetcode题解-Python语言)
  6. lisp 线性标注自动避让_本科阶段就挑战自动驾驶开发?华为云ModelArts说Yes!
  7. 第七章节 类的抽象(接口)
  8. 开发日志:按照每月每天,每年每月,每月每周汇总数据
  9. 获取rabbitmq连接对象_NET Core使用RabbitMQ
  10. 多终端房地产项目管理系统源码,源码分享
  11. 腾讯加入QQ群 连接代码
  12. 实对称矩阵必可正交对角化证明
  13. 列举在100到200以内的质数
  14. 计算机浏览记录删除,如何完全删除本地计算机上的浏览历史记录?如何从计算机中完全删除Internet访问...
  15. iOS申请邓白氏总结
  16. ESP8266-Arduino编程实例-LM75温度传感器驱动
  17. 软考知识点之需求管理
  18. 「GoTeam 招聘时间」滴滴出行系统研发工程师(北京)
  19. Alink漫谈(十) :线性回归实现 之 数据预处理
  20. PCB板的跨分割设计

热门文章

  1. 手把手教你升级gcc到gcc11
  2. webpack配置module详解
  3. 运动蓝牙耳机什么好?五款国产不容错过的运动耳机
  4. python模块之matplotlib.pyplot
  5. groove音乐for android,Groovepad app
  6. getmethods_Java类类getMethods()方法及示例
  7. memory:allocator
  8. jsPlumb应用指南(一)概念部分
  9. C++进行迷宫问题求解
  10. 计算机网络是虚拟网么,计算机网络安全虚拟网络技术作用