移动端Python爬虫--2

973 阅读8分钟

1 u2自动化抓取工具介绍

1.1什么是Uiautomator

Uiautomator是Google提供的用来做安卓自动化测试的一个java库,基于Accessibility服务

辅助功能(AccessibilityService)是Android系统提供的一种服务,本身是继承Service类的,这个服务提供增强的用户界面,旨在帮助残障人士或者暂时无法与设备充分交互的人们

我们可以借助 AccessibilityService,可以实现对页面的监听及模拟点击控制等自动化操作

1.2 缺点

1 测试脚本只能使用java语言

2 测试脚本要打包成jar或者apk包上传到设备上才能运行。

1.3 Uiautomator2的诞生

希望能够用Python编写代码逻辑

希望能够在电脑上运行的时候就控制手机

在手机上运行了一个http rpc服务,将uiautomator中的功能继承进来,然后再将这些http接口封装成Python库

1.4 Uiaitomator2的优点

1 环境搭建便捷

2 UI空间识别有专业工具(weditor),可视化好

3 UI自动化编写采用Python,学习成本低

4 UI自动化脚本运行稳定

5 文档是中文的

1.5 Uiautomator2 项目地址

github.com/openatx/uia…

1.6 Uiautomator2支持的环境

1 Android本本 4.4+

2 Python 3.6+ (3.8.0 不支持,3.8.2可以)

1.7 开发环境

开发环境:windows10

运行环境:ubuntu 18.04

虚拟机:VMware® Workstation 15 Pro

SSH:SecureCrt Version 7.0.0(绿色软件安装包)

IDE:PyCharm 2019.3.2 (Profession Edition)

Python版本: Python3.6.9

1.8 开发环境注意事项

不要使用virtualbox虚拟机

2 u2通信流程介绍

2.1 通信流程

在项目初始化的时候,pc端会向移动设备通过Wifi或者usb或者adb wifi发送一些文件

这些文件会包含Uiautomator-server,Atx-agent,Minicap,,minitouch

这个时候在移动设备端Atx-agent会启动uiautomator的服务,默认端口号是7912

运行脚本,并向系统设备发送http请求

移动设备上运行并封装了uiautomator2 的http服务,解析受到的请求,并转化成uiautomator2 的代码

3.png

2.2 在启动项目之后

1 在移动设备上安装atx-agent(守护进程),随后atx-agent启动uiautomator服务(默认端口7912)进行监听

2 在pc上编写测试脚本并执行,(相当于发送http请求到移动设备的server端)

3 移动设备通过wifi或者usb接收到pc端发送来的http请求,执行制定的操作

2.3 请求流程

import uiautomator2 as u2
# 已经进行过初始化了,ip是手机在局域网中的地址
d = u2.conntec_wifi("192.168.18.200")
# 打开debug模式
d.debug = True
# 查看简单的设备信息
print(d.info)

"""
执行结果
curl -X post -d '{"jsonrpc":"2.0","id":"dasfasfessddfsf"}...'
curl是linux中发送请求的命令
请求方式是pose
请求的参数是一个json类型的参数
id是请求方法和当前时间戳的md5值
method:deviceInfo


"""

2.4 如何查看设备上的端口号

adb shell

ps | grep atx  #查看进程

busybox netstat  -pt | grep 7956  # 就可以看到端口号了

3 u2 自动化抓取开发环境搭建

资料下载 pan.baidu.com/s/10j7J6-6g…

提取码:i0w5

1 vmware Workstation

打开WMware Workstation --> 点击文件--> 点击打开 --> 找到Ubuntu 64 位.ovf这个文件,确定-->点击浏览-->新建文件夹D:\process\vm\ubuntu-->点击导入

如果导入过程失败,点击不再显示此消息,因为可能是目录中有中文字符的原因-->点击重试

如果ubuntu中wifi网络连接失败,就在本地计算机中打开--控制面板\网络和 Internet\网络连接

4.png

右击属性-->点击共享,都勾选上,选择家庭网络连接

如果还是连接不上网络,请查看这篇博文

blog.csdn.net/b_bigstar/a…

2 secureCRT

安装就好

5.png

6.png

其余跟xshell一样

3 ubuntu中python环境的安装

# 先安装一个python环境,3.6.9
pip3 install virtualenv -i https://pypi.doubanio.com/simple
    
# 在一个目录中
python3 -m virtualenv venv

# 查看python环境的第三方包
pip3 freeze

# 使环境生效
source venv/bin/activate

# 要是发现virtualenv安装失败,就先卸载,然后
pip3 install virtualenv==20.0.23 -i https://pypi.douban.com/simple

4 pycharm和ubuntu打通

在pycharm中编码,使用ubuntu的环境,代码自动同步到ubuntu环境中

步骤

File-->settings-->Project:项目名-->Python interpreter-->Python Interpreter最右边的小齿轮
点击add-->SSH Interpreter-->Existing server environment-->点击最右方三个点

然后点击Next

7.png

8.png 然后点击Finish

这一番操作之后,你在本地的任何编码操作就会在linu系统中同步的,就可以使用远程的python环境,代码也能同步到linux环境中了

5 adb

Android 调试桥(adb)

	adb client:命令行程序 “adb” 用于从shell或脚本中运行adb命令

