基于Python+Appium實(shí)現(xiàn)京東雙十一自動(dòng)領(lǐng)金幣功能
背景:做任務(wù)領(lǐng)金幣的過程很無聊,而且每天都是重復(fù)同樣的工作,非常符合自動(dòng)化的定義;
工具:python,appium,Android 手機(jī)(我使用的是安卓6.0的),數(shù)據(jù)線一根;
開搞前先讓手機(jī)和電腦連上同一個(gè)無線網(wǎng);
1.抓取京東APP的包名和Activity
先連接手機(jī) windows+r輸入cmd進(jìn)入命令行頁面
輸入:adb devices查看設(shè)備是否鏈接;
輸入:adb shell pm list package -3查看手機(jī)里面的第三方安裝包;
很明顯可以看出來京東的package是:com.jingdong.app.mall

輸入:adb shell monkey -v -v -v -p com.jingdong.app.mall 10 ,使用monkey命令運(yùn)行京東APP在運(yùn)行日志中找到Activity,(這是我至今為止找Activity最好用的方法,有更好可以留言。)在日志最后面找到包名,包名的“/” 后面就是Activity;

2.編寫python代碼,編寫一段打開京東APP的代碼;
deviceName默認(rèn)端口號(hào)是5555
from appium import webdriver
desired_caps ={
'platformName':'Android',
'deviceName':'192.168.60.41:5555',#手機(jī)ip地址
'platformVersion':'6.0',#Android系統(tǒng)版本
'appPackage':'com.jingdong.app.mall',
'appActivity':'.main.MainActivity'
}
dr=webdriver.Remote('http://127.0.0.1:4723/wd/hub',desired_caps)#地址為appium地址
3.打開appium,簡(jiǎn)單設(shè)置后開啟appium;

