Python自動化刷投票指令碼開發,微信投票再也不需要發紅包了

嬌兮心有之發表於2018-11-21

歡迎點選右上角關注小編,除了分享技術文章之外還有很多福利,私信學習資料可以領取包括不限於Python實戰演練、大航海計劃、BAT內推、學習資料等。

Python自動化刷投票指令碼開發,微信投票再也不需要發紅包了

想要學習Python?Python學習交流群:973783996滿足你的需求,資料都已經上傳群檔案,可以自行下載!

前言

現在部分比賽為了推廣贊助商或者比賽本身,需要參賽隊伍進行網上拉票,甚至票數還會佔一定比例的成績。因此,刷票也就應運而生了。此次我們團隊參加一個比賽,就需要網上投票決出前幾名,作為一位技術人員,當然是得“解決”技術能解決的問題嘛,所以就寫了個刷投票外掛來刷一刷。

原理

刷票的原理很簡單,就是相當於模擬人登入網站去投票,只是把這個過程程式化,讓程式代替人到網站去投票。具體一點說把,首先是客戶端(我們)發出請求(Request)給服務端(投票網站),跟他們說,我們需要看他們網站的資訊,然後服務端就會回覆(Respose)我們,我們再把填好的表單發給他們(Request),他們收到後就會回覆我們(Respose)。

Python自動化刷投票指令碼開發,微信投票再也不需要發紅包了

 

主要內容

  • 分析網站
  • 表單提交
  • 構造代理IP池

1. 分析網站

由於每個網站需要提交的資訊都不一樣,那麼首先我們需要對目標網站進行相對應的分析,找出他們的表單介面(也就是URL或者叫網址)以及我們需要提交的資訊。

1.1 收集資訊

使用F12,開啟稽核元素,點選Network,真實地進行一次表單提交

框住的兩個內容就是我們需要知道的一部分表單資訊

- Request URL:請求網址,我們提交的資訊就是傳到這個url裡面去

- Request method:請求方法,我們提交的方法

Python自動化刷投票指令碼開發,微信投票再也不需要發紅包了

 

以上就是需要獲得的基本資訊,根據這些資訊我們就可以編寫刷票外掛了,但作為一個對自身有高標準嚴要求的程式設計師來說,僅僅這樣就足夠嗎?當然不會啦,我們得找一找這個提交過程有沒有什麼漏洞。

怎麼找?分析原始碼,找了找,果真還讓我找到了!

Python自動化刷投票指令碼開發,微信投票再也不需要發紅包了

 

看出什麼沒有,它這裡有兩個致命的漏洞:

1. 它允許提交3支或3支以上的隊伍,並且沒有限制最大數量,只限制了最少數量。

2. 它沒有進行相同資料的篩選。

表單提交

構造表單資訊

# 請求頭資訊
headers = {
 'Accept': '*/*',
 'Accept-Encoding': 'gzip',
 'Accept-Language': 'zh-CN',
 'Connection': 'keep-alive',
 'Content-Length': '16',
 'Content-Type': 'application/x-www-form-urlencoded',
 'Host': 'www.dingnf.com',
 'Origin': 'http://www.dingnf.com',
 'Referer': 'http://www.dingnf.com/active/wxws_s',
 'User-Agent': 'Mozilla/4.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.3029.110 Safari/537.36',
 'X-Requested-With': 'XMLHttpRequest'
}
 
# post表單網址
url = "http://www.dingnf.com/active/wxws_t"
params = {'ids': ['22', '22', '22']}
r = requests.post(url=url, data=params, headers=headers, proxies=proxies)

構造代理IP池

構造IP代理容器

def WriteIPadress():
 all_url = [] # 儲存IP地址的容器
 # 代理IP的網址
 url = "http://api.xicidaili.com/free2016.txt"
 r = requests.get(url=url)
 all_url = re.findall("d+.d+.d+.d+:d+",r.text)
 with open("D:\code\python\new\Brush ticket\IP.txt",'w') as f:
 for i in all_url:
 f.write(i)
 f.write('
')
 return all_url

主函式

Python自動化刷投票指令碼開發,微信投票再也不需要發紅包了

 

由於某些IP地址是存在問題的,所以需要設定異常處理,以便讓程式能夠正常執行,而API的資料每15分鐘更新一次,我們每跑完一遍列表的時間也差不多,因此也就不做其他處理了。

執行日誌

Python自動化刷投票指令碼開發,微信投票再也不需要發紅包了

 

程式碼

Python自動化刷投票指令碼開發,微信投票再也不需要發紅包了

相關文章