当前位置: 首页>移动开发>正文

android 开发 爬虫拦截器 android爬虫工具

一、Android模拟器

1.常见Android开发模拟器对比

  • Google官方AVD:支持Windows/Linux操作系统,支持QEMU虚拟机,运行速度慢,仅支持ADB方式安装APK,支持的机型多,但调试复杂
  • genymotion:支持Windows/Max/Linux操作系统,支持VirtualBox虚拟机,运行速度一般,支持ADB/拖拽方式安装APK,支持的机型少,调试难度一般
  • 夜神模拟器:仅支持windows操作系统,支持VirtualBox虚拟机,运行速度快,支持ADB/拖拽方式安装APK,支持的机型少,但调试简单 

2.夜神安卓模拟器的安装及介绍

夜神安卓模拟器,是全新一代安卓模拟器,与传统安装模拟器相比,基于安卓5.1.1或者7.1.2两个版本,兼容x86/AMD,在性能、稳定性、兼容性方面存在巨大优势。

  下载地址:https://www.yeshen.com/

可通过夜神多开器里添加新的模拟器(安卓5和7两种可选择)

3.安装app的方式有3种:

  • 应用中心下载安装,
  • 手动下载好apk包,拖拽
  • 手动下载好apk包,通过adb命令安装
  • 以adb命令安装为例:
  • 首先打开一个模拟器
  • 将apk包放在adb.exe所在目录,并在该目录下打开cmd,输入adb devices -l查看设备
  • adb install apk包名  即可在模拟器上安装app

  4.查看模拟器连接设备

  • 可通过adb devices进行查看
  • 如果先启动了模拟器,而未启动adb服务器,则通过adb devices无法查看到夜神模拟器的连接端口
  • 可以先通过任务管理器查找夜神模拟器(noxvmhandle frontend)的PID
  • 然后在cmd终端中输入命令: netstat -ano | findstr 'PID'进行查找,第1台开启的为62001,第2台62025,第3台62026
  • 通过adb connect ip:port进行连接后,就可以通过adb devices查看所连接的设备了

二、fiddler抓包工具的简单使用:

  • 工具栏
  • save----可以保存所有的session,比如文件名填test,则会自动保存为test.saz格式
  • import ----可以导入其它格式的session,比如wireshark
  • export----可以将session导出为其它格式
  • 请求前以及响应后断点调试:
  • 可以通过命令行,也可以通过图形界面中的(Rules--Automatic Breakpoints--Before Requests或After Response)来设置,但是图形界面设置会拦截所有请求和响应,不推荐,下面以命令行设置为例:
  • 请求前:
  • bpu 域名,比如bpu https://www.baidu.com/   会在请求前拦截https://www.baidu.com/这个域名,其他域名的请求不受影响
  • bpu  取消拦截
  • 举例:命令行输入bpu https://www.baidu.com/,然后访问https://www.baidu.com/,会在这个会话暂停,我们修改请求url和主机Host到www.qq.com,然后点击绿色的run completi,查看浏览器返回的是腾讯新闻首页
  • 响应后:
  • bpafter 域名
  • bpa 取消响应包拦截
  • 设置网页重定向:
  • 比如修改百度首页中间的那张图片
  • 在右侧打开AutoResponder,将图片url写入匹配规则中,或者从左侧session会话中直接拖动进去,然后选中enable rules选项,在下面的下拉选项中选择find a file,就可以自定义响应的图片了,然后save,浏览器清除一下缓存,再次请求百度,中间的图片就会切换掉
  • 移动端安装证书以及fiddler设置:
  • 1、打开夜神模拟器,点击设置,手机与网络中开启桥接模式,需要安装驱动
  • 2、设置中--WLAN--长按wiredssid--修改网络--高级选项中设置代理为手动,然后填入电脑的ip和fiddler的端口号,保存设置
  • 3、fiddler中设置Tools--fiddler options--HTTPs--from remote clients only,同时connections中勾选上允许远程连接这个选项。
  • 4、浏览器中输入http://fidller的ip和端口,安装证书后,重新打开浏览器,就可以正常访问网页,并且fiddler会抓取到数据包 

