python做模拟网站登录遇到的问题

IT~搬运工 2017-08-02 01:52:05
#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)

我执行了之后为什么报404错误,如果才能正确的模拟登陆!
...全文
378 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
IT~搬运工 2017-08-09
  • 打赏
  • 举报
回复
每天一顶,有版主吗?
IT~搬运工 2017-08-08
  • 打赏
  • 举报
回复
有没有人回答
IT~搬运工 2017-08-05
  • 打赏
  • 举报
回复
难道没有人回答吗?,一楼随便百度就有了,还用得着你回
宇风 -飞扬 2017-08-02
  • 打赏
  • 举报
回复
建议你看看, 这是之前我写的模拟登陆http://blog.csdn.net/EB_NUM/article/details/75267137

37,719

社区成员

发帖
与我相关
我的任务
社区描述
JavaScript,VBScript,AngleScript,ActionScript,Shell,Perl,Ruby,Lua,Tcl,Scala,MaxScript 等脚本语言交流。
社区管理员
  • 脚本语言(Perl/Python)社区
  • IT.BOB
加入社区
  • 近7日
  • 近30日
  • 至今

试试用AI创作助手写篇文章吧