Crawler--08: Crawlen von mobilen Daten
移动端环境的搭建
以下相关知识包含着安卓app开发,请谨慎使用Android studio。
一、移动端数据的简介
1、移动端爬取数据的背景
- 随着互联网的发展,数据不仅仅只是存在于PC端。移动端的数据在近几年的占比以及发展趋势呈现几何级增长。对于做数据分析、用户画像、市场调研来说仅仅参考PC端的数据是远远不够的。那么对移动端的数据爬取就显得尤为重要。
2、获取移动端数据的作用
- 数据分析
- 用户画像
- 商业竞争
- 统计系统
3、UIAutomator的介绍
- UIAutomator是google提供的用来做安卓自动化测试的一个java库。
4、UIAutomator的缺陷
- 测试脚本只能用java语言开发
- 测试脚本要打包成jar包或者apk包上传到设备才能实现
5、UIAutomato2的优势
- 在PC端来编写脚本(相当于发送HTTP请求到移动设备的server端)。
- 移动设备通过wifi或usb接收到了PC上发来的HTTP请求,执行定制的操作。
- 在移动设备上安装atx-agent(守护进程),随后atx-agent启动ui2服务(默认7912端口)进行监听。
6、android四大组件(拓展)
- Activity:单独的屏幕view(窗口)
- AActivity之间是通过intent进行通信
- Service:服务
- 在后台完成一些操作
- content procider :内容提供者
- 下载第三方的app之后,是否可以访问手机内部信息
- 使一个应用程序指定数据,提供给其他的程序
- boadcast cereicer:广播
- 闹钟、手电。。。。。
二、adb的简介与使用
1、adb的三个部分
- Adb又称Android调试桥,用于通过电脑端与模拟器或者是设备之间的交互的一个工具。
adb client
命令行程序‘adb’用于从shell或脚本中运行adb命令。adb server
是运行在PC的的一个后台程序。- Adbd 程序
adbd
作为一个后台进程在Android设备或模拟器系统中运行。
2、adb的作用
- 安装卸载apk文件
- 移动设备和PC之间拷贝文件
- 查看设备上安装的应用信息
- 文件管理
- 按键操作
3、adb的使用
- 将adb的bin目录添加到环境变量当中
**注意:**adb是安卓手机或者模拟器自带的,添加到电脑环境变量的bin目录是你的模拟器bin目录。
- adb命令
adb devices
查看链接的移动设备
adb kill-server
关闭链接的移动设备
adb install apk
文件路径 安装app应用
adb shell pm list packages
查看应用包名
adb uninstall
应用包名 卸载应用
4、adb的安装
-
只需要安装一个模拟器,就会在PC端安装好adb工具
-
E:\夜神模拟器\Nox\bin 在这个bin目录当中就有已经安装好的adb
-
注意:将这个bin目录添加到path环境变量中
-
-
配置移动设备
- 1、安装夜深模拟器
- 2、打开夜深多开器
- 3、模拟器打钩
- 4、调整系统设置(选择手机版、分辨路、显卡渲染模式)
如果启动模拟器是黑屏则切换成极速模式 - 5、确定模拟器打开了开发者选项
三、UIAutomator2快速入门
python -m uiautomator2 init
初始化移动设备- Uiautomator-server: 就是谷歌原声的 uiautomator。
- Atx-agent: uiautomator的守护进程
- minicap和minitouch 中2个包是atx-agent增加远程控制功能的依赖
1、UIAutomator2控制移动设备
- UIAutomator2的连接
- 通过WiFi :
u2.connect_wifi('172.17.100.15')
- 通过USB:
u2.connect_usb('127.0.0.1:62025')
- 通过adb WiFi:
u2.connect_adb_wifi('172.17.100.15:5555')
- 通过WiFi :
import uiautomator2 as u2
'''
通过WIFI链接设备 手机的ip地址:172.16.38.15
'''
# USB链接
d = u2.connect_usb('127.0.0.1:62001')
print(d.info)
# WIFI链接
# d = u2.connect_wifi('172.16.38.15')
# print(d.info)
2、UIAutomato2启动手机app
- 确认设备
adb devices
- 进行u2项目的初始化
python -m uiautomator2 init
- 对移动端进行连接
import uiautomator2 as u253
# 发起链接
d = u2.connect_usb('127.0.0.1:62001')
- 启动app
d.app_start('com.tal.kaoyan')
- 关闭app
d.app_stop('com.tal.kaoyan')
- 查看sercvice服务
print(d.service('uiautomator').running())
- 开启服务
d.service('uiautomator').start()
- 关闭服务
d.service('uiautomator').stop()
- 查看分辨率
print(d.window_size())
- 安装app
# 通过file path
d.app_install(data=r'C:\Users\王佳欣的windows\Desktop\122_a9251ed258de96faefd5f984054f71e4.apk')
# 通过url
d.app_install(data='https://ip2225176868.out.azhimalayanvh.com/fs08/2021/04/20/8/122_a9251ed258de96faefd5f984054f71e4.apk?yingid=wdj_web&fname=%E7%99%BE%E5%BA%A6%E5%9C%B0%E5%9B%BE&productid=2011&pos=wdj_web%2Fdetail_normal_dl%2F0&appid=29805&packageid=601036592&apprd=29805&iconUrl=https%3A%2F%2Fptop.only.wip.la%3A443%2Fhttp%2Fandroid-artworks.25pp.com%2Ffs08%2F2021%2F04%2F22%2F2%2F110_37fd4ff774431c55895056c1b4b1b9b7_con.png&pkg=com.baidu.BaiduMap&did=a930de903f16cd1ba8ac8c0693b8de58&vcode=1055&md5=2f82f8a88d48577264018df8937b1f24&ali_redirect_domain=alissl.ucdl.pp.uc.cn&ali_redirect_ex_ftag=1e920e722d7c06b691fdd153e1f3eef86bf74fa18128f423&ali_redirect_ex_tmining_ts=1619084061&ali_redirect_ex_tmining_expire=3600&ali_redirect_ex_hot=100')
- 启动app,需要知道app的包名
d.app_start('com.baidu.BaiduMap')
- 获取前台运行的app信息
print(d.app_current())
- 清楚app缓存
d.app_clear('com.baidu.BaiduMap')
- 卸载app
d.app_uninstall('包名')
- 获取所有app的信息
d.app_list()
- 停止所有的app
d.app_stop_all()
- 卸载所有的app
d.app_uninstall_all()
四、weditor的基本操作
1、什么是Activity?
- Activity是Android系统中的四大组件之一,可以用于显示View。Activity是一个与用户交互的系统模块
An activity is a single, focused thing that the user can do. Almost all activities interact with the user, so the Activity class takes care of creating a window for you in which you can place your UI with setContentView(View).
总结:
实现一个登录的需求
1 线创建的android项目 给app起一个名字 包名
2 实现MainActivity的布局(activity_main xml文件 TextView EditText Button)
3 创建了另一个java.class文件 实现另外的一个Activity (LoginActivity)
- 创建了一个布局文件 xml activity_login TextView
- LoginActivity 关联布局 setContentView 关联布局
- 清单文件中要配置这个LoginActivity
4 MainActivity中
- 找控件
- 设置点击事件
- 设置控件跳转传值
5 LoginActivity中
- 找控件
- 获取数据
- 设置数据
1 Java基础(Java语法 1.5 - 2个月) 2 Android基础(四大组件的学习 UI布局 1个月)
2、Activity的控件
- TextView 显示文字
- EditText 输入框
- ImageView 显示图片
- Button 按钮
- CheckBox 复选框
- RadioButton 单选按钮
3、weditor的使用
1. 安装
pip install weditor -i https://pypi.douban.com/simple
pip install weditor
- 在命令行确认是否链接
adb dervices
- 在命令行内输入
weditor
,开启服务。
2. weditor的界面
- 移动设备选择区
- 控件属性区域
- 代码展示区
- 层级关系和结果展示区域
3. Uiselector与weditor的使用
控件的定位方式
- UISelector
- 表示的是一种搜索标准。在当前显示界面上来查询、获取具体元素的句柄
- xpath
android的 基本布局
- 线性布局:
linearLayout
- 相对布局:
RelativelLayout
- 帧布局(覆盖布局):
FrameLayout
- 表格布局:
TableLayout
- 绝对布局:
AbsoluteLayout
控件的属性
Column 1 | Column 2 | Column 1 | Column 2 |
---|---|---|---|
index | int | 索引 | 0 |
instance | rint | 实例 | 5 |
class | Sting | 类名 | android.widget.TextView |
package | Sting | 包名 | com.tl.kaoyan |
check | boolean | 控件勾选状态 | false/true |
enable/clickable | boolean | 控件可点击 | false/true |
focused/focusable | boolean | 焦点 | false/true |
Scrollable | boolean | 滚动条 | false/true |
Long-clickable | boolean | 长按 | false/true |
selected | boolean | 选择状态 | false/true |
文本定位方式
- Text 全文本匹配
import uiautomator2 as u2
import time
d = u2.connect_usb('127.0.0.1:62001')
d.app_start('com.tal.kaoyan')
time.sleep(2)
# 全文本匹配
d(text="密码登录").click()
- textContains 文本包含
import uiautomator2 as u2
import time
d = u2.connect_usb('127.0.0.1:62001')
d.app_start('com.tal.kaoyan')
time.sleep(2)
d(textContains='密码'