三、mitmproxy抓包工具的使用

除了和正常的代理一样转发请求,保障客户端和服务端的通信,它还可以载入自定义python脚本。

  • 安装:(基于python环境)
  • pip3 install mitmproxy
  • 查看版本号:mitmdump --version
  • 3个组件
  • mitmproxy:仅支持linux操作系统
  • 终端输入mitmproxy启动,默认监听8080端口,可以通过mitmproxy -p 端口号 指定端口号启动
  • 通过键盘上下键选择抓包数据流,回车进入
  • tab键切换request和response以及detail
  • 按esc,再按q返回到抓包流界面
  • 输入z清除所有显示数据包
  • 抓包界面底部有一个命令行框,可以输入过滤信息:
  • 输入f,会弹出命令提示,然后输入过滤规则
  • 过滤规则:
  • !(~c 200):过滤出所有状态码不是200的请求
  • 再次输入f,然后将过滤规则=后面的部分清除,敲回车,又能显示所有数据包
  • ~d baidu.com:会显示所有域名和baidu.com相关的数据包
  • ~m post & ~u baidu:显示url中包含baidu的post请求数据包,~m表示方法,~u表示url
  • 设置断点拦截
  • 数据包列表页面输入字母i,会弹出命令行提示
  • 设置断点规则,和过滤规则一样
  • ~u baidu.com & ~m get:会拦截url中包含baidu.com的get请求,通过移动端访问baidu,com,终端页面上会显示标红的数据包
  • 切换到该数据包,敲回车,会停留在request界面,比如修改请求的url
  • 输入e,会弹出一个选择框,比如选择request-headers回车,进入headers界面,比如删除Host,按d键,然后按q键退出,接着按e键进行url的修改,下面会弹出命令输入框,输入https://xw.qq.com,回车,至此我们修改了请求url以及删除了Host,然后按q返回到数据包列表界面,按a进行重新的访问,返回移动端设备,我们发现浏览器url虽然显示的是baidu.com,但是内容却是腾讯新闻,所以该请求已经被我们进行了拦截和修改
  • 接着我们修改response
  • z键清空页面内容,移动端接着访问baidu,com,linux终端上切换到该数据包敲回车,然后tab键到response,然后按e弹出选择框,选择response-body,然后在弹出的vim编辑器中输入返回的内容,:wq保存退出,然后输入q回退到请求数据包列表,然后输入a继续访问,查看移动设备,浏览器上显示的是我们修改后的内容
  • 退出:先输入q,然后输入y
  • mitmweb
  • 命令行终端直接输入mitmweb启动,会弹出一个网页,显示图形抓包界面,更加方便的查看抓包数据,默认监听8080端口
  • mitmdump
  • cmd命令行输入mitmdump 启动组件,mitmdump -p 端口号   指定端口启动
  • mitmdump -m 文件名      启动抓包工具,并且可以将抓取到的所有数据包写入到指定文件中,该文件在C:\Users\Administrator下
  • 与python交互
  • 比如 mitmdump -s test.py启动代理服务器,并加载了test.py这个脚本
  • test.py文本有特定格式
# coding:utf-8
from mitmproxy import ctx #导入日志模块

#必须是以下格式,函数名request,请求参数必须是flow
def request(flow):
    #终端会有不通过的颜色显示
    ctx.log.info(str(flow.request.headers))  #白色显示
    ctx.log.warn(str(flow.request.headers))  #黄绿色显示
    ctx.log.error(str(flow.request.headers)) #红色显示
    ctx.log.error(flow.request.url)       #如http://httpbin.org/get
    ctx.logm.error(flow.request.host)     #httpbin.org
    ctx.log.error(flow.request.method)   #GET
    ctx.log.error(flow.request.path)     #/get

