appium示例代码python_appium+Python 脚本编写

两年前刚进公司的时候用过 appium,最后因换项目也就没再研究过了。就在前两个月一个通过阅读新闻赚钱的 App 让我意识到 也许 appium 可以这么干,哈哈。结果很不理想,这里就分享一下过程吧!

我选择的方案是 appium1.8.1 + 夜神模拟器 + Python 脚本

准备工作

安装夜神模拟器

安装过程就不说了,需要注意的是在环境变量添加 夜神模拟器 adb 的路径。

c9d602e920e44d23a8f4b4d6740e685e_image.png

然后启动模拟器,再打开命令行输入 adb devices

adb devices

List of devices attached

127.0.0.1:62001 device

81c167c59a8b4e14b52d6e7b30d7c7c2_image.png

有设备列表就对了 62001 就是模拟器的端口,可以通过 adb 执行命令,appium 也是通过这个来连通设备的

安装 Appium

准备材料

我安装的是 1.8.1 安装过程略过

配置环境变量

H:\soft\Appium\node_modules\.bin

f7b5167bc4554cc2ac3aad3e98d099a0_image.png

然后安装 nodejs ,配置 JDK,Android SDK ,Windows 下这些软件的安装过程都略过

Appium 原理

开始

下载趣头条 apk 文件,下载 apktool 工具其实就是一个 jar 包

将这两个文件放在同一个文件夹(自己视情况而定),在当前文件夹打开命令行,使用 apktool 反编译趣头条

dcded958fa6f4da6a5d9b27c29a47b22_image.png

反编译命令

java -jar .\apktool_2.3.3.jar d .\qukan.apk

34bd15edc4584e51953fbb58cb6366d6_image.png

完成后会多一个目录,用编辑器打开里面的 AndroidManifest.xml

要找的 Appium 启动 app 需要的两个参数 appPackage,appActivity

11202fcbc8264979ad0ad1eaa7783d4e_image.png

74241a04f0ef414a85e65d65659b79f6_image.png

启动 Appium 服务

没什么特别的直接打开使用默认端口就行,如果被占用就改一下

dd0e7c8f6cf94ad68bdc1d1af55d5c5a_image.png

然后打开一个 inspector session

7e2ce526b2e640e1991e3fc5343f48d4_image.png

界面如下

2869091fc488407fb34d827d0b80f39c_image.png

输入启动参数,可以键值对,也可以直接编辑右边的 JSON 数据,我还是觉得 JSON 快一些

59a46035b2e14847925e3ac393ebde37_image.png

启动后是这样的

7b6a3d83494d4f59b71e36e985b882d1_image.png

9c8ac336d7894ae1bc53bad049f60e6a_image.png

这些功能用了选取元素。

下面是我之前做好的一下分析:

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()

以上脚本运行就可以让新闻自动阅读啦。

记录备忘

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值