一、准备
安装requests、BeautifulSoup、pillow、pytesseract库,直接pip install xx就可以。
二、 登录提交测试
1、输入错误账号密码进行模拟登录,通过开发者工具确定登录提交的header 和 表单参数以及验证码对应的请求链接。
可以参考以下链接:https://blog.csdn.net/will4906/article/details/77124615/
2、直接上代码
def get_code():
# 根据图片获取验证码,可以根据验证码类型选择适合的ImageFilter进行处理
# 如果是一些等式验证码,可以手动进行输入,还没进行过测试
i = Image.open('img/valcode.png')
# filterimg = imgry.filter(ImageFilter.MedianFilter(5))#在每个像素点为中心的5x5区域25个像素点中选择出现次数最多的像素作为新的值
# filterimg = imgry.filter(ImageFilter.MaxFilter(1))#在每个像素点为中心的5x5区域25个像素点中选择最大的像素作为新的值
# filterimg = imgry.filter(ImageFilter.DETAIL)#细节增强
# filterimg = imgry.filter(ImageFilter.SHARPEN)#锐化
filterimg = i.convert('L')#图像加强,二值化
x,y = filterimg.size
# 使用白色来填充背景 imgry->filterimg->p
p = Image.new('RGBA', filterimg.size, (255,255,255))
p.paste(filterimg, (0, 0, x, y), filterimg)
# p = p.filter(ImageFilter.CONTOUR) #轮廓滤波
p = p.filter(ImageFilter.EDGE_ENHANCE_MORE)#深度边缘增强滤波
p = p.filter(ImageFilter.SHARPEN)#锐化
p = p.filter(ImageFilter.DETAIL)#细节增强
p.save('img/after.png')
word = None
newVerify = Image.open('img/after.png')
text = image_to_string(newVerify)#读取验证码图片上面的文字
words = text.split()
word = ''.join(words)
return word
def get_ltvalue(url,r_session):
#进行验证码读取和隐藏表单参数的获取
page = r_session.get(url)
content= page.text
soup = BeautifulSoup(content, 'lxml')
lt_value = soup.find('input', {'name': 'lt'}).get('value')
cookie_dicts = requests.utils.dict_from_cookiejar(page.cookies)
codeurl = 'https://**/imgcode' #验证码请求url
valcode = r_session.get(codeurl)
with open('img/valcode.png', 'wb') as f:
# 将response的二进制内容写入到文件中
f.write(valcode.content)
# code = input('请输入验证码:')
# code = str(code)
code = get_code()#自动获取验证码
return lt_value,cookie_dicts,code
def main(username,password):
login_url = "https://*****" #登录url,根据header上面的request url确定
header = {
"Content-Type": "application/x-www-form-urlencoded",
"Host": "", #根据你的请求header填入
"Origin": "",#根据你的请求header填入
"Connection": "keep-alive",
"Referer": "",#根据你的请求header填入
"User-Agent":"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36"
}
r_session = requests.Session() #同一个Session实例发出的所有请求都保持同一个cookies
while True:
lt_value,cookie_dicts,code = get_ltvalue(login_url,r_session)
login_params = {
"lt": lt_value,
"username": username,
"password": password,
"verifyCode": code
}
r1 = r_session.post(login_url, data=login_params,headers=header,cookies=cookie_dicts)
soup = BeautifulSoup(r1.text, 'lxml')
text = soup.find('div', id='msg') #登录成功退出循环获取验证码
if text:
text = r1.text.encode('utf-8') #获取登录后的页面
print(text)
break
if __name__ == "__main__":
main("user","passwd")