利用appium自动控制移动设备并提取数据

学习目标

了解 appium-python-client模块定位元素以及提取其文本内容的方法

了解 appium-python-client模块控制滑动动作的方法

以控制抖音app滑动并获取抖音短视频发布者昵称和点赞数等信息为例

2.1 安装appium-python-client模块并启动已安装好的环境

2.1.1 安装appium-python-client模块

在window的虚拟环境下执行pip install appium-python-client

2.1.2 启动夜神模拟器,进入夜神模拟器所在的安装路径的bin目录下,进入cmd终端,使用adb命令建立adb server和模拟器的连接

adb devices

C:\Program Files (x86)\Nox\bin>adb devices

List of devices attached

* daemon not running; starting now at tcp:5037

* daemon started successfully

nox_adb.exe connect 127.0.0.1:62001

C:\Program Files (x86)\Nox\bin>nox_adb.exe connect 127.0.0.1:62001

already connected to 127.0.0.1:62001

adb devices

C:\Program Files (x86)\Nox\bin>adb devices

List of devices attached

127.0.0.1:62001 device

2.1.3 启动appium-desktop,点击start server启动appium服务

[Appium] Welcome to Appium v1.10.0

[Appium] Appium REST http interface listener started on 0.0.0.0:4723

2.1.4 利用上一小节所学习的内容获取Desired Capabilities参数

获取模拟设备的型号

打开设置——关于平板电脑

查看型号,获取模拟设备的型号

获取app包名称 以及 app进程名

打开模拟器中的抖音短视频app

在adb连接正确的情况下,在夜神模拟器安装目录的bin目录下的cmd中输入adb shell

进入adb shell后输入 dumpsys activity | grep mFocusedActivity

