用python來玩好玩的之自動抽獎

不知道大家有沒有玩過無碼科技的小程序抽獎助手,沒有玩過的能夠在微信小程序入門搜索抽獎助手,首頁有不少獎品進行抽獎的,我前幾天發現了以後就把那裏的全部獎品都點了一次,就突發萌想,能不能用python來實現自動抽獎啊?這樣就不用我天天都點進去看了,我只須要關心是否中獎就能夠了。答案是確定的,今天就爲你們帶來如何實現自動抽獎,解放雙手。
python

須要知識json

  • 會利用charles對手機進行抓包小程序

  • 會用requests庫微信小程序

嗯,就須要這麼多知識。若是不會抓包的話請自行百度,這裏就不一一展開說了。微信

1.分析頁面異步

咱們先打開charles進行準備,而後打開小程序抽獎助手的首頁,能夠看到有每日福利和自助福利兩個專欄,自助福利的下端還有個加載更多的按鈕,這些都是咱們須要進行模擬請求的。
post

如今就能夠去看看charles裏面抓包的數據,很容易就發現下面這幾個請求都是一一對應上面的圖片的數據的。ui

得到每日福利的獎品數據的請求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參數,這個翻譯過來時受權的意思,其實就是用來驗證身份的,能夠說經過加上這個就是登錄上了微信。url

接下來就是看看如何點擊抽獎按鈕以後是如何請求的了。spa

咱們先點擊下每日福利的抽獎,在charles能夠看到這個請求

請求url爲https://lucky.nocode.com/lottery/獎品id/join,url和變化的,裏面有該獎品的id,請求方式是post,from-data裏面的數據根據經驗能夠知道這是個13位的時間戳。這個搞定了,再看看自助福利的有什麼不用。

能夠看到,請求的都是同樣的,就很少說了。

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關鍵字參數,這個是設置不驗證證書,若是不設置就會報錯

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再取整數便可。其餘的都沒什麼問題了。

最後


這個代碼你們能夠天天運行一次,這樣就能夠把全部的獎品基本都參數抽獎了,中不中是另一回事,反正我每次都是這樣


我也只能祝大家好運了。

ps:若是文章對你有用的話,不妨動動小手點贊轉發下?

推薦閱讀:

python使用異步每秒鐘就能下載一張高清大圖,快不快?

爬蟲速度太慢?來試試用異步協程提速吧!


平常學python

代碼不止bug,還有美和樂趣

相關文章
相關標籤/搜索