验证码相关
关于验证码
验证码处理:
-
- 使用浏览器里面的cookie,绕过验证.
-
- 利用神经网络图片识别模块,编写验证码识别的功能
-
- 第三方打码平台, 超级鹰, 图鉴
超级鹰
链接: 官网
使用方法
- 登录超级鹰的官网. 注册. 注册后, 进入用户中心. 生成一个新的软件ID
- 超级鹰的官网的开发文档. 找到Python语言Demo下载。放到pycharm里
识别效果还是不错的.
python
#!/usr/bin/env python
# coding:utf-8
import requests
from hashlib import md5
class Chaojiying_Client(object):
def __init__(self, username, password, soft_id):
self.username = username
password = password.encode('utf8')
self.password = md5(password).hexdigest()
self.soft_id = soft_id
self.base_params = {
'user': self.username,
'pass2': self.password,
'softid': self.soft_id,
}
self.headers = {
'Connection': 'Keep-Alive',
'User-Agent': 'Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0)',
}
def PostPic(self, im, codetype):
"""
im: 图片字节
codetype: 题目类型 参考 http://www.chaojiying.com/price.html
"""
params = {
'codetype': codetype,
}
params.update(self.base_params)
files = {'userfile': ('ccc.jpg', im)}
r = requests.post('http://upload.chaojiying.net/Upload/Processing.php', data=params, files=files, headers=self.headers)
return r.json()
def PostPic_base64(self, base64_str, codetype):
"""
im: 图片字节
codetype: 题目类型 参考 http://www.chaojiying.com/price.html
"""
params = {
'codetype': codetype,
'file_base64':base64_str
}
params.update(self.base_params)
r = requests.post('http://upload.chaojiying.net/Upload/Processing.php', data=params, headers=self.headers)
return r.json()
def ReportError(self, im_id):
"""
im_id:报错题目的图片ID
"""
params = {
'id': im_id,
}
params.update(self.base_params)
r = requests.post('http://upload.chaojiying.net/Upload/ReportError.php', data=params, headers=self.headers)
return r.json()
if __name__ == '__main__':
chaojiying = Chaojiying_Client('超级鹰用户名', '超级鹰用户名的密码', '96001') #用户中心>>软件ID 生成一个替换 96001
im = open('a.jpg', 'rb').read() #本地图片文件路径 来替换 a.jpg 有时WIN系统须要//
print(chaojiying.PostPic(im, 1902)) #1902 验证码类型 官方网站>>价格体系 3.4+版 print 后要加()
#print chaojiying.PostPic(base64_str, 1902) #此处为传入 base64代码
验证码类型
官网:价格体系有验证码类型及收费
验证码类型 | 验证码描述 | 官方单价(题分) |
---|---|---|
1902 | 常见4~6位英文数字 | 10,12,15 |
1101 | 1位英文数字 | 10 |
1004 | 1~4位英文数字 | 10 |
1005 | 1~5位英文数字 | 12 |
1006 | 1~6位英文数字 | 15 |
1007 | 1~7位英文数字 | 17.5 |
1008 | 1~8位英文数字 | 20 |
1009 | 1~9位英文数字 | 22.5 |
1010 | 1~10位英文数字 | 25 |
1012 | 1~12位英文数字 | 30 |
1020 | 1~20位英文数字 | 50 |
验证码登录超级鹰
python
from selenium.webdriver import Chrome
from chaojiying import Chaojiying_Client
import time
web = Chrome()
web.get("http://www.chaojiying.com/user/login/")
# 获取验证码图片
code_img = web.find_element_by_xpath('/html/body/div[3]/div/div[3]/div[1]/form/div/img')
png_code_img = code_img.screenshot_as_png # 截图(验证码)
chaojiying = Chaojiying_Client('超级鹰用户名', '超级鹰用户名的密码', '软件id')
result = chaojiying.PostPic(png_code_img, 1902)
web.find_element_by_xpath('/html/body/div[3]/div/div[3]/div[1]/form/p[1]/input').send_keys('超级鹰用户名')
web.find_element_by_xpath('/html/body/div[3]/div/div[3]/div[1]/form/p[2]/input').send_keys('超级鹰用户名的密码')
web.find_element_by_xpath('/html/body/div[3]/div/div[3]/div[1]/form/p[3]/input').send_keys(result['pic_str'])
time.sleep(8)
web.find_element_by_xpath('/html/body/div[3]/div/div[3]/div[1]/form/p[4]/input').click()
图鉴
链接: 官网
typeid 默认 3 数英混合
参数 | 说明 |
---|---|
1 | 纯数字 |
1001 | 纯数字2 |
2 | 纯英文 |
1002 | 纯英文2 |
3 | 数英混合 |
1003 | 数英混合2 |
4 | 闪动GIF |
7 | 无感学习(独家) |
66 | 问答题 |
11 | 计算题 |
1005 | 快速计算题 |
5 | 快速计算题2 |
16 | 汉字 |
32 | 通用文字识别(证件、单据) |
29 | 旋转类型 |
19 | 点选1个坐标 |
20 | 点选3个坐标 |
21 | 点选3 ~ 5个坐标 |
22 | 点选5 ~ 8个坐标 |
27 | 点选1 ~ 4个坐标 |
48 | 轨迹类型 |
18 | 缺口识别(需要2张图 一张目标图一张缺口图) |
33 | 单缺口识别(返回X轴坐标 只需要1张图) |
53 | 拼图识别 |
官方示例: |
python
import base64
import json
import requests
def base64_api(uname, pwd, img, typeid):
with open(img, 'rb') as f:
# 图片以字节形式读出,用b64encode转成字符串,以json传递
base64_data = base64.b64encode(f.read())
b64 = base64_data.decode()
data = {"username": uname, "password": pwd, "typeid": typeid, "image": b64}
# 将Json字符串解码成python对象
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__":
img_path = "换成你自己的图片.jpg"
result = base64_api(uname='账号', pwd='密码', img=img_path, typeid=3)
print(result)
登录图鉴
python
def base64_api(uname, pwd, b64_img, typeid):
data = {"username": uname, "password": pwd, "typeid": typeid, "image": b64_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"]
def login():
session = requests.session()
# 抓包 session获得cookie
url = "http://www.ttshitu.com/login.html?spm=null"
resp = session.get(url)
tree = etree.HTML(resp.text)
# 获取验证码
# captchaImg
data_href = tree.xpath("//img[@id='captchaImg']/@data-href")[0]
resp = session.get(data_href)
js = resp.json()
# 验证码
result = base64_api("账号","密码", js['img'], '1003')
data = {
"captcha": result,
"developerFlag": False,
"imgId": js['imgId'],
"needCheck": True,
"password": "密码",
"userName": "用户名",
}
headers={
'Content-Type': 'application/json; charset=UTF-8',
'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.114 Safari/537.36',
}
print(data)
login_url = "http://admin.ttshitu.com/common/api/login/user"
# data转成Json字符串
resp = session.post(login_url, data=json.dumps(data), headers=headers)
print(resp.text)
if __name__ == '__main__':
login()