​	adb server: ADB Server 是运行在pc上的一个后台进程

​	adbd:程序 “adbd”作为一个后台进程在Android设备或者模拟器系统中运行

adb能用来做什么

安装卸载apk
移动设备pc之间拷贝文件
查看设备上安装的应用信息
文件管理
按键操作

常见的adb应用

各种刷机工具

各种手机root工具

windows安装adb

首先在电脑上下载夜神模拟器,找到安装路径:D:\process\Nox\bin,添加到环境变量

点开夜神多开器,点击每一个模拟器的设置,将启动设置改成手机版

9.png

不建议使用的手机品牌

华为系列,荣耀系列

建议使用的手机品牌

小米,oppo等

对于手机的设置,打开设置,多次敲击版本号,出来之后点击开发者选项,打开usb调试

adb向模拟器中操作

# 安装apk操作
adb install 计算机中需要安装apk的全路径

# 查看所有安装软件
adb shell pm list packages

# 卸载apk
adb uninstall com.tal.kaoyan  # 第三个参数就是查看所有软件中的一个,这里卸载了考研帮

ubuntu中安装adb

10.png

将上面文件拷贝到linux系统之后
sudo cp adb /usr/local/sbin/
sudo cp fastboot /usr/local/sbin/
sudo unzip -d /usr/local/sbin/ platform-tools_r29.0.6-linux.zip
# 加可执行权限
sudo chmod +x /usr/local/sbin/platform-tools/adb /usr/local/sbin/adb
sudo chmod +x /usr/local/sbin/platform-tools/fastboot /usr/local/sbin/fastboot

# 添加环境变量
sudo vim /etc/profile
在文件底部输入
export PATH=/usr/local/sbin:$PATH

如何在ubuntu中链接windows中的移动设备呢

adb devices
# 将链接方式改成tcp链接的方式,方便ubuntu系统连接
adb tcpip 5555

打开夜神模拟器,点击设置,点击手机与网络,手机型号最好设置为oppo的,勾选开启网络桥接模式

11.png

如果设置失败就重新设置就好

如果模拟器的wifi一直连不上,就参考下面连接,换网络并删除驱动

bbs.yeshen.com/forum.php?m…

最后实在好不了就使用手机的wifi进行连接,但是连接之前,一定要将更改适配器选项中将其他连接方式的属性中的VirtualBox NDiS6删除掉

12.png

我们在ubuntu中输入

adb connection 192.168.3.135

13.png

当我们再次输入adb devices的时候就能看到我们的设备了

再来安装apk

abd install kaoyanbang_3.5.6.272.apk

# 然后来查看所有包
adb shell pm list packages

# 卸载包
adb uninstall com.tal.kaoyan

6 连接真实移动设备并安装apk-windows环境

插上手机,安装驱动,打开开发者模式,点开usb调试

!(E:\IMOOC\img\14.png)

在真实的移动设备中安装apk

adb install apk路径

14.png

要是在安装过程中失败,就点击开发者选项中的撤销USB调试授权,然后重新连接手机,安装驱动

在真实的移动设备中卸载apk

adb shell pm list packages
adb uninstall com.tal.kaoyan

7 在ununtu系统中链接真实移动设备

连接上手机之后,选择连接到虚拟机

15.png

在虚拟机中可以看到设备

16.png

然后再我们的命令行中就可以看见我们的设备

17.png

ubuntu系统向真实移动设备中安装apk

adb install kaoyanbang.apk
# 卸载apk
adn uninstall com.tal.kaoyan

4 u2项目初始化

如何安装u2自动化项目包以及如何控制我们的移动设备

pip install uiautomator2 -i https://pypi.doubanio.com/simple

对移动设备进行初始化,其实就是在移动设备中安装agent

python -m uiautomator2 init

我的华为手机在虚拟机中使用上述命令会报错,所以在我的本地运行就成功了

18.png

19.png

5 u2连接移动设备的三种方式

通过手机wifi连接

当前网络环境是在局域网中

import uiautomator2 as u2
d = u2.connect_wifi('192.168.1.7')
print(d.info)

通过usb连接

# 连接的时候参数是在命令行界面中输入adb devices出现的手机序列号
import uiautomator2 as u2
d = u2.connect_usb("XMKDU19403004799")
print(d.info)

通过adb_wifi连接

也就是adb tcp 的ip模式,注意要丢掉端口叫

首先在命令行中输入

adb tcpip 5555

然后再代码中输入

import uiautomator2 as u2
d = u2.connect_adb_wifi('192.168.1.7:5555')
print(d.info)

获取详细的设备信息

d.device_info

启动手机上的app

首先,获取app的包名

在夜神模拟器的安装目录中,有一个aapt.exe的文件
在该文件目录中启动cmd,执行
aapt dump badging apk的路径
执行完之后就可看到package: name="com.ss.android.ugc.aweme"
将name后面的值获取出来

启动app

# 开启
a.app_start('com.ss.android.ugc.aweme')
# 运行
time.sleep(5)
# 退出
d.app_stop('com.ss.android.ugc.aweme')

在ubuntu中安装aapt

sudo apt-get install aapt

我们在ubuntu中向手机中安装app的时候,如果出现Performing Streamed Install,只要在windows中安装即可

断开虚拟机的手机连接

虚拟机>可移动设备