#response方法中可以获取flow.request中的内容,但request方法中不可以获取flow.response中的内容
def response(flow):
    ctx.log.error(flow.request.url) #获取请求url
    ctx.log.error(str(flow.response.status_code)) #响应状态码
    ctx.log.error(flow.response.text) #响应内容
  • 使用代理:
  • mitmdump -s python脚本 -p 端口号 --mode=upstream:http://代理ip:port --upstream-auth=用户名:密码
  • 也可以通过:flow.server_conn.via = ServerSpec(("http",(ip, port)))
  • 静默模式:
  • 指定【-q】参数
  • 示例+启动命令:
from mitmproxy import http
from mitmproxy.net.server_spec import ServerSpec


def request(flow: http.HTTPFlow):
    # 设置ip代理
    ip = "117.94.112.33"
    port = 60833
    address = (ip, port)
    flow.server_conn.via = ServerSpec(("http", address))


def response(flow: http.HTTPFlow):
    if flow.request.path == "/x/passport-login/oauth2/access_token":
        print(flow.response.content)

# mitmdump  -s  test.py -q   -q参数:静默模式启动
# mitmdump -p 8080 -s test.py --set block_global=false  --set upstream_cert=false --set connection_strategy=lazy -q
  • 然后打开安卓模拟器,访问页面
  • 浏览器设置代理:
  • 通过Chrome浏览器的switch omega插件新建一个代理情景模式,监听8080端口
  • 新打开一个页面,地址栏输入mitm.it,下载安装对应操作平台的证书,密钥栏不需要填写,然后点击将所有的证书都放入下列存储,将证书存储位置选择为受信任的根证书颁发机构
  • 移动端设置代理及安装证书
  • 夜神模拟器中:设置--WLAN--长按wiredssid--修改网络--高级选项中设置代理为手动,然后填入电脑的ip和mitmproxy的端口号,保存设置
  • 在mitmproxy服务器启动的情况下,打开浏览器输入网址mitm.it,选择android版本进行证书的下载及安装,连接不同操作系统中的代理服务器,需要再次安装对应平台的证书
  • 第一次安装证书的话,需要设置模拟器锁屏的密码

四、docker的简单使用

  • docker和传统虚拟机的对比总结:
  • docker容器:启动秒级,硬盘使用一般为MB,性能接近原生,单机支持上千个容器
  • 虚拟机:启动分钟级,硬盘使用一般为GB,性能弱于原生,系统支持量一般几十个
  • docker容器的优点:
  • 更高效的利用系统资源
  • 更快速的启动时间
  • 一致的运行环境
  • 持续交付和部署
  • 更轻松的迁移
  • docker的安装
  • docker for windows ---需要win10专业版以上
  • docker toolbox 可以在任何windows版本使用,但是官方已经不支持下载了,所以从网上找别的下载地址,比如:https://dl.pconline.com.cn/download/2347658.html
  • 下载安装好以后,打开Docker Quickstart Terminal,经过漫长的等待,然后输入docker version就可以查看版本号以确定是否安装成功
  • docker命令
  • 按照惯例,先运行下docker  run hello-world,会从git hub上pull过来
  • docker images  查看当前所有的镜像
  • docker ps -a 查看当前所有的容器以及运行状态
  • docker run -it ubuntu bash   ----- -it表示进入一个交互的ubuntu系统,第一次运行,会从远程下载,退出ubuntu使用命令exit,之后可以再次通过docker run -it ubuntu bash进入ubuntu的交互系统
  • docker rmi hello-world --- 删除镜像名,会报错,需要先删除容器id 
  • docker rm 容器的id,比如:docker rm c75c96b67cce,然后执行:docker rmi hello-world 删除这个镜像

