初学Python有了一段时间,寒假里又看了一些Web编程方面的知识,就写了一个实现bbs自动登录和发帖的Python脚本
由于本人学校BBS站首页使用js加载,貌似通过首页登录不大可行,然后就分析表单,发现是通过POST一些data到特定的地址,之后
获取返回的cookie。这样就好办了,废话不多说,上代码。(初学,不够 Pythonic,见谅)
#-*-coding:utf-8-*-
#lilybbs.py
#Author:Sky_Money
#Python实现自动登录BBS并发帖
import urllib,urllib2
#帐号和密码,你懂的
username=''
password=''
baseurl='http://bbs.nju.edu.cn/vd45734/bbslogin?type=2'
postdata=urllib.urlencode({
'id':username,
'pw':password,
'lasturl':''})
req=urllib2.Request(
url=baseurl,
data=postdata)
result=urllib2.urlopen(req).read()
#从返回的Content中抓取Cookie
start=result.find("('")+2
end=result.find("')")
cookie=result[start:end]
split1=cookie.find('N')
split2=cookie.find('+')
u_num=int(cookie[0:split1])
u_id=cookie[split1+1:split2]
u_key=int(cookie[split2+1:])
footkey=217872412
#下面是发帖验证
testUrl='http://bbs.nju.edu.cn/vd78013/bbssnd?board=test'
sendCookie="_U_NUM=%d;_U_UID=%s;_U_KEY=%d;FOOTKEY=%d"%(u_num+2,u_id
,u_key-2,footkey)
#发送的Headers,必须要有Cookie
sendheaders = {
'Host': 'bbs.nju.edu.cn',
'Connection': 'keep-alive',
'User-Agent': 'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/535.2 (KHTML,like Gecko) Chrome/15.0.874.121 Safari/535.2',
'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
'Accept-Encoding': 'gzip,deflate,sdch',
'Accept-Language': 'zh-CN,zh;q=0.8',
'Accept-Charset': 'GBK,utf-8;q=0.7,*;q=0.3',
}
sendheaders['Cookie']=sendCookie
#发帖的data主体
body=urllib.urlencode({'title':'test',
'pid':'0',
'reid':'0',
'signature':'1',
'autocr':'on',
'text':'oh yeah'})
returnedReq=urllib2.Request(
url=testUrl,
data=body,
headers=sendheaders)
returnedResult=urllib2.urlopen(returnedReq).read()
print returnedResult
代码一路到底,比较丑,就这样看看了
主要使用了urllib和urllib2模块。
先是登录问题,需要POST的数据可以通过FF+httpfox查看,这个比较方便。知道需要的数据之后就依样画葫芦,模拟发送即可。
其中发送的url中 /vd 后面跟的一串数字就是随机指派,这个其实可以通过随机数分配,没有特定的要求.
之后通过抓取发送得到的Cookie获取发帖‘令牌’,其中Cookie分为四部分,_U_NUM,_U_UID,_U_KEY,FOOTKEY,其中 _U_UID是用户名,_U_NUM和_U_KEY是返回的一串数值,需要注意的是,发帖是的Cookie需要将 _U_NUM值加2,_U_KEY值减2,这个比较奇怪,可能是本校bbs设置的问题。FOOTKEY貌似就是随意指派的一串数字。
以上就是自动登录并发帖的简单脚本,现在发现Python写这玩意还是挺好玩,接下来想考虑怎么登录WebQQ,这个貌似需要了解TX的QQ通讯协议了....