爬虫学习笔记(二十一)—— Appium
文章目录
- 一、概念和作用
- 1.1、概念
- 1.2、常见应用
- 1.3、特点
- 1.4、Appium和Selenium
- 二、安装
- 2.1、安装Appium客户端库
- 2.2、安装Appium Desktop
- 2.3、安装JDK
- 2.4、安装Android SDK
- 2.5、环境配置:
- 2.6、安装验证
- 三、连接模拟器
- 3.1、修改模拟器文件
- 3.2、设置模拟器
- 3.3、进入开发者模式
- 3.4、在模拟器中安装软件
- 四、模拟器连接到Appium
- 4.1、启动和配置Appium
- 4.2、Appium界面信息
- 4.3、uiautomatorviewer
- 4.4、shell 命令
- 五、简单的使用示例:哔哩哔哩
- 5.1、Appium连接
- 5.2、UI Selector
- 5.3、Appium标签操作
- 5.4、滑动操作
- 5.5、流程控制
一、概念和作用
1.1、概念
appium是一个移动 App (手机应用)自动化工具。支持 iOS 平台和 Android 平台上的原生应用,web应用和混合应用。它允许测试人员在不同的平台(iOS,Android)使用同一套API来写自动化测试脚本,这样大大增加了iOS和Android测试套件间代码的复用性。
1.2、常见应用
- 自动化任务:微信机器人
- 爬虫:通过手机自动化,提取信息
- 自动化测试:自动化测试,提高效率
1.3、特点
- 支持多个平台:iOS (苹果)、安卓 App 的自动化都支持。
- 支持跨平台运行:Appium可以用在OSX,Windows以及Linux桌面系统上运行。
- 支持多种类型的自动化:
- 支持 苹果、安卓 应用 原生界面 的自动化
- 支持 应用 内嵌 WebView 的自动化
- 支持 手机浏览器 中的 web网站自动化
- 支持 flutter 应用的自动化
- 支持多种编程语言:像 Selenium 一样, 可以用多种编程语言调用它,开发自动化程序。
- 扩展了WebDriver的协议:Appium没有自己重新去实现一套。这样的好处是以前的WebDriver API能够直接被继承过来,以前的 Selenium(WebDriver)各种语言的binding都可以拿来就用。
- appium选择了Client/Server的设计模式。只要client能够发送http请求给server,那么的话client用什么语言来实现都是可以的,这就是appium及Selenium(WebDriver)如何做到支持多语言的原因;
1.4、Appium和Selenium
appium类库封装了标准Selenium客户端类库,为用户提供所有常见的JSON格式selenium命令以及额外的移动设备控制相关的命令,如多点触控手势和屏幕朝向。
appium客户端类库实现了Mobile JSON Wire Protocol(一个标准协议的官方扩展草稿)和W3C WebDriver spec(一个传输不可预知的自动化协议,该协议定义了MultiAction 接口)的元素。
appium服务端定义了官方协议的扩展,为appium 用户提供了方便的接口来执行各种设备动作,例如在测试过程中安装/卸载App。这就是为什么我们需要appium特定的客户端,而不是通用的Selenium 客户端。当然,appium 客户端类库只是增加了一些功能,而实际上这些功能就是简单的扩展了Selenium 客户端,所以他们仍然可以用来运行通用的Selenium会话。
二、安装
2.1、安装Appium客户端库
指令:
pip install appium-python-client
2.2、安装Appium Desktop
Appium Server 是用 NodeJS 运行的,基于JS开发出来的,Appium组织为了方便大家安装使用,制作了一个可执行程序 Appium Desktop,把 NodeJS 运行环境、Appium Server,和一些工具 打包在里面了,只需要简单的下载安装就可以了。
网址:http://appium.io/
安装示例:
2.3、安装JDK
JDK官网下载:https://www.oracle.com/java/technologies/javase-downloads.html
2.4、安装Android SDK
注意:现在已经不能单独安装Android SDK了,必须要一起下载谷歌集成好的包,包含了一个比较大的开发Android的IDE,就是Android Studio,而且Android的官方网站不能直接登录了,这里把SDK必须的文件打了一个压缩包,直接解压就可以了。
链接:https://pan.baidu.com/s/1D3aPH5HLc73oaOtqdib4lA
提取码:cgnb
2.5、环境配置:
- jdk添加环境变量:
JAVA_HOME
,指定值为jdk安装目录,比如JAVA_HOME
D:\SoftWare\JDK\jdk-16
(根据自己的安装目录改变)
- jdk,jre配置环境变量Path:
%JAVA_HOME%\bin
%JAVA_HOME%\jre\bin
- 环境变量:
ANDROID_HOME
,设置值为sdk包解压目录,比如D:\SoftWare\Android SDK\androidsdk
(根据自己的安装目录改变)
- 配置adb环境变量 Path:加入 adb所在目录,
d:\tools\androidsdk\platform-tools\
(根据自己的安装目录改变)
2.6、安装验证
1、JDK, JRE 安装验证
2、adb 安装验证
三、连接模拟器
这里使用夜神模拟器,网站:https://www.yeshen.com/
注:如果连接的是手机,直接进入“进入开发者模式”步骤进行
3.1、修改模拟器文件
- 打开安装目录,进入到
bin
目录(比如:D:\SoftWare\夜神模拟器\Nox\bin
) - 把第三节里安装好的Android SDK里的
adb.exe
文件(比如我的在D:\SoftWare\Android SDK\androidsdk\platform-tools
目录下)复制到该目录覆盖掉该目录已存在的adb.exe
文件 (因为下载的Android SDK版本可能和模拟器的不一样,无法通过adb控制模拟器,所以最好替换一下文件。) - 删掉该目录的
nox_adb.exe
文件,再复制一份adb.exe
并重命名为nox_adb.exe
- 启动模拟器
- 进入bin目录打开控制台,执行
./nox_adb.exe connect 127.0.0.1:62001
,然后执行adb devices -l
,看到如下信息就表示成功了
3.2、设置模拟器
3.3、进入开发者模式
1、进入“设置”,点击 “关于平板电脑”–>多次点击“版本号” ,进入开发者模式
2、启用USB调试,点击“开发者模式”–>开启“USB调试”
3.4、在模拟器中安装软件
首先需要保证模拟器已经连接成功,然后通过命令 adb devices -l
查看
安装软件使用命令 adb install [安装包路径]
,路径可以直接把安装包拖进窗口。
四、模拟器连接到Appium
4.1、启动和配置Appium
打开Appium之后直接点击Start Server就可以了
点击右上角放大镜开始配置模拟器信息
可以直接复制下面的JSON数据粘贴到右侧的输入框中,其中系统版本需要自己到模拟器中的关于平板电脑选项中自己查看
{"platformName": "Android","platformVersion": "7.1.2","deviceName": "BieYa"
}
全部信息填写完成后点击Start Session启动将Appium连接至模拟器,这时模拟器中会自动安装一个Appium Settings的软件,Appium通过这个软件控制模拟器的运行。
4.2、Appium界面信息
4.3、uiautomatorviewer
这个工具可以查看APP元素的属性,还提供了一组API,用于构建在用户应用和系统应用上执行交互的界面测试。Appium也封装了这个工具里面的API,所以也可以在Appium中使用这些API来操作模拟器。
参考谷歌安卓官方文档介绍: https://developer.android.google.cn/training/testing/ui-automator
截取手机元素
元素的属性
- NAF:true 输入框不能输入字符
- index:表示父节点的第几个子节点
- resource_id:类似于id
- text:文本信息
- class:类似于标签名与class
- package:包名
- content-desc:节点描述信息
- checkable :是否是可选择的
- checked:是否是已选择的
- clickable:是否是可点击的
- enabled:可用状态
- focusable:是否可以聚焦
- focused:是否是聚焦状态的
- scrollable:是否是可滚动的
- long-clickable:是否可长按
- bounds:坐标 左上角和右下角
4.4、shell 命令
1、查看app应用名
adb shell dumpsys activity | findstr mFocusedActivity
或
adb shell dumpsys activity recents | findstr "intent={"
2、查看输入法内容
adb shell ime list -s
3、从默认的appium输入法切换到搜狗输入法
adb shell ime set io.appium.settings/.UnicodeIME
五、简单的使用示例:哔哩哔哩
5.1、Appium连接
from appium import webdriver
import time
from appium.webdriver.extensions.android.nativekey import AndroidKeydesired_caps = {'platformName': 'Android', #被测的手机是安卓'platformVersion': '7.1.2', #手机安卓版本'deviceName': 'BieYa', #设备名,安卓手机可以随意填写'appPackage': 'tv.danmaku.bili', #启动APP package名称 shell用查看app应用名'appActivity': '.MainActivityV2', #启动Activity名称'unicodeKeyboard': True, #使用自带输入法,输入中文是填true'resetKeyboard': True, #执行完程序恢复原来输入法 经常来不及执行需要手动恢复'noReset': True, #不要重置APP 重要参数 务必填True'newCommandTimeout': 6000, #固定写'automationName': 'UiAutomator2'
}#连接APPium Server,初始化自动环境 建立连接,根据参数建立连接 安装
driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub',desired_caps)
5.2、UI Selector
#设置缺省等待时间
driver.implicitly_wait(15)
time.sleep(5)
#UISelector控制手机元素 点击搜索框
# code = 'new UiSelector().text("热门").className("android.widget.TextView")' #点击 ‘热门’ 标签
code = 'new UiSelector().className("android.widget.TextView")'
ele = driver.find_element_by_android_uiautomator(code)
# ele = driver.find_element_by_xpath('//android.widget.TextView[@content-desc="搜索"]')
ele.click()
5.3、Appium标签操作
#APPium标签操作
time.sleep(3)
#根据id定位搜索位置框,输入 python
search_tag = driver.find_element_by_id('tv.danmaku.bili:id/search_src_text')
search_tag.send_keys('python')
#输入回车键,确定搜索
time.sleep(1)
driver.press_keycode(AndroidKey.ENTER)
5.4、滑动操作
def swipUp(driver, t=800, n=1):'''向上滑动屏幕'''size = driver.get_window_size()x = size['width']*0.5 # x坐标y_start = size['height']*0.75 #起始点y坐标y_end = size['height'] * 0.25 #终点y坐标for i in range(n):driver.swipe(x,y_start,x,y_end,t)
5.5、流程控制
#1、加载所有标签 -滑动 2、判断底部 3、去重
title_list = [] #判断底部 去重
while True:title_tags = driver.find_elements_by_id('tv.danmaku.bili:id/title')title_list_lenght = len(title_list) #判断底部-起始长度if title_tags:for title_tag in title_tags:content = title_tag.textif content not in title_list: #去重print(content)title_list.append(content)current_length = len(title_list) #判断底部-结束长度print(' ')if current_length == title_list_lenght:print('到底了....')breakswipUp(driver) #滑动
print('结束..........')
driver.quit()
结果演示:
爬虫学习笔记(二十一)—— Appium相关推荐
- python3.4学习笔记(二十一) python实现指定字符串补全空格、前面填充0的方法
python3.4学习笔记(二十一) python实现指定字符串补全空格.前面填充0的方法 Python zfill()方法返回指定长度的字符串,原字符串右对齐,前面填充0. zfill()方法语法: ...
- Mr.J-- jQuery学习笔记(二十一)--模拟微博页面
先看之前的节点操作方法:Mr.J-- jQuery学习笔记(二十)--节点操作方法 Mr.J-- jQuery学习笔记(五)--属性及属性节点 Mr.J-- jQuery学习笔记(十一)--事件委托 ...
- kvm虚拟化学习笔记(二十一)之KVM性能优化学习笔记
本学习笔记系列都是采用CentOS6.x操作系统,KVM虚拟机的管理也是采用virsh方式,网上的很多的文章都基于ubuntu高版本内核下,KVM的一些新的特性支持更好,本文只是记录了CentOS6. ...
- 爬虫学习笔记(十一)—— Scrapy框架(六):媒体管道
一.媒体管道 1.1.媒体管道的特性 媒体管道实现了以下特性: 避免重新下载最近下载的媒体 指定存储位置(文件系统目录,Amazon S3 bucket,谷歌云存储bucket) 图像管道具有一些额外 ...
- linux驱动开发学习笔记二十一:异步通知
一.异步通知简介 我们首先来回顾一下"中断",中断是处理器提供的一种异步机制,我们配置好中断以后就可以让处理器去处理其他的事情了,当中断发生以后会触发我们事先设置好的中断服务函数, ...
- opencv学习笔记二十一:使用HSV颜色空间实现颜色识别
一.颜色空间介绍 RGB 颜色空间是大家最熟悉的颜色空间,即三基色空间,任何一种颜色都可以由该三种 颜色混合而成.然而一般对颜色空间的图像进行有效处理都是在 HSV 空间进行的,HSV( ...
- IOS学习笔记二十一(NSDictionary、NSMutableDictionary)
1.NSDictionary.NSMutableDictionary 可以理解为java里面的map,一个key对应一个value,key不可以重复 NSDictionary不可变,NSMutable ...
- java自定义一个timeout,Timeout操作符 RxJava 学习笔记二十一
timeout用于检测在给定时间内observables没有及时响应.如果指定的时间量没有发出任何项目,则超时会使observables失败并出现TimeoutException. 我们将从debou ...
- python网络爬虫学习笔记(十一):Ajax数据爬取
文章目录 1.基本介绍 2.基本原理 3.实战 有时候我们在用requests抓取页面的时候,得到的结果可能和在浏览器中看到的不一样:在浏览器中可以看到正常显示的页面数据,但是使用requests得到 ...
- 立创eda学习笔记二十一:添加、移除泪滴
在PCB电路板设计中,为了让焊盘更坚固,防止机械制板时焊盘与导线之间断开,常在焊盘和导线之间用铜膜布置一个过渡区,形状像泪滴,故常称做补泪滴(Teardrops). 泪滴的作用 避免电路板受到巨大外力 ...
最新文章
- linux网卡设置adsl上网,Linux下设置ADSL自动拨号上网
- 关于PHP中Session文件过多的问题
- 产业企业和投资机会研究(中小板、创业板) 碧水源(300070)创业板
- 图说数据中心新风节能技术
- yii mysql语法_yii2 + mysql 常用增删改查操作语法以及事务
- 信息学奥赛一本通(C++)在线评测系统——基础(一)C++语言——1075:药房管理
- SpringNBoot日志配置
- Android内存泄漏的检测流程、捕捉以及分析
- 最方便的字符设备驱动的写法
- 再次思考 classpath 环境变量 等
- 大数据技术原理与应用(第八章HBase测试)
- 大学计算机第四版蒋加伏ppt,大学计算机基础 普通高等教育十一五 国家级规划教材 教学课件 作者 蒋加伏 王宇 第5章 Powerpoint 2003演示文稿制作基础.ppt...
- 氚云 表单前端代码-提交机制
- 精易模块保存html文档,易模块文件不存在
- Excel绘制CDF图
- 计算机视觉 — Harris角点检测
- 关于北美信号T1和欧洲信号E1的计算
- python全栈工程师薪水_Python工程师薪资待遇是多少?老男孩Python周末班
- 笔记整理--Linux守护进程
- Android Studio-Didn't find class XXX on path: DexPathList [zip file /data/xxx/base.apk]解决方法
热门文章
- pytorch笔记:policy gradient
- 机器学习笔记:Adagrad
- LeetCode面试刷题技巧-二分查找算法(下):通过 LeetCode 学习二分查找算法-销售价值减少的颜色球
- tableau实战系列(十八)-通过可视化实现购物篮关联分析( Market Basket Analysis),关联物品之间的关联关系
- 使用matlab调用Oracle数据库
- 基于云计算的海量数据挖掘
- 大学生能从计算机游戏中受益,2017年6月英语四级作文练习:大学生玩游戏
- 深度学习100例 | 第35天:脑肿瘤识别
- AI生成手写数字 + 智能卡点切图
- numpy.arcsin详解