1. 程式人生 > >用python實現抽獎小程式的自動抽獎!公司抽獎必背技能!

用python實現抽獎小程式的自動抽獎!公司抽獎必背技能!

不知道你們有沒有玩過無碼科技的小程式抽獎助手,沒有玩過的可以在微信小程式入門搜尋抽獎助手,首頁有很多獎品進行抽獎的,我前幾天發現了之後就把那裡的所有獎品都點了一次,就突發萌想,能不能用 python 來實現自動抽獎啊?這樣就不用我每天都點進去看了,我只需要關心是否中獎就可以了。答案是肯定的,今天就為大家帶來如何實現自動抽獎,解放雙手。

需要知識

  • 會利用 charles 對手機進行抓包
  • 會用 requests 庫

 

嗯,就需要這麼多知識。如果不會抓包的話請自行百度,這裡就不一一展開說了。

1. 分析頁面

我們先開啟 charles 進行準備,然後開啟小程式抽獎助手的首頁,可以看到有每日福利和自助福利兩個專欄,自助福利的下端還有個載入更多的按鈕,這些都是我們需要進行模擬請求的。

 

用python實現抽獎小程式的自動抽獎!公司抽獎必背技能!

 

 

用python實現抽獎小程式的自動抽獎!公司抽獎必背技能!

 

 

用python實現抽獎小程式的自動抽獎!公司抽獎必背技能!

 

 

進群:548377875  即可獲取數十套PDF哦以及大量的教學視訊,祝你早日入門Python!

現在就可以去看看 charles 裡面抓包的資料,很容易就發現下面這幾個請求都是一一對應上面的圖片的資料的。

用python實現抽獎小程式的自動抽獎!公司抽獎必背技能!

 

 

用python實現抽獎小程式的自動抽獎!公司抽獎必背技能!

 

 

 

用python實現抽獎小程式的自動抽獎!公司抽獎必背技能!

 

 

獲得每日福利的獎品資料的請求 url 為

https://lucky.nocode.com/public_lottery?page=1&size=5

而獲得自助福利的獎品資料的請求 url 為

https://lucky.nocode.com/square

點選載入更多的請求 url 為

https://lucky.nocode.com/square?cursor=355&start=447

只是比上面的多了兩個引數,三個 url 請求方式都是 get,可以說是基本不會變的 url。這裡需要注意的是,我們在請求時,新增請求頭需要帶上 authorization 引數,這個翻譯過來時授權的意思,其實就是用來驗證身份的,可以說通過加上這個就是登陸上了微信。

接下來就是看看如何點選抽獎按鈕之後是如何請求的了。

 

用python實現抽獎小程式的自動抽獎!公司抽獎必背技能!

 

 

 

我們先點選下每日福利的抽獎,在 charles 可以看到這個請求

用python實現抽獎小程式的自動抽獎!公司抽獎必背技能!

 

 

請求 url 為

https://lucky.nocode.com/lottery/獎品id/join,

url 和變化的,裡面有該獎品的 id,請求方式是 post,from-data 裡面的資料根據經驗可以知道這是個 13 位的時間戳。這個搞定了,再看看自助福利的有什麼不用。

用python實現抽獎小程式的自動抽獎!公司抽獎必背技能!

 

 

可以看到,請求的都是一樣的,就不多說了。

2. 程式碼實現

這個是獲取每日福利的實現

def __get_public_draw(self):

url = 'https://lucky.nocode.com/public_lottery?page=1&size=5'

response = requests.get(url, headers=self.headers, verify=False)

if response.status_code == 200:

for prize in response.json()['data']:

if not prize['joined'] and '不滿足' not in prize.get('condition_error', '1'):

yield prize['id'], prize['prizes']['data'][0]['name']

else:

print('請求失敗,狀態碼為%s' % response.status_code)

可以左右滑動

這裡需要注意的是,進行請求的時候需要帶上引數 verify 關鍵字引數,這個是設定不驗證證書,如果不設定就會報錯

用python實現抽獎小程式的自動抽獎!公司抽獎必背技能!

 

 

OpenSSL.SSL.Error: [('SSL routines', 'ssl3_get_server_certificate', 'certificate verify failed')]

證書驗證失敗

接著是自助福利的程式碼實現

def __get_welfare(self):

urls = ['https://lucky.nocode.com/square', 'https://lucky.nocode.com/square?cursor=293&start=394']

for url in urls:

response = requests.get(url, headers=self.headers, verify=False)

if response.status_code == 200:

for prize in response.json()['data']:

if not prize['joined']:

yield prize['id'], prize['initiator']['nick_name']

這裡有兩個url,第二個url裡面的引數可以設定成固定的,其他的就不多說了。

最後還有自動抽獎的實現

def __draw_prize(self, prize):

print('正在對%s的獎品進行抽獎' % prize[1])

url = 'https://lucky.nocode.com/lottery/%s/join' % prize[0]

data = {

'form_id': int(time.time()*1000)

}

response = requests.post(url, data=data, headers=self.headers, verify=False).json()

if response.get('data', 0):

print('抽獎成功')

else:

print('抽獎失敗')

因為 time.time() 的結果是帶只有十位整數的 float 數值,所以需要乘於 1000再取整數即可。其他的都沒什麼問題了。

最後

這個程式碼大家可以每天執行一次,這樣就可以把所有的獎品基本都引數抽獎了,中不中是另外一回事,反正我每次都是這樣。

 

用python實現抽獎小程式的自動抽獎!公司抽獎必背技能!