爬虫学习笔记(二十一)—— Appium
Posted 别呀
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了爬虫学习笔记(二十一)—— Appium相关的知识,希望对你有一定的参考价值。
一、概念和作用
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,和一些工具 打包在里面了,只需要简单的下载安装就可以了。
安装示例:
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 AndroidKey
desired_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.text
if content not in title_list: #去重
print(content)
title_list.append(content)
current_length = len(title_list) #判断底部-结束长度
print(' ')
if current_length == title_list_lenght:
print('到底了....')
break
swipUp(driver) #滑动
print('结束..........')
driver.quit()
结果演示:
以上是关于爬虫学习笔记(二十一)—— Appium的主要内容,如果未能解决你的问题,请参考以下文章
R语言学习笔记(二十一五):如何如何提升R语言运算的性能以及速度