五、Android开发工具环境安装

  • 准备工作:
  • 安装Java开发环境JDK 
  • 选择jdk-8u181版本进行安装,创建一个java文件夹,然后在该文件夹内部创建jdk和jre文件夹用作安装目录
  • 设置系统环境变量:
  • Path末尾添上:%java_home%\bin;%java_home%\jre\bin
  • 新建变量:
  • JAVA_HOME:D:\Google\chrome\Java\jdk
  • ClassPath:.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar;
  • 验证java环境变量是否安装和配置成功
  • cmd命令行输入java 或者javac或者java -version看是否都能显示一堆有关信息
  • 安装Android SDK
  • 选择r24.4.1这个版本
  • 修改系统环境变量Path
  • 末尾添加:;%ANDROID_HOME%\platform-tools;%ANDROID_HOME%\tools;
  • 新建系统环境变量
  • ANDROID_HOME:     D:\Google\chrome\Android SDK
  • adb工具的使用

adb是一个通用命令行工具,允许与模拟器或者android真机进行通信,如安装和调试应用

adb工具在Android SDK\platform-tools下,因为已经配置过环境变量,可以在cmd命令行直接通过adb命令打开

  • 启动adb服务器:
  • adb start-server    然后会绑定tcp:5037端口
  • 使用adb命令行工具时,需要移动客户端打开开发者模式,并允许usb调试,以夜神模拟器为例:
  • 打开设置---关于平板电脑--连续点击版本号,然后返回到设置里,点击开发者选项,然后打开usb调试,然后就可以通过adb命令在模拟器里安装应用和调试应用
  • adb使用:
  • adb version查看版本号
  • adb devices查看当前连接的android设备,如果出现错误,就需要进行夜神模拟器中adb工具版本的升级。
  • 可以同步Android SDK中的adb到夜神模拟器中(将adb.exe以及两个dll文件复制到夜神模拟器安装目录下替换自带的adb,记得先备份,然后将nox_adb.exe改名备份,然后将adb.exe复制一份,改名nox_adb.exe,这样就完成了夜神模拟器中adb工具版本的升级)
  • adb devices如果不显示,可以adb connect 指定设备名称   进行连接
  • adb -s 指定设备名称 shell                   进入手机底层操作系统
  • 修改连接模式(由USB模式转为tcpip):
  • adb -s 127.0.0.1:62001 tcpip 6666
  • 安装应用:
  • adb -s 指定设备名称 install apk文件名              安装app应用,可以通过拖动apk包到cmd命令行的方式获取完整路径及文件名
  • 卸载应用:(需要知道包名)
  • 首先进入手机操作系统:adb -s 指定设备名称 shell,然后cd /data/app,就能查看安装的第三方应用,-数字前面的部分就是包名,注意和文件名有所区分,然后退出 exit
  • 接着adb -s 指定设备名称 uninstall 包名    进行卸载
  • 如何查看系统的安装包名?
  • adb shell pm list package
  • PC端和模拟器之间文件传输:
  • adb push PC端文件路径(可通过拖拽到命令行的方式)  模拟器上的文件位置(比如/sdcard) 
  • adb pull 模拟器上的文件路径   pc端存储位置
  • adb shell screencap 截图存储路径    -----通过adb命令来操作模拟器进行截屏,比如 adb shell screencap /sdcard/test.png
  • uiautomator工具的使用
  • 什么是uiautomator?
  • 就是用来做UI测试的,就是普通的手工测试,点击控件元素,看输出结果是否符合预期
  • 该工具存在于两个地方:
  • Android SDK工具包内
  • appium内的inspector中
  • 它包含两个组件:
  • uiautomatorviewer:一个图形界面工具用来扫描和分析应用的UI控件,存放在tools目录下的批处理文件uiautomatorviewer.bat
  • uiautomator:一个测试的Java库,包含了创建UI测试的各种API和执行自动化测试的引擎
  • uiatutomatorviewer使用:
  • 点击Android SDK tools目录下的批处理文件uiautomatorviewer.bat
  • 将第一个弹出的黑框最小化
  • 然后我们打开一台模拟器,并打开开发者模式,进行usb调试
  • 我们通过模拟器打开一个app,然后点击UI Automator Viewer图形工具左上角第二个绿色按钮(Device Screenshot)获取app中的页面,然后点击页面中的元素,就可以获取元素的一些信息
  • 升级uiatutomatorviewer
  • 从网上下载升级版的uiatutomatorviewer.jar,替换掉tools\lib下面的uiatutomatorviewer.jar即可,接下来就可以使用xpath了

