吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 3427|回复: 19
收起左侧

[Python 转载] requests遇到登录需要识别验证码的解决思路

[复制链接]
xhtdtk 发表于 2022-5-2 01:35
本帖最后由 xhtdtk 于 2022-5-2 14:24 编辑

问题如图:
1.png
requests提交的表单数据不仅需要账号密码,还需要识别后的验证码


登录思路:
众所周知,识别图片最简单的第三方库是ddddocr,只需要5行代码就能进行识别
[Python] 纯文本查看 复制代码
import ddddocr
ocr=ddddocr.DdddOcr()
with open('图片路径','rb') as f:
    code_bytes=f.read()
code=ocr.classification(code_bytes)



因此,我们需要先下载验证码图片
[Python] 纯文本查看 复制代码
import requests
url_code='图片地址'
rep_code=requests.get(url_code)
image_code=rep_code.content
with open('需要存放的路径+图片名','wb') as f:
    f.write(image_code)



当然你可以加上请求头
[Python] 纯文本查看 复制代码
import requests
header={
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.127 Safari/537.36'
}
url_code='图片地址'
rep_code=requests.get(url_code,headers=header)
image_code=rep_code.content
with open('需要存放的路径+图片名','wb') as f:
f.write(image_code)



当你满心欢喜的提交登录的表单数据后,可能返回了这样的提示“登录失败,请输入正确的验证码!”
[Python] 纯文本查看 复制代码
import requests
header={
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.127 Safari/537.36'
}
url_login='登录地址'
data_login={
    'username': '账号',
    'password':  '密码',
    'code': ‘ddddocr识别后的验证码’
}
rep_login=requests.post(url_login,headers=header,data=data_login)
print(rep_login.text)

打印的信息为:
{'error': '登录失败,请输入正确的验证码!'}



这可能是因为登录的cookie和获取验证码图片的cookie不相同导致的,所以应该先获取登录页面的cookie并用此cookie下载验证码图片,再用此cookie进行登录
[Python] 纯文本查看 复制代码
import requests
import ddddocr

#先获取登录页面的cookie并添加到请求头(登录页面和登录地址可能不是同一地址)
header={
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.127 Safari/537.36'
}
url_loginPage='页面地址'
rep_loginPage=requests.get(url_loginPage,headers=header)
cookies_loginPage=rep_loginPage.cookies.get_dict()
cookie=''
for eachCookie in cookies_loginPage.keys():
    cookie=cookie+eachCookie+'='+cookies_loginPage[eachCookie]+';'
header['cookie']=cookie[:-1]

#下载验证码图片
url_code='图片地址'
rep_code=requests.get(url_code,headers=header)
image_code=rep_code.content
with open('需要存放的路径+图片名','wb') as f:
    f.write(image_code)

#使用ddddocr识别验证码
ocr=ddddocr.DdddOcr()
with open('图片路径','rb') as f:
    code_bytes=f.read()
code=ocr.classification(code_bytes)

#登录(登录页面和登录地址可能不是同一地址)
url_login='登录地址'
data_login={
    'username': '账号',
    'password':  '密码',
    'code': ‘ddddocr识别后的验证码’
}
rep_login=requests.post(url_login,headers=header,data=data_login)
print(rep_login.text)



谢谢!

免费评分

参与人数 7吾爱币 +12 热心值 +5 收起 理由
苏紫方璇 + 7 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
qazmc1314 + 1 + 1 我很赞同!
zhhmok + 1 我很赞同!
夫子点灯 + 1 谢谢@Thanks!
ttgria + 1 + 1 热心回复!
为之奈何? + 1 + 1 我很赞同!
ZhenMex + 1 谢谢@Thanks!

查看全部评分

本帖被以下淘专辑推荐:

  • · 好帖|主题: 549, 订阅: 87

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

ReLoading 发表于 2022-5-2 01:54
[Python] 纯文本查看 复制代码
# 何必多此一举,直接拿到数据流识别图片,无需保存图片文件
code_bytes=rep_code.content
code=ocr.classification(code_bytes)

免费评分

参与人数 1吾爱币 +3 热心值 +1 收起 理由
pwp + 3 + 1 谢谢@Thanks!

查看全部评分

 楼主| xhtdtk 发表于 2022-5-2 01:59
ReLoading 发表于 2022-5-2 01:54
[mw_shl_code=python,true]# 何必多此一举,直接拿到数据流识别图片,无需保存图片文件
code_bytes=rep_co ...

哈哈,的确是的
nbwww 发表于 2022-5-2 07:33
封心棒棒糖 发表于 2022-5-2 07:40
requests session 会话保持
slbcmgn 发表于 2022-5-2 08:16
跟着大佬去学习
asd885522 发表于 2022-5-2 08:19
大佬威武          学习了
sitiger 发表于 2022-5-2 08:46
小学一手。session keep connect/ddddocr module
lnshijia 发表于 2022-5-2 09:26
学习了,借鉴下
XiaoZouYu 发表于 2022-5-2 09:37
用session好一点,省去一些繁琐
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-25 06:31

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表