appium示例代码python_appium+Python 脚本编写
两年前刚进公司的时候用过 appium,最后因换项目也就没再研究过了。就在前两个月一个通过阅读新闻赚钱的 App 让我意识到 也许 appium 可以这么干,哈哈。结果很不理想,这里就分享一下过程吧!
我选择的方案是 appium1.8.1 + 夜神模拟器 + Python 脚本
准备工作
安装夜神模拟器
安装过程就不说了,需要注意的是在环境变量添加 夜神模拟器 adb 的路径。
然后启动模拟器,再打开命令行输入 adb devices
adb devices
List of devices attached
127.0.0.1:62001 device
有设备列表就对了 62001 就是模拟器的端口,可以通过 adb 执行命令,appium 也是通过这个来连通设备的
安装 Appium
准备材料
我安装的是 1.8.1 安装过程略过
配置环境变量
H:\soft\Appium\node_modules\.bin
然后安装 nodejs ,配置 JDK,Android SDK ,Windows 下这些软件的安装过程都略过
Appium 原理
开始
下载趣头条 apk 文件,下载 apktool 工具其实就是一个 jar 包
将这两个文件放在同一个文件夹(自己视情况而定),在当前文件夹打开命令行,使用 apktool 反编译趣头条
反编译命令
java -jar .\apktool_2.3.3.jar d .\qukan.apk
完成后会多一个目录,用编辑器打开里面的 AndroidManifest.xml
要找的 Appium 启动 app 需要的两个参数 appPackage,appActivity
启动 Appium 服务
没什么特别的直接打开使用默认端口就行,如果被占用就改一下
然后打开一个 inspector session
界面如下
输入启动参数,可以键值对,也可以直接编辑右边的 JSON 数据,我还是觉得 JSON 快一些
启动后是这样的
这些功能用了选取元素。
下面是我之前做好的一下分析:
1:启动会出现红包挂件 --> 挂件信息 如下
Attribute Value
index 0
class android.widget.LinearLayout
package com.jifen.qukan
content-desc
checkable false
checked false
clickable false
enabled true
focusable false
focused false
scrollable false
long-clickablefalse
password false
selected false
bounds [171,372][548,945]
resource-id
instance 0
判断 -> (如果有挂件){
通过点击关闭红包挂件
}
关闭按键信息为:
AttributeValue
index 1
text 先去逛逛
class android.widget.TextView
package com.jifen.qukan
content-desc
checkable false
checked false
clickable true
enabled true
focusable false
focused false
scrollable false
long-clickablefalse
password false
selected false
bounds [171,913][548,945]
resource-id com.jifen.qukan:id/a0d
instance 5
2:开始读取文章列表
文章页面又分为两部分:
第一部分 ---- 新闻分类: 资源:ID com.jifen.qukan:id/qk -> class:android.widget.LinearLayout
分类标题: 对应为:[classandroid.widget.TextView] 数组
第二部分 ---- 主体内容: resource-idcom.jifen.qukan:id/kt
新闻列表: [主体内容中子元素] -> com.jifen.qukan:id/uo
3,点击进入新闻页面:(判断有无红包挂件){ resource-id com.jifen.qukan:id/a86
有 则写上下滑动手势 获取金币
}else{
返回到列表,阅读下一个
}
编写 python 脚本
安装 Appium-Python-Client
pip install Appium-Python-Client
下面是我写的脚本代码
from appium import webdriver
from time import sleep
desired_caps = {}
desired_caps['platformName'] = 'Android'
desired_caps['platformVersion'] = '4.4.2'
desired_caps['deviceName'] = '127.0.0.1:62001 device'
desired_caps['appPackage'] = 'com.jifen.qukan'
desired_caps['appActivity'] = 'com.jifen.qkbase.view.activity.JumpActivity'
desired_caps['noReset'] = 'true'
driver = webdriver.Remote('http://localhost:4723/wd/hub', desired_caps)
def swipeUp(driver, t=500, n=1):
'''向上滑动屏幕'''
l = driver.get_window_size()
x1 = l['width'] * 0.5 # x坐标
y1 = l['height'] * 0.75 # 起始y坐标
y2 = l['height'] * 0.25 # 终点y坐标
for i in range(n):
driver.swipe(x1, y1, x1, y2, t)
def swipeDown(driver, t=500, n=1):
'''向下滑动屏幕'''
l = driver.get_window_size()
x1 = l['width'] * 0.5 # x坐标
y1 = l['height'] * 0.25 # 起始y坐标
y2 = l['height'] * 0.75 # 终点y坐标
for i in range(n):
driver.swipe(x1, y1, x1, y2,t)
def swipLeft(driver, t=500, n=1):
'''向左滑动屏幕'''
l = driver.get_window_size()
x1 = l['width'] * 0.75
y1 = l['height'] * 0.5
x2 = l['width'] * 0.25
for i in range(n):
driver.swipe(x1, y1, x2, y1, t)
def swipRight(driver, t=500, n=1):
'''向右滑动屏幕'''
l = driver.get_window_size()
x1 = l['width'] * 0.25
y1 = l['height'] * 0.5
x2 = l['width'] * 0.75
for i in range(n):
driver.swipe(x1, y1, x2, y1, t)
# 选择新闻
def selectNews(driver):
news = []
try:
news = driver.find_element_by_id("com.jifen.qukan:id/kt").find_elements_by_xpath(
"//*[@resource-id='com.jifen.qukan:id/uo']")
except BaseException as e:
swipeUp(driver,2000,1)
news = selectNews(driver)
return news
# 阅读新闻
def readNew(driver):
news = selectNews(driver)
for index,item1 in enumerate(news):
print(item1.text)
item1.click()
# 等待页面加载
sleep(3)
# 检查是否是广告
try:
gbBtn = driver.find_elements_by_xpath("//android.widget.TextView[@text='关闭']")
if (gbBtn):
driver.keyevent(4)
except BaseException as e:
print(e)
swipeUp(driver,6000,7)
swipeDown(driver, 6000, 7)
sleep(3)
driver.keyevent(4)
sleep(3)
# main
header = driver.find_element_by_id("com.jifen.qukan:id/qk").find_element_by_class_name("android.widget.LinearLayout")
list = header.find_elements_by_class_name("android.widget.TextView")
# 找到标题元素 循环点击
for index,item in enumerate(list):
print(item.text)
item = list[index+4]
if(index==6):
# 如果到了第六个滑动一下
swipLeft(item,3)
item.click()
# 然后开始查找新闻列表
# 阅读新闻函数 # 每个分类阅读的页数 pageNum = 0
while(pageNum<10):
readNew(driver)
swipeUp(driver,2000,1)
pageNum+=1
print(list)
driver.quit()
以上脚本运行就可以让新闻自动阅读啦。
记录备忘
appium示例代码python_appium+Python 脚本编写相关推荐
- c4d python使用方法_Cinema 4D Python脚本编写必须知道的5行Python代码教程
Cinema 4D Python脚本编写必须知道的5行Python代码教程 在这期Cinema 4D python教程中的第一篇.Alpha Pixel将介绍如何使用python脚本进行设置,并查看一 ...
- .mat文件批量转成图片——python脚本编写
.mat文件批量转成图片--python脚本编写 mat文件简介 mat文件是Matlab的数据存储的标准格式.mat文件是标准的二进制文件,还可以ASCII码形式保存和加载,在MATLAB中打开显示 ...
- Linux系统shell脚本、python脚本编写
GPU排队脚本 python脚本 GPU排队脚本 ---- GPU一旦空闲触发脚本执行程序 参考: GPU排队脚本(python脚本) cmd = 'bash run.sh' 该句设置要执行的pyth ...
- 四个步骤教你入门Selenium+python脚本编写
前提:安装了谷歌浏览器.python3和pyCharm编译器 第一步:下载谷歌浏览器插件 此时顺便下载谷歌浏览器的Selenium扩展程序插件,即Selenium IDE, 这个为了以后要查找web端 ...
- php 怎么开启错误报告,总结PHP开启关闭错误报告示例代码以及PHP脚本不报错的原因...
总结PHP开启关闭错误报告示例代码以及PHP脚本不报错的原因 分类:PHP_Python| 发布:佚名| 查看: | 发表时间:2014/8/28 那么如果PHP脚本不报语法错,会是什么原因呢: 1. ...
- Linux下python脚本编写小结
Linux下python脚本编写小结 1.如何在linux系统中,看是否安装了python: -which python 或者 which python3 如何在python脚本中使用shell命令: ...
- python脚本编写_【PyQGIS】编写用于处理框架(QGIS3)的Python脚本
可以编写可通过QGIS中的Python控制台运行的独立pyqgis脚本.进行一些调整,即可使您的独立脚本通过处理框架运行.这具有几个优点.首先,获取用户输入和写入输出文件要容易得多,因为Process ...
- python脚本编写_如何用Python包编写一个简单的脚本,表达你对父母的爱?
全文共2800字,预计学习时长6分钟 在繁忙的工作生活中,我们经常忘记给所爱的人发WhatsApp.本教程将使用Python包Twilio编写一个简单的Python脚本来发送WhatsApp消息.我们 ...
- python脚本编写bat_推荐10个关于BAT脚本的实例教程
这篇文章分享使用python生成一个导出数据库的bat脚本文件的示例代码实例如下:# 环境: python3.x def getExportDbSql(db, index): # 获取导出一个数据库实 ...
最新文章
- 【WWW2021】高效的非抽样知识图谱嵌入
- CMU 刘畅流:爱上人机交互源于科幻片,女性研究AI更感性、更哲学 | 妇女节特辑...
- 雷电2接口_地表最强?代替电脑的所有接口,雷电3或有望一统接口江湖
- IE6/IE7下:inline-block不兼容的问题
- 06-Firmware Configuration Framework
- java divide 用法_java中BigDecimal加减乘除基本用法
- 喜欢去知乎炸鱼?用python吧
- Java单例模式之最优解分析【为何说是最优解】
- 分分钟搞定阿里云私有Docke镜像仓库的搭建
- 每日英语:Why Food Companies Are Fascinated by the Way We Eat
- 原生JavaScript + Canvas实现图片局部放大器
- 女生学前端适合么?新人应该怎么学习?
- 王慧文清华产品课(六)
- 2021年10月考试总结
- iOS根据相册图片识别条形码、二维码以及脸部特征
- 金属按钮开关如何接线
- 2023年全国最新二级建造师精选真题及答案52
- 顺序表实现简单的【扑克牌】
- 西瓜书学习笔记(一、绪论)
- 计算机基础知识教案结束语,【计算机基础论文】计算机基础教学模式探索与思考分析(共4342字)...
热门文章
- 冲刺CCNA2.0(200-120)认证考试TK视频讲解
- strcat与strncat的C/C++实现
- iOS:UIWebView scrollView 的分页滑动问题
- 想成为架构师,你必须掌握的CAP细节
- win10 flashcs6不能用了_听说这版win10马上不能用了?那就改装“它”,比win7还稳定流畅...
- android api文档_【粉丝投稿】无需额外注解的 SpringBoot API文档生成工具
- 推荐系统基础之介绍入门篇
- 语言专升本必背代码_广东省 2021 年普通高等学校专升本招生学科门类与专业基础课对应表...
- 声谱图,梅尔语谱,倒谱,梅尔倒谱系数
- matlab fir overflow,实战fir脚本打ipa包