appium+Python脚本编写

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

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

准备工作

安装夜神模拟器

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


image.png

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

adb devices
List of devices attached
127.0.0.1:62001 device

image.png

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

安装Appium

准备材料

Appium国内下载地址
Appium中文文档
Appium各种资料 来自testerhome

我安装的是1.8.1 安装过程略过
配置环境变量

H:\soft\Appium\node_modules\.bin
image.png

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

Appium原理

Appium原理解析

Appium启动参数

开始

下载趣头条apk文件,下载apktool工具其实就是一个jar包
将这两个文件放在同一个文件夹(自己视情况而定),在当前文件夹打开命令行,使用apktool反编译趣头条


image.png

反编译命令

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

完成后会多一个目录,用编辑器打开里面的AndroidManifest.xml
要找的Appium启动app需要的两个参数appPackage,appActivity

image.png
image.png

启动Appium服务

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


image.png

然后打开一个inspector session


image.png

界面如下


image.png

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

image.png

启动后是这样的


image.png
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-clickable  false
password        false
selected        false
bounds          [171,372][548,945]
resource-id 
instance        0

判断 -> (如果有挂件){
    通过点击关闭红包挂件

}

关闭按键信息为:

Attribute   Value
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-clickable  false
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
                    分类标题:      对应为:[class   android.widget.TextView] 数组

    第二部分 ---- 主体内容:        resource-id  com.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()

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

我的个人博客

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,015评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,262评论 1 292
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,727评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,986评论 0 205
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,363评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,610评论 1 219
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,871评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,582评论 0 198
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,297评论 1 242
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,551评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,053评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,385评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,035评论 3 236
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,079评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,841评论 0 195
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,648评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,550评论 2 270

推荐阅读更多精彩内容