python自动抽奖_「懒人必备」用Python自动抽奖
不知道你們有沒有玩過無碼科技的小程序抽獎助手,沒有玩過的可以在微信小程序入門搜索抽獎助手,首頁有很多獎品進行抽獎的,我前幾天發現了之后就把那里的所有獎品都點了一次,就突發萌想,能不能用python來實現自動抽獎啊?這樣就不用我每天都點進去看了,我只需要關心是否中獎就可以了。答案是肯定的,今天就為大家帶來如何實現自動抽獎,解放雙手。
需要知識
會利用charles對手機進行抓包
會用requests庫
嗯,就需要這么多知識。如果不會抓包的話請自行百度,這里就不一一展開說了。
1.分析頁面
我們先打開charles進行準備,然后打開小程序抽獎助手的首頁,可以看到有每日福利和自助福利兩個專欄,自助福利的下端還有個加載更多的按鈕,這些都是我們需要進行模擬請求的。
現在就可以去看看charles里面抓包的數據,很容易就發現下面這幾個請求都是一一對應上面的圖片的數據的。
獲得每日福利的獎品數據的請求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參數,這個翻譯過來時授權的意思,其實就是用來驗證身份的,可以說通過加上這個就是登陸上了微信。
接下來就是看看如何點擊抽獎按鈕之后是如何請求的了。
我們先點擊下每日福利的抽獎,在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)? ? ? ?ifresponse.status_code ==200:? ? ? ? ? ?forprizeinresponse.json()['data']:? ? ? ? ? ? ? ?ifnotprize['joined']and'不滿足'notinprize.get('condition_error','1'):? ? ? ? ? ? ? ? ? ?yieldprize['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']? ? ? ?forurlinurls:? ? ? ? ? ?response = requests.get(url, headers=self.headers, verify=False)? ? ? ? ? ?ifresponse.status_code ==200:? ? ? ? ? ? ? ?forprizeinresponse.json()['data']:? ? ? ? ? ? ? ? ? ?ifnotprize['joined']:? ? ? ? ? ? ? ? ? ? ? ?yieldprize['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()? ? ? ?ifresponse.get('data',0):? ? ? ? ? ?print('抽獎成功')? ? ? ?else:? ? ? ? ? ?print('抽獎失敗')
因為time.time()的結果是帶只有十位整數的float數值,所以需要乘于1000再取整數即可。其他的都沒什么問題了。
最后
這個代碼大家可以每天運行一次,這樣就可以把所有的獎品基本都參數抽獎了,中不中是另外一回事,反正我每次都是這樣
我也只能祝你們好運了。
總結
以上是生活随笔為你收集整理的python自动抽奖_「懒人必备」用Python自动抽奖的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: AVI格式详解(转)
- 下一篇: websocket python爬虫_p