python自动抽奖_「懒人必备」用Python自动抽奖
不知道你們有沒(méi)有玩過(guò)無(wú)碼科技的小程序抽獎(jiǎng)助手,沒(méi)有玩過(guò)的可以在微信小程序入門搜索抽獎(jiǎng)助手,首頁(yè)有很多獎(jiǎng)品進(jìn)行抽獎(jiǎng)的,我前幾天發(fā)現(xiàn)了之后就把那里的所有獎(jiǎng)品都點(diǎn)了一次,就突發(fā)萌想,能不能用python來(lái)實(shí)現(xiàn)自動(dòng)抽獎(jiǎng)啊?這樣就不用我每天都點(diǎn)進(jìn)去看了,我只需要關(guān)心是否中獎(jiǎng)就可以了。答案是肯定的,今天就為大家?guī)?lái)如何實(shí)現(xiàn)自動(dòng)抽獎(jiǎng),解放雙手。
需要知識(shí)
會(huì)利用charles對(duì)手機(jī)進(jìn)行抓包
會(huì)用requests庫(kù)
嗯,就需要這么多知識(shí)。如果不會(huì)抓包的話請(qǐng)自行百度,這里就不一一展開(kāi)說(shuō)了。
1.分析頁(yè)面
我們先打開(kāi)charles進(jìn)行準(zhǔn)備,然后打開(kāi)小程序抽獎(jiǎng)助手的首頁(yè),可以看到有每日福利和自助福利兩個(gè)專欄,自助福利的下端還有個(gè)加載更多的按鈕,這些都是我們需要進(jìn)行模擬請(qǐng)求的。
現(xiàn)在就可以去看看charles里面抓包的數(shù)據(jù),很容易就發(fā)現(xiàn)下面這幾個(gè)請(qǐng)求都是一一對(duì)應(yīng)上面的圖片的數(shù)據(jù)的。
獲得每日福利的獎(jiǎng)品數(shù)據(jù)的請(qǐng)求url為https://lucky.nocode.com/public_lottery?page=1&size=5,而獲得自助福利的獎(jiǎng)品數(shù)據(jù)的請(qǐng)求url為https://lucky.nocode.com/square,點(diǎn)擊加載更多的請(qǐng)求url為https://lucky.nocode.com/square?cursor=355&start=447,只是比上面的多了兩個(gè)參數(shù),三個(gè)url請(qǐng)求方式都是get,可以說(shuō)是基本不會(huì)變的url。這里需要注意的是,我們?cè)谡?qǐng)求時(shí),添加請(qǐng)求頭需要帶上authorization參數(shù),這個(gè)翻譯過(guò)來(lái)時(shí)授權(quán)的意思,其實(shí)就是用來(lái)驗(yàn)證身份的,可以說(shuō)通過(guò)加上這個(gè)就是登陸上了微信。
接下來(lái)就是看看如何點(diǎn)擊抽獎(jiǎng)按鈕之后是如何請(qǐng)求的了。
我們先點(diǎn)擊下每日福利的抽獎(jiǎng),在charles可以看到這個(gè)請(qǐng)求
請(qǐng)求url為https://lucky.nocode.com/lottery/獎(jiǎng)品id/join,url和變化的,里面有該獎(jiǎng)品的id,請(qǐng)求方式是post,from-data里面的數(shù)據(jù)根據(jù)經(jīng)驗(yàn)可以知道這是個(gè)13位的時(shí)間戳。這個(gè)搞定了,再看看自助福利的有什么不用。
可以看到,請(qǐng)求的都是一樣的,就不多說(shuō)了。
2.代碼實(shí)現(xiàn)
這個(gè)是獲取每日福利的實(shí)現(xiàn)
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('請(qǐng)求失敗,狀態(tài)碼為%s'% response.status_code)
可以左右滑動(dòng)
這里需要注意的是,進(jìn)行請(qǐng)求的時(shí)候需要帶上參數(shù)verify關(guān)鍵字參數(shù),這個(gè)是設(shè)置不驗(yàn)證證書(shū),如果不設(shè)置就會(huì)報(bào)錯(cuò)
OpenSSL.SSL.Error: [('SSL routines','ssl3_get_server_certificate','certificate verify failed')]
證書(shū)驗(yàn)證失敗
接著是自助福利的代碼實(shí)現(xiàn)
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']
這里有兩個(gè)url,第二個(gè)url里面的參數(shù)可以設(shè)置成固定的,其他的就不多說(shuō)了。
最后還有自動(dòng)抽獎(jiǎng)的實(shí)現(xiàn)
def__draw_prize(self, prize):? ? ? ?print('正在對(duì)%s的獎(jiǎng)品進(jìn)行抽獎(jiǎng)'% 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('抽獎(jiǎng)成功')? ? ? ?else:? ? ? ? ? ?print('抽獎(jiǎng)失敗')
因?yàn)閠ime.time()的結(jié)果是帶只有十位整數(shù)的float數(shù)值,所以需要乘于1000再取整數(shù)即可。其他的都沒(méi)什么問(wèn)題了。
最后
這個(gè)代碼大家可以每天運(yùn)行一次,這樣就可以把所有的獎(jiǎng)品基本都參數(shù)抽獎(jiǎng)了,中不中是另外一回事,反正我每次都是這樣
我也只能祝你們好運(yùn)了。
總結(jié)
以上是生活随笔為你收集整理的python自动抽奖_「懒人必备」用Python自动抽奖的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: AVI格式详解(转)
- 下一篇: 程序员的九阳真经