基於Python+Appium實現京東雙十一自動領金幣功能
背景:做任務領金幣的過程很無聊,而且每天都是重複同樣的工作,非常符合自動化的定義;
工具:python,appium,Android 手機(我使用的是安卓6.0的),資料線一根;
開搞前先讓手機和電腦連上同一個無線網;
1.抓取京東APP的包名和Activity
先連線手機 windows+r輸入cmd進入命令列頁面
輸入:adb devices檢視裝置是否連結;
輸入:adb shell pm list package -3檢視手機裡面的第三方安裝包;
很明顯可以看出來京東的package是:com.jingdong.app.mall
輸入:adb shell monkey -v -v -v -p com.jingdong.app.mall 10,使用monkey命令執行京東APP在執行日誌中找到Activity,(這是我至今為止找Activity最好用的方法,有更好可以留言。)在日誌最後面找到包名,包名的“/” 後面就是Activity;
2.編寫python程式碼,編寫一段開啟京東APP的程式碼;
deviceName預設埠號是5555
from appium import webdriver desired_caps ={ 'platformName':'Android','deviceName':'192.168.60.41:5555',#手機ip地址 'platformVersion':'6.0',#Android系統版本 'appPackage':'com.jingdong.app.mall','appActivity':'.main.MainActivity' } dr=webdriver.Remote('http://127.0.0.1:4723/wd/hub',desired_caps)#地址為appium地址
3.開啟appium,簡單設定後開啟appium;
點選右上角三角開啟;
4.使用uiautomatorviewer.bat 工具獲取APP內按鈕定位;
uiautomatorviewer.bat 工具比較辣雞,也可能因為我比較辣雞,就是很多頁面獲取不到,獲取到了也找不到按鈕的class,id等等,說以我這裡使用的是座標點選。uiautomatorviewer.bat工具在android-sdk\tools目錄下;
eg:
例如點選全民養紅包:TouchAction(dr).press(x=950,y=1530).release().perform()
press(x=x,y=y)裡面的填寫的是座標點,這個點座標需要控制在[543,1461][1053,1617]之內;
5.思路:
點選活動 -- 點選全民養紅包 -- 點選領取金幣 -- 點選任務 --點選返回 -- 點選領取金幣 -- 重定向至點選任務;
詳細程式碼如下(個人自嗨的程式碼僅供參考):
from appium.webdriver.common.touch_action import TouchAction from time import sleep from appium import webdriver desired_caps ={ 'platformName':'Android',desired_caps)#地址為appium地址 sleep(8) x=dr.get_window_size()['width'] y=dr.get_window_size()['height'] print('點選雙11活動') TouchAction(dr).press(x=813,y=1250).release().perform() sleep(15) # 點選紅包活動[543,1617] print('點選紅包活動') TouchAction(dr).press(x=950,y=1530).release().perform() sleep(15) # 點選任務列表[867,1656][1065,1776] print('點選任務列表') TouchAction(dr).press(x=950,y=1710).release().perform() sleep(10) #向上劃拉一點點 def swipe_up(): print('向上劃拉一點點') x=500 y1=1500 y2=1100 dr.swipe(x,y1,x,y2,500) sleep(1) #點選任務,進入詳情,返回任務頁,點選領取金幣 def cleck_rw(NO_,number,size): for i in range(number): #點選任務 print('第{}次點選任務{}'.format(i+1,NO_)) TouchAction(dr).press(x=950,y=size).release().perform() sleep(2) # 返回上一頁 print('返回活動頁') dr.back() sleep(3) # 點選朕知道了[414,1314][660,1404] print('點選朕知道了') TouchAction(dr).press(x=550,y=1350).release().perform() sleep(2) def renwu(NO_,size,swipe_=0): if number == 0: print('pass 任務.{}'.format(NO_)) else: if swipe_ ==1 : cleck_rw(NO_,size) elif swipe_ ==0: cleck_rw(NO_,size) def begin (num1=25,num2=3,num3=25,num4=4,num6=4): #活動逛好店num=25 size=[813,741][1038,852] renwu(1,num1,800) print('活動逛好店') # 精彩會場num=25 size=[813,963][1038,1074] renwu(2,num2,1000) print('精彩會場') # 精選好物num=25 size=[813,1185][1038,1296] renwu(3,num3,1250) print('精選好物') # 更多互動num=25 size=[813,1407][1038,1518] renwu(4,num4,1450) print('更多互動') #好友助力[813,1629][1038,1740] #推薦直播/視訊 num=4 size=1593 1703 renwu(6,num6,1650,1) print('直播視訊') if __name__ == '__main__': begin()
總結
以上所述是小編給大家介紹的基於Python+Appium實現京東雙十一自動領金幣功能,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回覆大家的。在此也非常感謝大家對我們網站的支援!
如果你覺得本文對你有幫助,歡迎轉載,煩請註明出處,謝謝!