``com.ss.android.ugc.aweme`就是app包名

.main.MainActivity就是进程名 注意前边有个点.

2.2 初始化以及获取移动设备分辨率

完成代码如下,并运行代码查看效果:如果模拟器中抖音app被启动,并打印出模拟设备的分辨率则成功

from appium import webdriver

# 初始化配置,设置Desired Capabilities参数

desired_caps = {

'platformName': 'Android',

'deviceName': 'SM-G955F',

'appPackage': 'com.ss.android.ugc.aweme',

'appActivity': '.main.MainActivity'

}

# 指定Appium Server

server = 'http://localhost:4723/wd/hub'

# 新建一个driver

driver = webdriver.Remote(server, desired_caps)

# 获取模拟器/手机的分辨率(px)

width = driver.get_window_size()['width']

height = driver.get_window_size()['height']

print(width, height)

移动设备分辨率

driver.get_window_size()['width']

driver.get_window_size()['height']

2.3 定位元素以及提取文本的方法

2.3.1 点击appium desktop右上角的放大镜图标

如图填写配置,并点击start session

2.3.2 定位界面的使用方法如下图所示

2.3.3 点击短视频的作者名字,查看并获取该元素的id

2.3.4 在python使用代码通过元素id获取该元素的文本内容

实例化appium driver对象后添加如下代码,运行并查看效果

# 获取视频的各种信息:使用appium desktop定位元素

print(driver.find_element_by_id('bc').text) # 发布者名字

print(driver.find_element_by_id('al9').text) # 点赞数

print(driver.find_element_by_id('al_').text) # 留言数

print(driver.find_element_by_id('a23').text) # 视频名字,可能不存在,报错

定位元素及获取其文本内容的方法

driver.find_element_by_id(元素的id).text

driver.find_element_by_xpath(定位元素的xpath规则).text

2.3.5 抖音app滑动 Demo

from appium import webdriver

import time

# 初始化配置,设置Desired Capabilities参数

desired_caps = {

'platformName': 'Android',

'deviceName': 'HUAWEI MLA-L12',

'appPackage': 'com.ss.android.ugc.aweme',

'appActivity': '.main.MainActivity'

}

# 指定Appium Server

server = 'http://localhost:4723/wd/hub'

# 新建一个driver

driver = webdriver.Remote(server, desired_caps)

# 获取模拟器/手机的分辨率(px)

width = driver.get_window_size()['width']

height = driver.get_window_size()['height']

print(width, height)

time.sleep(15)

# 获取视频的各种信息:使用appium desktop定位元素

print(driver.find_element_by_id('title').text) # 发布者名字

# print(driver.find_element_by_id('al9').text) # 点赞数

# print(driver.find_element_by_id('al_').text) # 留言数

# print(driver.find_element_by_id('a23').text) # 视频名字,可能不存在,报错

2.4 控制抖音app滑动

2.4.1 appium滑动的函数

从(start_x, start_y)滑动到(end_x, end_y)

driver.swipe(start_x, start_y, end_x, end_y)

2.4.2 控制抖音app滑动的代码实现

start_x = width // 2 # 滑动的起始点的x坐标,屏幕宽度中心点

start_y = height // 3 * 2 # 滑动的起始点的y坐标,屏幕高度从上开始到下三分之二处

distance = height // 2 # y轴滑动距离:屏幕高度一半的距离

end_x = start_x # 滑动的终点的x坐标

end_y = start_y-distance # 滑动的终点的y坐标

# 滑动

driver.swipe(start_x, start_y, end_x, end_y)

2.5 整理并完成自动滑动的代码

import time

from appium import webdriver

class DouyinAction():

"""自动滑动,并获取抖音短视频发布者的id"""

def __init__(self, nums:int=None):

# 初始化配置,设置Desired Capabilities参数

self.desired_caps = {

'platformName': 'Android',

'deviceName': 'SM-G955F',

'appPackage': 'com.ss.android.ugc.aweme',

'appActivity': '.main.MainActivity'

}

# 指定Appium Server

self.server = 'http://localhost:4723/wd/hub'

# 新建一个driver

self.driver = webdriver.Remote(self.server, self.desired_caps)

# 获取模拟器/手机的分辨率(px)

width = self.driver.get_window_size()['width']

height = self.driver.get_window_size()['height']

print(width, height)

# 设置滑动初始坐标和滑动距离

self.start_x = width//2 # 屏幕宽度中心点

self.start_y = height//3*2 # 屏幕高度从上开始到下三分之二处

self.distance = height//2 # 滑动距离:屏幕高度一半的距离

# 设置滑动次数

self.nums = nums

def comments(self):

# app开启之后点击一次屏幕,确保页面的展示

time.sleep(2)

self.driver.tap([(500, 1200)], 500)

def scroll(self):

# 无限滑动

i = 0

while True:

# 模拟滑动

print('滑动ing...')

self.driver.swipe(self.start_x, self.start_y,

self.start_x, self.start_y-self.distance)

time.sleep(1)

self.get_infos() # 获取视频发布者的名字

# 设置延时等待

time.sleep(4)

# 判断是否退出

if self.nums is not None and self.nums == i:

break

i += 1

def get_infos(self):

# 获取视频的各种信息:使用appium desktop定位元素

print(self.driver.find_element_by_id('bc').text) # 发布者名字

print(self.driver.find_element_by_id('al9').text) # 点赞数

print(self.driver.find_element_by_id('al_').text) # 留言数

print(self.driver.find_element_by_id('a23').text) # 视频名字,可能不存在,报错

# # 点击【分享】坐标位置 671,1058

# self.driver.tap([(671, 1058)])

# time.sleep(2)

# # 向左滑动露出 【复制链接】 580,1100 --> 200, 1100

# self.driver.swipe(580,1100, 20, 200, 1100)

# # self.driver.get_screenshot_as_file('./a.png') # 截图

# # 点击【复制链接】 距离右边60 距离底边170 720-60,1280-170

# self.driver.tap([(660, 1110)])

# # self.driver.get_screenshot_as_file('./b.png') # 截图

def main(self):

self.comments() # 点击一次屏幕,确保页面的展示

time.sleep(2)

self.scroll() # 滑动

if __name__ == '__main__':

action = DouyinAction(nums=5)

action.main()

至此,可以参考爬虫5.0课程项目库,使用fiddler等抓包工具,利用appium+mitmproxy+wget等python模块自动获取抖音视频文件

2.6 关于模拟式移动端爬虫的参考阅读

小结

了解 appium-python-client模块定位元素以及提取其文本内容的方法

了解 appium-python-client模块控制滑动动作的方法

appium python 抓包_利用appium自动控制移动设备并抓取数据相关推荐

  1. python手机壁纸_利用Appium Python测试爱壁纸的登录和设置壁纸

    #coding:utf-8#Import the common package importosimportunittestfrom appium importwebdriverfrom time i ...

  2. 群晖python套件包_利用群晖Docker安装ubuntu16.04搭建python网站服务器(部署篇)

    在帖子<利用群晖Docker安装ubuntu16.04搭建python网站服务器(安装篇)(地址:http://www.cirdown.com:81/thread-185-1-1.html)&g ...

  3. fiddler手机模拟器抓包_利用Fiddler对Android模拟器网络请求进行抓包

    粉笔网iPhone端使用的第三方开源库 粉笔网iPhone端使用的第三方开源库 前言 最近有朋友问我粉笔网 iPhone 端使用了哪些第三方的开源库.我在这儿整理了一下,分享给大家. ASIHttpR ...

  4. wireshark 抓包再利用TCP socket发送包里的payload是可以实现登陆的

    用户密码可被批量破解 在用户使用手机端登录时,对数据进行抓包分析. 多次抓包分析后,可得到几个关键TCP数据包. 根据前面逆向编写出的解密算法,使用socket进行数据发包测试: 可以模拟APK进行用 ...

  5. wireshark筛选dhcp包_使用wireshark抓包工具,对DHCP、HTTP、DNS的数据包进行分析

    使用wireshark抓包工具,对DHCP.HTTP.DNS的数据包进行分析 本文标签: 服务器安全 服务器被攻击 网站防护 使用wireshark抓包工具,对DHCP.HTTP.DNS的数据包进行分 ...

  6. https抓包_从Wireshark抓包看HTTPS的加密功能

    近几年,互联网发生着翻天覆地的变化,尤其是我们一直习以为常的HTTP协议,在逐渐的被HTTPS协议所取代,在浏览器.搜索引擎.CA机构.大型互联网企业的共同促进下,互联网迎来了"HTTPS加 ...

  7. tcpdump抓包IP地址,导入wireshark分析?又名《~来抓包吧/ 向着前辈の步伐、Start / ~从零开始の抓包全过程流水账实录/// 成功吧~实验/ ~》

    本文关键字:虚拟机.镜像文件iso.Ubuntu.linux.tcpdump.apt-get.yum命令.lrzsz命令.Xshell.wireshark (不要被英文吓晕了,我只是想列出来假装一下很 ...

  8. 抖音新版抓包方案,绕过sslpinning 直接修改so 抓https数据包

    前言 一般需要抓取https的数据包,只需要电脑安装抓包工具例如fiddler.charles .然后手机上配置代理,保证手机跟电脑在同一网络下,然后手机安装抓包工具的证书,基本都可以抓到https的 ...

  9. python抓取数据包_利用python-pypcap抓取带VLAN标签的数据包方法

    1.背景介绍 在采用通常的socket抓包方式下,操作系统会自动将收到包的VLAN信息剥离,导致上层应用收到的包不会含有VLAN标签信息.而libpcap虽然是基于socket实现抓包,但在收到数据包 ...

最新文章

  1. [微信开发] 开发指南笔记
  2. 动态变量和静态变量的区别,堆和栈的区别
  3. boost::sort模块实现支持不同分布的随机数生成器的测试程序
  4. Batch Norm常用方法
  5. Pixhawk飞控源码目录结构及编译流程分析
  6. mysql错误Please use SHOW DDL to check it, and then recover or rollback it using RECOVER DDL or ROLLBAC
  7. ZOJ 1586 QS Network
  8. JS-[IIFE闭包]
  9. sql in里面可以放多少参数_如何从文本文件读入 SQL 参数
  10. Win7旗舰版系统时间不准确怎么办
  11. 【C/C++】递归算法
  12. mysql忘记密码恢复
  13. 玩转SpringBoot 2 之项目启动篇
  14. 第一课~Django~简介
  15. ordfilt2非线性滤波器
  16. python ftp_Python FTP
  17. hive-2.3.3安装指北
  18. sql server的增删改查语句
  19. 移动前端开发和 Web 前端开发的区别
  20. 数字孪生|数字孪生装备-概念与内涵

热门文章

  1. STM32---TIM
  2. jsfiddle中国国内版本 JSRUN
  3. VMware15无法打开16的镜像解决办法
  4. 简单便携的音乐享受,NANK南卡A2降噪蓝牙耳机随心体验
  5. 黑客学习-SQL注入(字符型):Hackbar获取网站账号和密码
  6. 【单片机仿真】(十三)指令系统逻辑运算指令 — 移位指令
  7. 内网备忘录(超级全)
  8. 计算机网络学习篇:TCP/IP原理体系结构
  9. 手游的世界观和方法论
  10. linux图片添加滤镜,在 Ubuntu 中给你的照片加上 Instagram 风格的滤镜程序