当前位置: 首页 > news >正文

Python 爬虫:使用打码平台来识别各种验证码:

本课程使用的是 超级鹰 打码平台, 没有账户的请自行注册!

超级鹰验证码识别-专业的验证码云端识别服务,让验证码识别更快速、更准确、更强大

使用打码平台来攻破验证码难题, 是很简单容易的, 但是要钱!

案例代码及测试资源:

git clone https://github.com/Python3WebSpider/CaptchaPlatform.git

 使用git 将资源拽取下来, 然后你会发现多了一个文件夹, 文件夹中有一个chaojiying.py 文件, 这里面就是基于官方 SDK 改写的代码:

username: 用户名 , 你注册的超级鹰用户。

password:密码

soft_id:  软件ID。

import requests
from hashlib import md5class Chaojiying(object):def __init__(self, username, password, soft_id):self.username = usernameself.password = md5(password.encode('utf-8')).hexdigest()self.soft_id = soft_idself.base_params = {'user': self.username,'pass2': self.password,'softid': self.soft_id,}self.headers = {'User-Agent': 'Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0)',}def post_pic(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 report_error(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()

图片验证码:

CAPTCHA_KIND 则为图片的类型, 可以在 验证码类型与价格表-超级鹰验证码识别 看到。

from chaojiying import ChaojiyingUSERNAME = '136xxxx108'
PASSWORD = 'xxxxxx'
SOFT_ID = 'xxxxxxxx'
CAPTCHA_KIND = '1006'
FILE_NAME = 'captcha1.png'
client = Chaojiying(USERNAME, PASSWORD, SOFT_ID)
result = client.post_pic(open(FILE_NAME, 'rb').read(), CAPTCHA_KIND)
print(result)

 点选验证码:

from chaojiying import ChaojiyingUSERNAME = 'xxx'
PASSWORD = ''
SOFT_ID = 'xxxxxx'
CAPTCHA_KIND = '9004'
FILE_NAME = 'captcha2.png'
client = Chaojiying(USERNAME, PASSWORD, SOFT_ID)
result = client.post_pic(open(FILE_NAME, 'rb').read(), CAPTCHA_KIND)
print(result)

 得到的响应结果为:

{'err_no': 0, 'err_str': 'OK', 'pic_id': '2256514491185230017', 'pic_str': '118,177|249,173', 'md5': 'e89f632e91cc6b8a85dad2fbbc13c803'}

 可以看到图片的坐标信息为: '118,177|249,173'  使用opencv 技术来标记这个点测试一下:

import cv2image = cv2.imread('captcha2.png')
image = cv2.circle(image, (108, 133), radius=10, color=(0, 0, 255), thickness=-1)
image = cv2.circle(image, (227, 143), radius=10, color=(0, 0, 255), thickness=-1)
cv2.imwrite('captcha2_label.png', image)

 滑块验证码:

from chaojiying import ChaojiyingUSERNAME = '136xxxx08'
PASSWORD = 'hxxxxx.'
SOFT_ID = '9xxxx'
CAPTCHA_KIND = '9101'
FILE_NAME = 'captcha5.png'
client = Chaojiying(USERNAME, PASSWORD, SOFT_ID)
result = client.post_pic(open(FILE_NAME, 'rb').read(), CAPTCHA_KIND)
print(result)

{'err_no': 0, 'err_str': 'OK', 'pic_id': '1256519431185230022', 'pic_str': '218,96', 'md5': '627d620bccd9a6dd1366329b951f1511'}

使用OpenCV测试验证一下:

import cv2image = cv2.imread('captcha2.png')
image = cv2.circle(image, (231, 85), radius=10, color=(0, 0, 255), thickness=-1)
cv2.imwrite('captcha3_label.png', image)

可以看到, 不是很准确,  我们可以向打码平台的工作人员传递一些信息, 尽可能的标记的准确一些:

from chaojiying import Chaojiyingimport cv2
from PIL import ImageFont, ImageDraw, Image
import numpy as np
import iodef cv2_add_text(image, text, left, top, textColor=(255, 0, 0), text_size=20):image = Image.fromarray(cv2.cvtColor(image, cv2.COLOR_BGR2RGB))draw = ImageDraw.Draw(image)font = ImageFont.truetype('simsun.ttc', text_size, encoding="utf-8")draw.text((left, top), text, textColor, font=font)return cv2.cvtColor(np.asarray(image), cv2.COLOR_RGB2BGR)USERNAME = '136XXXX08'
PASSWORD = 'hXXXXXXXXXXX..'
SOFT_ID = '9XXXXXXX2'
CAPTCHA_KIND = '9101'
FILE_NAME = 'captcha3.png'
image = cv2.imread(FILE_NAME)
image = cv2_add_text(image, '请点击目标滑块左上角', int(image.shape[1] / 10), int(image.shape[0] / 2), (255, 0, 0), 40)
client = Chaojiying(USERNAME, PASSWORD, SOFT_ID)
result = client.post_pic(io.BytesIO(cv2.imencode('.png', image)[1]).getvalue(), CAPTCHA_KIND)
print(result)

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Linux容器时间隔离性测试
  • SQL进阶技巧:如何按照固定尺寸(固定区间)对数据进行打分类标签?
  • Docker 安装 PostgreSQL
  • 实习随笔【前端技术实现全局添加水印】
  • 【java深入学习第7章】用 Spring Boot 和 Java Mail 轻松实现邮件发送功能
  • 电脑远程开关机
  • 【找不到视图问题解决】@RestController 与 @Controller注解的使用区别
  • 大数据hive表和iceberg表格式
  • 【乐吾乐2D可视化组态编辑器】消息
  • 论文翻译:通过云计算对联网多智能体系统进行预测控制
  • notes for datawhale 2th summer camp NLP task1
  • JSqlParser 解析 sql
  • Linux介绍以及常用命令
  • html+js+css做的扫雷
  • 使用mybatis的statementHander拦截器监控表和字段并发送钉钉消息
  • 2017届校招提前批面试回顾
  • 2019年如何成为全栈工程师?
  • DataBase in Android
  • Docker入门(二) - Dockerfile
  • egg(89)--egg之redis的发布和订阅
  • extjs4学习之配置
  • HomeBrew常规使用教程
  • HTTP请求重发
  • LeetCode刷题——29. Divide Two Integers(Part 1靠自己)
  • VirtualBox 安装过程中出现 Running VMs found 错误的解决过程
  • 阿里云容器服务区块链解决方案全新升级 支持Hyperledger Fabric v1.1
  • 从地狱到天堂,Node 回调向 async/await 转变
  • 对话:中国为什么有前途/ 写给中国的经济学
  • 前端面试总结(at, md)
  • 什么软件可以剪辑音乐?
  • 实习面试笔记
  • 新书推荐|Windows黑客编程技术详解
  • 用mpvue开发微信小程序
  • 回归生活:清理微信公众号
  • 如何在 Intellij IDEA 更高效地将应用部署到容器服务 Kubernetes ...
  • ​520就是要宠粉,你的心头书我买单
  • ​如何在iOS手机上查看应用日志
  • # 再次尝试 连接失败_无线WiFi无法连接到网络怎么办【解决方法】
  • #Datawhale AI夏令营第4期#多模态大模型复盘
  • #Z0458. 树的中心2
  • (1)SpringCloud 整合Python
  • (7)摄像机和云台
  • (9)YOLO-Pose:使用对象关键点相似性损失增强多人姿态估计的增强版YOLO
  • (k8s)Kubernetes本地存储接入
  • (LNMP) How To Install Linux, nginx, MySQL, PHP
  • (Matlab)遗传算法优化的BP神经网络实现回归预测
  • (PWM呼吸灯)合泰开发板HT66F2390-----点灯大师
  • (Redis使用系列) Springboot 整合Redisson 实现分布式锁 七
  • (zhuan) 一些RL的文献(及笔记)
  • (多级缓存)多级缓存
  • (分享)自己整理的一些简单awk实用语句
  • (附源码)ssm旅游企业财务管理系统 毕业设计 102100
  • (六)vue-router+UI组件库
  • (一)utf8mb4_general_ci 和 utf8mb4_unicode_ci 适用排序和比较规则场景
  • (原創) X61用戶,小心你的上蓋!! (NB) (ThinkPad) (X61)