最简单的灌水机


#! /usr/bin/python
import urllib, urllib2, cookielib
import re, time
#####################################
#
# Globals
#
#####################################
site = 'http://www.**********.com.cn/bbs'
params = {'title':'Re:', 'body':'Up Up', 'userface':'1'}
data = urllib.urlencode(params)
####################################
#
# Store the cookie
#
####################################
cj = cookielib.CookieJar()
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj))
########################
#
# setup connection
#
########################
conn = opener.open(site + '/index.asp')
####################################
#
# Find the passcode and prompt user
#
####################################
conn  = opener.open(site + '/code.asp')
conn.read(54) # the header of bitmap file
debug = ['', '', '', '', '', '', '', '', '', '']
s = ['', '', '', '']
bg = '\xee\xee\xee'
for x in range(0, 10):
for y in range(0, 4):
  for z in range(0, 10):
   data = conn.read(3)
   if data == bg:
    s[y] += '1'
    debug[x] += ' '
   else:
    s[y] += '0'
    debug[x] += '#'
  #debug[x] += '|'
for x in range (9, -1, -1):
print debug[x]

passcode = raw_input('Please input passcode as above: ')
params = {'username':'elf_cr', 'UserPassword':'spirit', 'passcode':passcode}
data = urllib.urlencode(params)
req = urllib2.Request(site + '/chkuserj.asp', data)
conn = opener.open(req);
##############################
#
# find titles
#
##############################
conn = opener.open(site + '/jj.asp?fenlei=3')
reo = re.compile(r'titleid=(\d+)');
f = conn.readlines()
for line in f:
    if line.find('titleid=') != -1:
        m = reo.search(line);
        tid = m.group(1)
        # post my replies
        print 'Re: ' + tid
        conn = opener.open(site + '/saveh.asp?fenlei=2&titleid=' + tid, data)
        conn.close()

主要是学习了一下如何使用urllib, urllib2等和HTTP有关的module。能很快写出来的一个重要原因是网站的验证码是非常简单的24位BMP。而且没有任何的变形,所以很好识别。但是我比较懒,就没有做10个数字的图片来比较,而是自己手工输入验证码。

另外就是练习了一下re这个module。

昨天晚上刷了一下墙,搞出来400来分。这个程序还是有很多缺陷的。比如我应该做一个回帖的Sequence,从里边随机抽取内容,而不是使用一个固定的字符串来作为回帖内容。还有就是发贴延时了什么的。