Python自動化刷投票指令碼開發程式分享
Python自動化刷投票指令碼開發程式分享
前言
現在部分比賽為了推廣贊助商或者比賽本身,需要參賽隊伍進行網上拉票,甚至票數還會佔一定比例的成績。因此,刷票也就應運而生了。此次我們團隊參加一個比賽,就需要網上投票決出前幾名,作為一位技術人員,當然是得“解決”技術能解決的問題嘛,所以就寫了個刷投票外掛來刷一刷。
原理
刷票的原理很簡單,就是相當於模擬人登入網站去投票,只是把這個過程程式化,讓程式代替人到網站去投票。具體一點說把,首先是客戶端(我們)發出請求(Request)給服務端(投票網站),跟他們說,我們需要看他們網站的資訊,然後服務端就會回覆(Respose)我們,我們再把填好的表單發給他們(Request),他們收到後就會回覆我們(Respose)。
主要內容
- 分析網站
- 表單提交
- 構造代理IP池
1. 分析網站
由於每個網站需要提交的資訊都不一樣,那麼首先我們需要對目標網站進行相對應的分析,找出他們的表單介面(也就是URL或者叫網址)以及我們需要提交的資訊。
1.1 收集資訊
使用F12,開啟稽核元素,點選Network,真實地進行一次表單提交
框住的兩個內容就是我們需要知道的一部分表單資訊
- Request URL:請求網址,我們提交的資訊就是傳到這個url裡面去
- Request method:請求方法,我們提交的方法
以上就是需要獲得的基本資訊,根據這些資訊我們就可以編寫刷票外掛了,但作為一個對自身有高標準嚴要求的程式設計師來說,僅僅這樣就足夠嗎?當然不會啦,我們得找一找這個提交過程有沒有什麼漏洞。
怎麼找?分析原始碼,找了找,果真還讓我找到了!
看出什麼沒有,它這裡有兩個致命的漏洞:
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.aivtp.com', 'Referer': 'http://www.aivote.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://www.ch1234.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
主函式
由於某些IP地址是存在問題的,所以需要設定異常處理,以便讓程式能夠正常執行,而API的資料每15分鐘更新一次,我們每跑完一遍列表的時間也差不多,因此也就不做其他處理了。
執行日誌