37,719
社区成员
发帖
与我相关
我的任务
分享
#coding:gbk
import urllib.request
import urllib.parse
import http.cookiejar,re
opener = None
# 带Cookie访问
def openurl(parms):
global opener
if opener == None:
#cookie设置
cj = http.cookiejar.CookieJar()
opener = urllib.request.build_opener(urllib.request.HTTPCookieProcessor(cj))
ret = opener.open(parms)
return ret
'''
通用的登陆DZ论坛
参数说明parms:
username:用户名(必填),
password :密码(必填),
domain:网站域名,注意格式必须是:http://www.xxx.xx/(必填),
answer:问题答案,
questionid:问题ID,
referer:跳转地址
这里使用了可变关键字参数(相关信息可参考手册)
'''
def login_dz(**parms):
#初始化
parms_key = ['domain','answer','password','questionid','referer','username']
arg = {}
for key in parms_key:
if key in parms:
arg[key] = parms[key]
else:
arg[key] = ''
# 获取formhash
pre_login = arg[
'domain'] + 'member.php?mod=logging&action=login&infloat=yes&handlekey=login&inajax=1&ajaxtarget=fwin_content_login'
html = openurl(pre_login).read().decode('gbk')
patt = re.compile(r'.*?name="formhash".*?value="(.*?)".*?')
formhash = patt.search(html)
if not formhash:
raise Exception('GET formhash Fail!')
formhash = formhash.group(1)
print(formhash)
# 登陆
postdata = {
'answer': arg['answer'],
'formhash': formhash,
'password': arg['password'],
'questionid': 0 if arg['questionid'] == '' else arg['questionid'],
'referer': arg['domain'] if arg['referer'] == '' else arg['referer'],
'username': arg['username'],
}
postdata = urllib.parse.urlencode(postdata)
postdata = postdata.encode('utf-8')
req = urllib.request.Request(
url=arg[
'domain'] + 'member.php?mod=logging&action=login&loginsubmit=yes&handlekey=login&loginhash=LCaB3&inajax=1',
data=postdata
)
html = openurl(req).read().decode('gbk')
# 假设返回假
flag = False
if 'succeedhandle_login' in html:
flag = True
return flag
# 代码开始
# 用户名 及 密码
while True:
user = input('input your username:')
pwd = input('input your password:')
if len(user) != 0 and len(pwd) != 0:
break
print('输入错误')
# 测试网站
dom='http://bbs.zhoushan.cn/'
try:
flag = login_dz(username=user,password=pwd,domain=dom)
if not flag:
print('登陆失败!')
exit(0)
else:
print('登陆成功')
html = openurl('http://bbs.zhoushan.cn/forum.php').read(10000).decode('gbk')
patt = re.compile(r'积分:(.*?)<')
jf = patt.search(html)
jf = jf.group(1)
print('当前用户积分数量为:%s' % jf)
except Exception as e:
print('Error:',e)