點(diǎn)擊右上角三角開啟;
4.使用uiautomatorviewer.bat 工具獲取APP內(nèi)按鈕定位;
uiautomatorviewer.bat 工具比較辣雞,也可能因?yàn)槲冶容^辣雞,就是很多頁面獲取不到,獲取到了也找不到按鈕的class,id等等,說以我這里使用的是坐標(biāo)點(diǎn)擊。uiautomatorviewer.bat工具在android-sdk\tools目錄下;
eg:
例如點(diǎn)擊全民養(yǎng)紅包:TouchAction(dr).press(x=950,y=1530).release().perform()
press(x=x,y=y)里面的填寫的是坐標(biāo)點(diǎn),這個(gè)點(diǎn)坐標(biāo)需要控制在[543,1461][1053,1617]之內(nèi);
5.思路:
點(diǎn)擊活動(dòng) -- 點(diǎn)擊全民養(yǎng)紅包 -- 點(diǎn)擊領(lǐng)取金幣 -- 點(diǎn)擊任務(wù) --點(diǎn)擊返回 -- 點(diǎn)擊領(lǐng)取金幣 -- 重定向至點(diǎn)擊任務(wù);
詳細(xì)代碼如下(個(gè)人自嗨的代碼僅供參考):
from appium.webdriver.common.touch_action import TouchAction
from time import sleep
from appium import webdriver
desired_caps ={
'platformName':'Android',
'deviceName':'192.168.60.41:5555',#手機(jī)ip地址
'platformVersion':'6.0',#Android系統(tǒng)版本
'appPackage':'com.jingdong.app.mall',
'appActivity':'.main.MainActivity'
}
dr=webdriver.Remote('http://127.0.0.1:4723/wd/hub',desired_caps)#地址為appium地址
sleep(8)
x=dr.get_window_size()['width']
y=dr.get_window_size()['height']
print('點(diǎn)擊雙11活動(dòng)')
TouchAction(dr).press(x=813,y=1250).release().perform()
sleep(15)
# 點(diǎn)擊紅包活動(dòng)[543,1461][1053,1617]
print('點(diǎn)擊紅包活動(dòng)')
TouchAction(dr).press(x=950,y=1530).release().perform()
sleep(15)
# 點(diǎn)擊任務(wù)列表[867,1656][1065,1776]
print('點(diǎn)擊任務(wù)列表')
TouchAction(dr).press(x=950,y=1710).release().perform()
sleep(10)
#向上劃拉一點(diǎn)點(diǎn)
def swipe_up():
print('向上劃拉一點(diǎn)點(diǎn)')
x=500
y1=1500
y2=1100
dr.swipe(x,y1,x,y2,500)
sleep(1)
#點(diǎn)擊任務(wù),進(jìn)入詳情,返回任務(wù)頁,點(diǎn)擊領(lǐng)取金幣
def cleck_rw(NO_,number,size):
for i in range(number):
#點(diǎn)擊任務(wù)
print('第{}次點(diǎn)擊任務(wù){(diào)}'.format(i+1,NO_))
TouchAction(dr).press(x=950, y=size).release().perform()
sleep(2)
# 返回上一頁
print('返回活動(dòng)頁')
dr.back()
sleep(3)
# 點(diǎn)擊朕知道了[414,1314][660,1404]
print('點(diǎn)擊朕知道了')
TouchAction(dr).press(x=550, y=1350).release().perform()
sleep(2)
def renwu(NO_,number,size,swipe_=0):
if number == 0:
print('pass 任務(wù).{}'.format(NO_))
else:
if swipe_ ==1 :
cleck_rw(NO_, number, size)
elif swipe_ ==0:
cleck_rw(NO_, number, size)
def begin (num1=25,num2=3,num3=25,num4=4,num6=4):
#活動(dòng)逛好店num=25 size=[813,741][1038,852]
renwu(1,num1,800)
print('活動(dòng)逛好店')
# 精彩會(huì)場(chǎng)num=25 size=[813,963][1038,1074]
renwu(2,num2, 1000)
print('精彩會(huì)場(chǎng)')
# 精選好物num=25 size=[813,1185][1038,1296]
renwu(3,num3, 1250)
print('精選好物')
# 更多互動(dòng)num=25 size=[813,1407][1038,1518]
renwu(4,num4, 1450)
print('更多互動(dòng)')
#好友助力[813,1629][1038,1740]
#推薦直播/視頻 num=4 size=1593 1703
renwu(6,num6, 1650,1)
print('直播視頻')
if __name__ == '__main__':
begin()
總結(jié)
以上所述是小編給大家介紹的基于Python+Appium實(shí)現(xiàn)京東雙十一自動(dòng)領(lǐng)金幣功能,希望對(duì)大家有所幫助,如果大家有任何疑問請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!
如果你覺得本文對(duì)你有幫助,歡迎轉(zhuǎn)載,煩請(qǐng)注明出處,謝謝!
相關(guān)文章
Python re.split方法分割字符串的實(shí)現(xiàn)示例
本文主要介紹了Python re.split方法分割字符串的實(shí)現(xiàn)示例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-08-08
python解決方案:WindowsError: [Error 2]
使用Python的rename()函數(shù)重命名文件時(shí)出現(xiàn)問題,提示 WindowsError: [Error 2] 錯(cuò)誤,需要的朋友可以參考下2016-08-08
python中BackgroundScheduler和BlockingScheduler的區(qū)別
這篇文章主要介紹了python中BackgroundScheduler和BlockingScheduler的區(qū)別,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-07-07
python使用信號(hào)量動(dòng)態(tài)更新配置文件的操作
這篇文章主要介紹了python使用信號(hào)量動(dòng)態(tài)更新配置文件的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-04-04
利用python清除移動(dòng)硬盤中的臨時(shí)文件
本篇文章的目的是在移動(dòng)硬盤插入到電腦的同時(shí),利用Python自動(dòng)化和Windows服務(wù)刪除掉這些臨時(shí)文件。感興趣的朋友可以了解下2020-10-10
python 實(shí)現(xiàn)在Excel末尾增加新行
下面小編就為大家分享一篇python 實(shí)現(xiàn)在Excel末尾增加新行,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2018-05-05
Python中關(guān)于logging模塊的學(xué)習(xí)筆記
在本篇文章里小編給大家整理的是一篇關(guān)于Python中l(wèi)ogging模塊相關(guān)知識(shí)點(diǎn)內(nèi)容,有興趣的朋友們可以參考下。2020-06-06

