本文主要是介绍requests用图鉴打码平台登录图鉴以及登录古诗文网,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
'''
验证码处理:
1.直接把浏览器里面的cookie拿出来直接用
2.手动编写验证码识别的功能(深度学习)
3.第三方打码平台(收费)超级鹰,图鉴等
http://www.ttshitu.com/
'''
import base64
import json
import requests
# 一、图片文字类型(默认 3 数英混合):
# 1 : 纯数字
# 1001:纯数字2
# 2 : 纯英文
# 1002:纯英文2
# 3 : 数英混合
# 1003:数英混合2
# 4 : 闪动GIF
# 7 : 无感学习(独家)
# 11 : 计算题
# 1005: 快速计算题
# 16 : 汉字
# 32 : 通用文字识别(证件、单据)
# 66: 问答题
# 49 :recaptcha图片识别
# 二、图片旋转角度类型:
# 29 : 旋转类型
#
# 三、图片坐标点选类型:
# 19 : 1个坐标
# 20 : 3个坐标
# 21 : 3 ~ 5个坐标
# 22 : 5 ~ 8个坐标
# 27 : 1 ~ 4个坐标
# 48 : 轨迹类型
#
# 四、缺口识别
# 18 : 缺口识别(需要2张图 一张目标图一张缺口图)
# 33 : 单缺口识别(返回X轴坐标 只需要1张图)
# 五、拼图识别
# 53:拼图识别# requests+图鉴识别验证码
def login():# 请求到图片的地址,提取图片的b64以及imgidverfi_url = 'https://admin.ttshitu.com/captcha_v2'session = requests.session()resp = session.get(verfi_url)img = resp.json()result = base64_api('18720180853','20010119yx',img['img'],typeid=3)login_url = 'https://admin.ttshitu.com/common/api/login/user' #post的请求headers = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36',}data = {'captcha': result,'developerFlag': False,'imgId': img['imgId'],'needCheck': True,'password': '20010119yx','userName': '18720180853',}resp = session.post(url=login_url,json=data)print(resp.text)def base64_api(uname, pwd, img, typeid):# with open(img, mode='rb') as f:# base64_data = base64.b64encode(f.read()) # f.read()读取的是字节,=》把字节变成一堆杂乱的b64字符串# b64 = base64_data.decode() #b64是字符串(图片变过来的)data = {"username": uname, "password": pwd, "typeid": typeid, "image": img}result = json.loads(requests.post("http://api.ttshitu.com/predict", json=data).text)if result['success']:return result["data"]["result"]else:#!!!!!!!注意:返回 人工不足等 错误情况 请加逻辑处理防止脚本卡死 继续重新 识别return result["message"]return ""if __name__ == "__main__":login()
总结:
1.post请求要根据cotent-type的不同选择不同的参数
上图要用json参数
上图要用 data参数
2.图鉴直接读取bs64字符形式的图片,这里获取的也直接是bs64字节的格式
import requests
import json
import re
import base64session = requests.session()
response = session.get('https://so.gushiwen.cn/user/login.aspx?from=http://so.gushiwen.cn/user/collect.aspx')
__VIEWSTATE = re.findall('<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="(.*?)=" />',response.text)[0]
__VIEWSTATEGENERATOR = re.findall('<input type="hidden" name="__VIEWSTATEGENERATOR" id="__VIEWSTATEGENERATOR" value="(.*?)" />',response.text)[0]content = session.get('https://so.gushiwen.cn/RandCode.ashx').content
with open('code.jpg',mode='wb') as f:f.write(content)# 一、图片文字类型(默认 3 数英混合):
# 1 : 纯数字
# 1001:纯数字2
# 2 : 纯英文
# 1002:纯英文2
# 3 : 数英混合
# 1003:数英混合2
# 4 : 闪动GIF
# 7 : 无感学习(独家)
# 11 : 计算题
# 1005: 快速计算题
# 16 : 汉字
# 32 : 通用文字识别(证件、单据)
# 66: 问答题
# 49 :recaptcha图片识别
# 二、图片旋转角度类型:
# 29 : 旋转类型
#
# 三、图片坐标点选类型:
# 19 : 1个坐标
# 20 : 3个坐标
# 21 : 3 ~ 5个坐标
# 22 : 5 ~ 8个坐标
# 27 : 1 ~ 4个坐标
# 48 : 轨迹类型
#
# 四、缺口识别
# 18 : 缺口识别(需要2张图 一张目标图一张缺口图)
# 33 : 单缺口识别(返回X轴坐标 只需要1张图)
# 五、拼图识别
# 53:拼图识别
def base64_api(uname, pwd, img, typeid):with open(img, 'rb') as f:base64_data = base64.b64encode(f.read())b64 = base64_data.decode()data = {"username": uname, "password": pwd, "typeid": typeid, "image": b64}result = json.loads(requests.post("http://api.ttshitu.com/predict", json=data).text)if result['success']:return result["data"]["result"]else:#!!!!!!!注意:返回 人工不足等 错误情况 请加逻辑处理防止脚本卡死 继续重新 识别return result["message"]return ""img_path = "code.jpg"
result = base64_api(uname='18720180853', pwd='20010119yx', img=img_path, typeid=3)
print(result)url = 'https://so.gushiwen.cn/user/login.aspx'
data = {'__VIEWSTATE': __VIEWSTATE,'__VIEWSTATEGENERATOR': __VIEWSTATEGENERATOR,'from': 'http://so.gushiwen.cn/user/collect.aspx','email': '18720180853','pwd': '20010119yx','code': result,'denglu': '登录',}
headers = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36',}
resp = session.post(url=url,json=data,headers=headers)
print(resp.text)
总结:
1.这里处理验证码的方法是下载下来后再使用打码平台
2.为了保持cookie一致,必须使用session的绘话方法
这篇关于requests用图鉴打码平台登录图鉴以及登录古诗文网的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!