问题描述
Python3 模拟登录一个网站 验证码总是错误
问题出现的环境背景及自己尝试过哪些方法
先请求了获取验证码的接口,再POST提交登录表单,但是验证码一直错误,百度无果,如果有大神愿意指点一二非常感谢!
相关代码
// 请把代码文本粘贴到下方(请勿用图片代替代码)
# -*- coding: utf-8 -*-
from urllib import parse
import requests
# python2 和 python3的兼容代码
try:
# python2 中
import cookielib
print(f"user cookielib in python2.")
except:
# python3 中
import http.cookiejar as cookielib
print(f"user cookielib in python3.")
# session代表某一次连接
mSession = requests.session()
# 因为原始的session.cookies 没有save()方法,所以需要用到cookielib中的方法LWPCookieJar,这个类实例化的cookie对象,就可以直接调用save方法。
mSession.cookies = cookielib.LWPCookieJar(filename = "mafengwoCookies.txt")
login_url='https://dianpos-agent.91dbq.com/agent/operatorLogin.action'
#登录后才能访问的网页
url = 'https://dianpos-agent.91dbq.com/agent/main.action'
randomCode="-0"
userAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36"
header = {
"origin": "https://dianpos-agent.91dbq.com",
"Referer": "https://dianpos-agent.91dbq.com/agent/operatorLogout.action",
'User-Agent': userAgent,
}
def login(account, password):
# 模拟登录
print ("开始模拟登录")
print(mSession.cookies)
codeurl = 'https://dianpos-agent.91dbq.com/agent/generateRandomCode.action'
valcode = mSession.get(codeurl)
print(mSession.cookies)
f = open('valcode.png', 'wb')
# 将response的二进制内容写入到文件中
f.write(valcode.content)
# 关闭文件流对象
f.close()
code = input('请输入验证码:')
randomCode=str(code)
postData = {
"username": account,
"password": password,
"randomCode": randomCode
}
print(mSession.cookies)
print(postData)
postData=parse.urlencode(postData).encode('utf-8')
# 使用session直接post请求
responseRes = mSession.post(login_url, data=postData, headers=header)
print(mSession.cookies)
# 无论是否登录成功,状态码一般都是 statusCode = 200
print(f"statusCode = {responseRes.status_code}")
print(f"text = {responseRes.text}")
# 登录成功之后,将cookie保存在本地文件中
mSession.cookies.save()
if __name__ == '__main__':
login("xxx", "xxx")
你期待的结果是什么?实际看到的错误信息又是什么?
希望能正确获取到验证码,提交并成功登录进去!