有没有想过让你的手机帮你自动完成某些事情
比如自动帮你抢红包
有些软件不是有签到活动么
这些傻瓜式的操作
能不能让手机自动签到呢?
自动帮你叫外卖
自动帮你打电话
等等
还有
对于手机上的一些比较难以通过抓包获取的数据
想不想像 selenium 那样轻松获取?
之前小帅b就给大家介绍了 selenium
python爬虫09 | 上来,自己动!这就是 selenium 的牛逼之处
可以模拟人类自动操作浏览器上的网页
我们还使用它爬取了
“鸡你太美”
python爬虫11 | 带你爬取b站上的NBA形象大使蔡徐坤和他的球友们
相信你已经体验到 selenium 的魅力了
对于一些复杂的 PC 端的网页爬取
它就是个利器
不过
对于手机上的一些稍微复杂点的 APP 数据
selenium 就显得有点无能为力了
那么
有没有像 selenium 这样的框架
可以模拟人类自动操作手机上的 APP 呢
答案是肯定的
那就是
Appium
如何让它来自动操作我们的手机呢
那么
接下来就是
学习 python 的正确姿势
为什么说 Appium 牛逼呢
说 4 点足以
1、他是开源的手机端自动测试框架
2、selenium可以做的 Appium 都可以做,selenium不可以做的Appium 依然可以做,它能够支持 Android、iOS、windows 系统的原生 APP 进行自动操作
3、它可以支持不同的语言写脚本,比如我们的 Python,还有Java、JavaScript 等
4、以前你想要爬取 App 的数据的时,对于较难抓取的数据,你还需要对 App 进行反编译,很麻烦,但是 Appium 就不需要这么麻烦
那 Appium 是怎么玩的呢
你可以把 Appium 当做是一个服务器
我们将我们写的控制操作 APP 的 python 代码
扔给 Appium
Appium 得到了请求,看到你跟它说要怎么去操作 APP
它就乖乖的听你话去操作 APP 了
我们在使用 Appium 之前
我们需要安装相关的环境才可以使用
由于 Android 开源又好用,又有虚拟机可以玩
所以我们要的就是自动操作 Android 手机
具体来说
我们需要安装以下环境
真香警告
Appium 虽然比 selenium 对环境的要求相对复杂一丢,但是相信我,搞定之后你绝对会体验到 Appium 的魅力,接下来要说的内容相对干货,你需要拿出点时间,然后跟着 小帅b 一步一步装起来,如果你之前没接触相关的环境安装,可能在安装过程中你会说几次脏话,没关系,"挖槽","TMD" 完之后,都给我安装好以下内容。
1、node.js 和 npm
Appium需要
2、JDK
java 环境,Android需要这个环境
3、Android SDK
Android强大的开发工具包
4、Android虚拟机
可选,如果你用你的真鸡也可以的,用 usb 插入电脑就行
5、Appium
我们的主角
6、Appium-Python-Client
python客户端,用来连接 Appium
7、Python
python相信你早已经安装了,还没有安装的是猪吧?
那么接下来
小帅b教你一步一步地安装起来
不同的操作系统安装方式可能有些许不同
但都差不多也就那会事
1、安装node和npm
你可以到以下链接去下载 node 安装包
https://nodejs.org/zh-cn/download/
然后一顿安装
windows安装的时候记得勾选 Add to path (添加到环境变量)
如果你和小帅b一样用 ubuntu 这种类 Unix 系统的话输个命令就行
sudo apt-get updatesudo apt-get install nodejs
然后你输入命令 node -v
如果显示版本号就说明你成功安装 node 了
xiaoshuaib@xiaoshuaib:~$ node -vv10.15.3
安装 node 过程中同时也安装了 npm 了
输入 npm -v 有显示版本好的话说明你安装好了 npm
xiaoshuaib@xiaoshuaib:~$ npm -v6.4.1
2、安装JDK
你可以到以下链接去下载 jdk
https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html
根据你的系统自行选择相应的 jdk
安装完成之后记得配置好 Java 环境变量
如何配置 jdk 环境变量就不在这里说了
因为不同的系统配置方式不同
你可以自行 Google
在你的终端输入 javac ,如果你得到如下的东西说明你成功安装好 jdk 和 配置好环境了
xiaoshuaib@xiaoshuaib:~$ javacUsage: javac <options> <source files>where possible options include: -g Generate all debugging info -g:none Generate no debugging info -g:{lines,vars,source} Generate only some debugging info -nowarn Generate no warnings -verbose Output messages about what the compiler is doing -deprecation Output source locations where deprecated APIs are used -classpath <path> Specify where to find user class files and annotation processors -cp <path> Specify where to find user class files and annotation processors -sourcepath <path> Specify where to find input source files -bootclasspath <path> Override location of bootstrap class files -extdirs <dirs> Override location of installed extensions -endorseddirs <dirs> Override location of endorsed standards path -proc:{none,only} Control whether annotation processing and/or compilation is done....
3、安装Android SDK
有些小伙伴可能之前没开发过 Android
不过没关系
Android SDK 是 Android 开发的工具包
下载方式和 JDK 类似
可以到以下链接去下载 sdk
https://developer.android.com/studio#downloads
如果你打不开这个链接的话
可以用镜像链接
http://www.android-studio.org/index.php/download/hisversion
下载完之后就一顿解压
解压完之后打开 sdkmanager
windows的话有界面
直接选择一个 Android 版本
然后你点击 install package 就可以了
或者你也可以像 Linux 一样
解压完之后
进入目录中的 /tools/bin
输入以下命令安装最新的工具
xiaoshuaib@xiaoshuaib:~/android/tools/bin$ ./sdkmanager "platform-tools" "platforms;android-28"
接着配置一下环境变量
ubuntu 的话可以这样配
打开 profile
sudo vim /etc/profile
添加你安装的sdk的目录
export ANDROID_HOME=/home/xiaoshuaib/androidexport PATH=$PATH:${ANDROID_HOME}/toolsexport PATH=$PATH:${ANDROID_HOME}/platform-tools
然后设置生效后重启一下
source /etc/profile
windows配置环境变量的话
也是这个道理
在你的电脑--属性--高级--环境变量
新建一个变量 ANDROID_HOME
值就是你刚刚解压下来的 Android 目录
然后在你的 path 中添加
${ANDROID_HOME}/tools;${ANDROID_HOME}/platform-tools
接着
在命令行输入 adb shell
如果你出现和小帅b以下这样的就说明你配置对了
xiaoshuaib@xiaoshuaib:~$ adb shell* daemon not running; starting now at tcp:5037* daemon started successfully
4、安装 android 虚拟机
其实你有真鸡的话不用安装也可以
安装虚拟机你可以到以下链接下载
https://www.genymotion.com/download
想当年小帅b在玩 Android 开发的时候就经常用 genymotion
速度相对来说快了不少
打开虚拟鸡或者用你的真鸡连接电脑(记得打开usb调试)
然后输入 adb devices
如果你像小帅b一样列出你现在的 Android 手机
xiaoshuaib@xiaoshuaib:~$ adb devicesList of devices attached88CKBM622PAM device
那么就说明是正确的啦
5、安装 Appium
第一种安装方式
使用命令行用 npm 安装 Appium
npm install -g appium
ubuntu需要权限的话可以使用如下命令
sudo npm install -g appium --unsafe-perm=true --allow-root
第二种安装方式
你也可以到以下链接直接下载安装包
https://github.com/appium/appium-desktop/releases
安装完之后输入命令 appium
如果你和小帅b这样的就说明成功安装 Appium了
xiaoshuaib@xiaoshuaib:~$ appium[Appium] Welcome to Appium v1.12.1[Appium] Appium REST http interface listener started on 0.0.0.0:4723
6、Appium-Python-Client
pip install Appium-Python-Client
OK
那么到现在我们就把该装的装完了
酸爽~
我们可以来安装以下 appium-doctor 来检测一下我们安装的环境是否都可以了
npm install -g appium-doctor
安装完之后输入 appium-doctor
如果你也出现这样的
congratulation
你已经搞定所需环境啦
事不宜迟
赶紧整个小例子试试水先
我们就让它自动打开手机的微信 APP 吧
确保手机连接到电脑
xiaoshuaib@xiaoshuaib:~$ adb devicesList of devices attached88CKBM622PAM device
开启 Appium
xiaoshuaib@xiaoshuaib:~$ appium[Appium] Welcome to Appium v1.12.1[Appium] Appium REST http interface listener started on 0.0.0.0:4723
写个python
# coding=utf-8
from appium import webdriver
desired_caps = { 'platformName': 'Android', 'deviceName': '88CKBM622PAM', 'platformVersion': '5.1', 'appPackage': 'com.tencent.mm', 'appActivity': 'com.tencent.mm.ui.LauncherUI' }
driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub', desired_caps)
运行python之后
Appium 开始执行
看看你的手机
自动打开了!
cool~
ok
本篇主要让你知道怎么安装这些所需要的环境
可能你现在有点疑问
怎么知道微信的包名的
怎么知道微信的启动页面的
python代码如何写自动操作的
别急
你先把环境安装好
下一篇
小帅b将带你使用 Appium 来爬取 APP 上的数据
期待就好了
帅b老仙
法力无边
点赞关注一波
给小帅b发点功
近接到公司派的1个任务,让我爬取腾讯新闻app的热点榜
此热点新闻每10分钟更新1次,所以需要每隔10分钟爬取一次,然后保存下来。最简单的办法就是找电脑网页版,但是翻遍所有网站也没有找到这个接口,所以只好乖乖地从手机端爬了。
手机端数据接口参数分析是一件很难的事,我们可以绕过此过程,在APP数据交换的过程通过mitmproxy工具将返回的数据拦截下来。
这种方法的优点就是简便,分析接口参数,缺点是需要一台手机,不停地进行数据请求,速度相对较慢,但是对此次爬取来说足够了。为了节省1部手机,我想到了爬取手机模拟器端APP数据。
下面一起来看看我是怎么实现的吧
1.安装charles
Charles是一款代理服务器,通过过将自己设置成系统(电脑或者浏览器)的网络访问代理服务器,然后截取请求和请求结果达到分析抓包的目的。
①下载:https://www.charlesproxy.com/latest-release/download.do
下载完成后,点击安装,一路默认安装即可。
②设置代理
③安装证书
依次点击帮助——ssl代理——安装charles root证书
点击确定,电脑端证书就安装完成了
再依次点击帮助——ssl代理——在移动设备或远程浏览器上安装charles root证书
然后在模拟器浏览器中输入chls.pro/ssl,会自动下载手机端证书并安装。
2.安装appium
依次安装Adroid SDK、JAVA和appium客户端即可
3.安装mitmproxy
mitmproxy是一个支持http和https的抓包程序,类似Fiddler、Cha,只不过它可以对接python1脚本。
①只需执行如下命令即可安装:Pip install mitmproxy
②证书配置:在命令行输入mitmdump,然后在用户目录找到CA证书
双击mitmproxy-ca-cert.p12,在电脑上安装证书,然后将mitmproxy-ca-cert.pem发送到模拟器上,在手机设置-安全-从SD卡安装,选中此文件,安装即可。
4.安装夜神手机模拟器
安装地址
http://soft.onlinedown.net/soft/987318.html
一直默认安装即可
首先设置模拟手机代理ip,长按WireSSID,点击修改网络
设置好代理ip,保存即可。
打开模拟器腾讯新闻APP,进入今日热搜界面,然后在charles中找到该接口
它的url信息为
将该url在浏览器中打开
该url看起来是比较复杂的,但是今天我们不去分析它,按照上述所说的方法抓取数据。
第三步:用mitmdump抓包,保存热点新闻数据
首先设置代理ip,步骤同第二步,不过要把端口设置为8080
然后编写python脚本抓取第二步的接口
有两种数据流方式,一种是相应数据response,一种是请求数据request,本次用response,flow代表数据流
为了筛选新闻热点的数据流,根据第二步url的固定部分判断该数据流是否是我们要的url,如果是,则保存flow.request.text,用json解析保存到表格内,至此脚本编写完毕。在脚本所在路径输入mitmdump -s demo.py
然后在模拟器中打开腾讯新闻今日热搜界面
再看看表格中保存的数据
第四步:用appium控制手机模拟器定时启动腾讯新闻APP
第三步中是手动点击查看热点榜,因为此热点信息是10分钟更更新1次
所以我们需要用appium写个脚本,模拟循环进行此过程,同时mitmproxy脚本会截取最新的数据
但是现在还是没法打开模拟器里的腾讯新闻app,因为模拟器还未连接到主机,还需要在夜神模拟器所在安装目录bin路径下运行以下代码
再检测一下
小结:app的爬取是爬虫最难的部分,涉及很多复杂的逆向分析过程,这次只是借助模拟器介绍了1个非常简单的app爬取过程,有兴趣的朋友可以借此深入学习一下。
1 模拟丁香园的高保真原型
在一般的开发工作之前,我们通常会设计产品原型,大部分为axure绘制的线框图作为产品的PRD文档,供UI和开发进行前期工作,但是有的时候客户、领导想在开发之前,看到产品的概貌,就必须做产品的高保真原型进行模拟,这时如果做出来的原型能运行在手机端,那再好不过,如图1(注:上图是仿照丁香园的家庭用药,做的一个高保真原型,算是免费给丁香园打广告,是不是考虑给我点广告费?哈哈)。
原型制作软件有挺多,不过个人使用之后,最后还是依然坚持使用Axure,优点颇多,也可能是先入为主,这个教程Axure也是必须软件之一,适配为iphone5s
1、首选是制作高保真原型,如图2:
图2 高保真的原型图
(注:高保真原型最好不要用太多内部框架嵌套,加载速度有点慢,还是用动态面板慢慢做,层级多了要有耐心)
iOS的屏幕尺寸目前是有限的几种,原型尺寸要和其一致。比如iphone5s视网膜下像素为640*1136(The default full screen size of the iPhone 5 is 320 x 568 px (w x h).就是说320*568已经可以铺满全屏,不过,由于Axure导出的原型在iOS上处理status bar时有问题,需要在高度上减去status bar的高度20,就为320*548,所以保证原型的高宽为320和548,如图3整体高度为548px:
图3 高宽为320*548
2、F8进行生成设置,设置如下图4:
图4 配置设置
按照上图,设置参数(注:不过闪屏页面一直无法出现,这个问题我也没得到解决,有解决的可以回复我)
3、生成原型文件,上传到axureshare或者放置在EasyWebSevr的根目录下,用本机IP替代电脑名称,获得完整路径。(不清楚的点击上期内容如何用EasyWebSvr搭建axure本地环境)
4、复制生成的html中原型链接,选择without Sitemap,如图5:
图5 复制链接
5、在safari中粘贴链接,并打开,已经可以看到和屏幕宽度的界面,并添加到主屏幕,如图6:。
图6 添加到主屏幕
6、可以通过桌面的快捷icon,进入原型,这个时候已经适配了手机,躺着桌面的icon,丝毫不会让人看得出是原型,下图7:
图7 test桌面icon快捷启动
本文作者:某人某年; 转载自:简书
*请认真填写需求信息,我们会在24小时内与您取得联系。