appium+Python腳本編寫

兩年前剛進(jìn)公司的時候用過appium劝评,最后因換項目也就沒再研究過了因惭。就在前兩個月一個通過閱讀新聞賺錢的App讓我意識到 也許appium可以這么干屈嗤,哈哈潘拨。結(jié)果很不理想,這里就分享一下過程吧恢共!

我選擇的方案是 appium1.8.1 + 夜神模擬器 + Python腳本

準(zhǔn)備工作

安裝夜神模擬器

安裝過程就不說了战秋,需要注意的是在環(huán)境變量添加 夜神模擬器adb的路徑。


image.png

然后啟動模擬器讨韭,再打開命令行輸入 adb devices

adb devices
List of devices attached
127.0.0.1:62001 device

image.png

有設(shè)備列表就對了 62001 就是模擬器的端口脂信,可以通過adb執(zhí)行命令癣蟋,appium也是通過這個來連通設(shè)備的

安裝Appium

準(zhǔn)備材料

Appium國內(nèi)下載地址
Appium中文文檔
Appium各種資料 來自testerhome

我安裝的是1.8.1 安裝過程略過
配置環(huán)境變量

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

然后安裝nodejs ,配置jdk狰闪,Android SDK 疯搅,Windows下這些軟件的安裝過程都略過

Appium原理

Appium原理解析

Appium啟動參數(shù)

開始

下載趣頭條apk文件,下載apktool工具其實就是一個jar包
將這兩個文件放在同一個文件夾(自己視情況而定)埋泵,在當(dāng)前文件夾打開命令行幔欧,使用apktool反編譯趣頭條


image.png

反編譯命令

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

完成后會多一個目錄,用編輯器打開里面的AndroidManifest.xml
要找的Appium啟動app需要的兩個參數(shù)appPackage丽声,appActivity

image.png
image.png

啟動Appium服務(wù)

沒什么特別的直接打開使用默認(rèn)端口就行礁蔗,如果被占用就改一下


image.png

然后打開一個inspector session


image.png

界面如下


image.png

輸入啟動參數(shù),可以鍵值對雁社,也可以直接編輯右邊的json數(shù)據(jù)浴井,我還是覺得json快一些

image.png

啟動后是這樣的


image.png
image.png

這些功能用了選取元素。

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

1:啟動會出現(xiàn)紅包掛件 --> 掛件信息 如下
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

判斷 -> (如果有掛件){
    通過點擊關(guān)閉紅包掛件

}

關(guān)閉按鍵信息為:

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
                    分類標(biāo)題:      對應(yīng)為:[class   android.widget.TextView] 數(shù)組

    第二部分 ---- 主體內(nèi)容:        resource-id  com.jifen.qukan:id/kt 
                    新聞列表:              [主體內(nèi)容中子元素] -> com.jifen.qukan:id/uo

3霉撵,點擊進(jìn)入新聞頁面:(判斷有無紅包掛件){    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坐標(biāo)
  y1 = l['height'] * 0.75 # 起始y坐標(biāo)
  y2 = l['height'] * 0.25 # 終點y坐標(biāo)
  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坐標(biāo)
  y1 = l['height'] * 0.25 # 起始y坐標(biāo)
  y2 = l['height'] * 0.75 # 終點y坐標(biāo)
  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(
            "http://*[@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("http://android.widget.TextView[@text='關(guān)閉']")
            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")

# 找到標(biāo)題元素 循環(huán)點擊
for index,item in enumerate(list):
    print(item.text)
    item = list[index+4]
    if(index==6):
        # 如果到了第六個滑動一下
  swipLeft(item,3)
    item.click()
    # 然后開始查找新聞列表
 # 閱讀新聞函數(shù) # 每個分類閱讀的頁數(shù)  pageNum = 0
  while(pageNum<10):
        readNew(driver)
        swipeUp(driver,2000,1)
        pageNum+=1
print(list)
driver.quit()

以上腳本運行就可以讓新聞自動閱讀啦。
記錄備忘

我的個人博客

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末徒坡,一起剝皮案震驚了整個濱河市撕氧,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌喇完,老刑警劉巖津坑,帶你破解...
    沈念sama閱讀 219,270評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件祖驱,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)我磁,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,489評論 3 395
  • 文/潘曉璐 我一進(jìn)店門滋尉,熙熙樓的掌柜王于貴愁眉苦臉地迎上來拧揽,“玉大人休里,你說我怎么就攤上這事』捣辏” “怎么了域帐?”我有些...
    開封第一講書人閱讀 165,630評論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長是整。 經(jīng)常有香客問我肖揣,道長,這世上最難降的妖魔是什么浮入? 我笑而不...
    開封第一講書人閱讀 58,906評論 1 295
  • 正文 為了忘掉前任龙优,我火速辦了婚禮,結(jié)果婚禮上事秀,老公的妹妹穿的比我還像新娘彤断。我一直安慰自己野舶,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,928評論 6 392
  • 文/花漫 我一把揭開白布宰衙。 她就那樣靜靜地躺著平道,像睡著了一般。 火紅的嫁衣襯著肌膚如雪供炼。 梳的紋絲不亂的頭發(fā)上一屋,一...
    開封第一講書人閱讀 51,718評論 1 305
  • 那天,我揣著相機(jī)與錄音袋哼,去河邊找鬼冀墨。 笑死,一個胖子當(dāng)著我的面吹牛涛贯,可吹牛的內(nèi)容都是我干的轧苫。 我是一名探鬼主播,決...
    沈念sama閱讀 40,442評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼疫蔓,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了身冬?” 一聲冷哼從身側(cè)響起衅胀,我...
    開封第一講書人閱讀 39,345評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎酥筝,沒想到半個月后滚躯,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,802評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡嘿歌,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,984評論 3 337
  • 正文 我和宋清朗相戀三年掸掏,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片宙帝。...
    茶點故事閱讀 40,117評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡丧凤,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出步脓,到底是詐尸還是另有隱情愿待,我是刑警寧澤,帶...
    沈念sama閱讀 35,810評論 5 346
  • 正文 年R本政府宣布靴患,位于F島的核電站仍侥,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏鸳君。R本人自食惡果不足惜农渊,卻給世界環(huán)境...
    茶點故事閱讀 41,462評論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望或颊。 院中可真熱鬧砸紊,春花似錦传于、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,011評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至徽鼎,卻和暖如春盛末,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背否淤。 一陣腳步聲響...
    開封第一講書人閱讀 33,139評論 1 272
  • 我被黑心中介騙來泰國打工悄但, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人石抡。 一個月前我還...
    沈念sama閱讀 48,377評論 3 373
  • 正文 我出身青樓檐嚣,卻偏偏與公主長得像,于是被迫代替她去往敵國和親啰扛。 傳聞我的和親對象是個殘疾皇子嚎京,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,060評論 2 355

推薦閱讀更多精彩內(nèi)容