六、Appium移动端自动化测试工具的使用

  • 下载安装appium服务端:https://github.com/appium/appium-desktop/releases/tag/v1.21.0 
  • 客户端通过pip下载: pip3 install Appium-Python-Client
  • appium服务端使用
  • 打开appium服务端:默认Host: 0.0.0.0,Port:4723,点击start server开启服务器
  • 关闭服务器:点击右上角那个暂停按钮进行关闭
  • Advanced按钮点进去,可以进行一些高级设置,一般不做修改或很少修改
  • Presets按钮可以进行一些预设
  • Inspector组件的使用:
  • 开启服务器后,右上角那个放大镜,点击后进入inspector界面,主要使用Automatic Server,通过Desired Capablities来配置Appium会话,告诉Appium服务器想要进行自动化的平台和应用程序。Desired Capablities中是一些键值的设置:
  • Android独有的(主要介绍的):
  • appPackage:运行的安卓应用的包名
  • appActivity:包中所要启动的安卓activity
  • appWaitActivity:用于等待启动的安卓activity名称
  • IOS独有(主要的):
  • bundleID:被测应用的bundle ID,用于在真实设备中启动测试
  • udid:设备的唯一编号
  • 配置Desired Capablities,通过+添加一个新的键值,中间的那个是类型
  • 以考研帮app为例:
  • platformName:Android
  • platformVersion:7.1.2
  • deviceName:127.0.0.1:62001    可通过adb devices命令获取
  • appPackage:com.tal.kaoyan
  • appActivity:com.tal.kaoyan.ui.activity.SplashActivity
  • noReset:true       #当前session该app设置不会被重置
  • 以抖音app为例:
  • platformName:Android
  • platformVersion:7.1.2
  • deviceName:127.0.0.1:62001
  • appPackage:com.ss.android.ugc.aweme
  • appActivity:com.ss.android.ugc.aweme.splash.SplashActivity
  • noReset:true
  • unicodekeyboard:true                 #可以输入中文
  • resetkeyboard:true         
  • 两种方式获取appPackage和appActivity:
  • 1、通过aapt工具来获取:
  • 可以通过aapt工具来获取,该工具在Android SDK\build-tools.0.3目录下,也可以将路径添加到环境变量Path中
  • aapt dump badging apk的文件名(可以拖动apk文件到命令行)  然后敲回车,可以在后面添上| find 'launchable-activity' 通过管道进行查找定位
  • appPackage就是开始的Package
  • 下面的launchable-activity就是appActivity
  • 2、adb
  • adb shell  进入安卓操作系统
  • 然后输入命令:logcat | grep cmp=   然后敲回车,然后空几行,之后我们打开模拟器,点击应用,通过命令行就能获取到app包名和activity
  • 配置好以后,我们可以点击右下角的save as,输入保存的名字,然后通过界面中Saved Capability Sets可以查看保存过的capability sets,然后点击右下角的start session,会发现安卓模拟器中会打开这个app,同时Appium inspector界面中也已经打开了这个app,通过左上角的select elements按钮可以定位和选取页面上的元素,然后可以对选取的元素进行相应操作,比如右边的tap点击,sendkeys输入文本,clear清空文本,如果页面不能正常显示,可以尝试点击上面的刷新按钮
  • 录制功能:
  • 点击start session以后,点击上面的start recording(眼睛那个按钮),可以生成每一步操作的代码,一般作为辅助功能,在进行自动化操作的时候使用,平时用得更多的还是uiautomatorviewer

 




https://www.xamrdz.com/mobile/46y1962812.html

相关文章: