Python+Request库+第三方平台实现验证码识别示例
1、登录时经常的出现验证码,此次结合Python+Request+第三方验证码识别平台(超级鹰识别平台)
2、首先到超级鹰平台下载对应语言的识别码封装,超级鹰平台:http://www.chaojiying.com/price.html
3、使用超级鹰平台需进行注册,购买1元,应该有1000次积分,再生产对应软件ID

4、超级鹰下载Python语言进行Demo示例,代码如下(命名为ClassCode.py):
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 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()
5、下面使用ClassCode.py模块中的代码,对人人网实现验证码登录,此时示例分别使用Cookie和Session进行演示
import requests
from .ClassCode import Chaojiying_Client (导入ClassCode.py 模块)
from lxml import etree (需安装:pip3 install lxml)
# 对验证码图片进行抓捕及识别
url = 'http://www.renren.com/SysHome.do'
headers = {
"User-Agent":"Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.111 Safari/537.36",
}
page_text = requests.get(url=url,headers=headers).text
tree = etree.HTML(page_text)
try:
code_img_src = tree.xpath('//*[@id="verifyPic_login"]/@src')[0]
code_img_data = requests.get(url=code_img_src, headers=headers).content
with open('./code_img_data.jpg', 'wb') as fp:
fp.write(code_img_data)
except Exception as msg:
print('元素不存在')
# 使用超级鹰平台实现验证码识别
chaojiying = Chaojiying_Client('超级鹰登录账号', '超级鹰登录密码', '根据验证码类型')
with open('code_img_data.jpg', 'rb') as fp:
img = fp.read()
result = chaojiying.PostPic(img, 1005)['pic_str']
print(result)
################################################
使用Cookie进行登录
################################################
# 使用Post发送登录请求 -- 使用Cookie进行登录
def login_url():
login_url = 'http://www.renren.com/ajaxLogin/login?1=1&uniqueTimestamp=2021212242112'
data = {
"email": "人人网登录账号",
"password": "人人网登录密码",
"icode": result,
"origURL": "http://www.renren.com/home",
"domain": "renren.com",
"key_id": 1,
"captcha_type": "web_login",
"f":""
}
response = requests.post(url=login_url,headers=headers,data=data)
print(response.status_code)
login_page_text = response.text
with open('renren.html','w',encoding='utf-8') as fp:
fp.write(login_page_text)
return response.cookies
def Profile():
pro_url = 'http://www.renren.com/969120248/profile'
pr_respose_text = requests.get(url=pro_url,headers=headers,cookies=login_url()).text
with open('profile.html','w',encoding='utf-8') as fp:
fp.write(pr_respose_text)
Profile()
################################################
使用Session进行登录
################################################
# 使用Post发送登录请求 -- 使用Session进行登录
# 创建session对象
session = requests.Session()
def login_url_Se():
login_url = 'http://www.renren.com/ajaxLogin/login?1=1&uniqueTimestamp=2021212242112'
data = {
"email": "人人网登录账号",
"password": "人人网登录密码",
"icode": result,
"origURL": "http://www.renren.com/home",
"domain": "renren.com",
"key_id": 1,
"captcha_type": "web_login",
"f":""
}
response = session.post(url=login_url,headers=headers,data=data)
print(response.status_code)
login_page_text = response.text
with open('renren.html','w',encoding='utf-8') as fp:
fp.write(login_page_text)
return response.cookies
def Profile_Se():
pro_url = 'http://www.renren.com/969120248/profile'
pr_respose_text = session.get(url=pro_url,headers=headers,cookies=login_url_Se()).text
with open('profile_New.html','w',encoding='utf-8') as fp:
fp.write(pr_respose_text)
Profile_Se()
Python+Request库+第三方平台实现验证码识别示例的更多相关文章
- python 验证码识别示例(一) 某个网站验证码识别
某个招聘网站的验证码识别,过程如下 一: 原始验证码: 二: 首先对验证码进行分析,该验证码的数字颜色有变化,这个就是识别这个验证码遇到的比较难的问题,解决方法是使用PIL 中的 getpixel ...
- 使用python及工具包进行简单的验证码识别
相信大家利用 Python 写的爬虫应该遇到过要输入验证码的尴尬局面,又或者写了个自动填充表单的小程序,结果就卡在了验证码上. 在ctf中有⼀一些题⽬目,本身有弱验证码识别绕过,那么我们怎么解决呢? ...
- Python request库与爬虫框架
Requests库的7个主要方法 requests.request():构造一个请求,支持以下各方法的基础方法 requests.get():获取HTML网页的主要方法,对应于HTTP的GET ...
- 使用python以及工具包进行简单的验证码识别
识别数字验证码 首先我们准备素材,4张验证码图片如下: 第一步: 打开图像. im = Image.open('temp1.jpg') 第二步: 把彩色图像转化为灰度图像.彩色图像转化为灰 ...
- Python 通过打码平台实现验证码
在爬虫时,经常遇到登录需要验证码的情况,简单的验证码可以自己解决,复制的验证码需要借助机器学习,有一定的难度.还有一个简单的方案就是采用付费的打码平台. 比如R若快(http://www.ruokua ...
- python Request库
命令行查看版本:python --version pip --version pip常用命令// 安装包pip install xxx// 升级包pip install -U xxx// 卸载包pip ...
- python request 库
快速上手 迫不及待了吗?本页内容为如何入门Requests提供了很好的指引.其假设你已经安装了Requests.如果还没有, 去 安装 一节看看吧. 首先,确认一下: Requests 已安装 Req ...
- python 验证码识别示例(二) 复杂验证码识别
在这篇博文中手把手教你如何去分割验证,然后进行识别. 一:下载验证码 验证码分析,图片上有折线,验证码有数字,有英文字母大小写,分类的时候需要更多的样本,验证码的字母是彩色的,图片上有雪花等噪点,因 ...
- python 验证码识别示例(五) 简单验证码识别
今天介绍一个简单验证的识别. 主要是标准的格式,没有扭曲和变现.就用 pytesseract 去识别一下. 验证码地址:http://wscx.gjxfj.gov.cn/zfp/webroot/xfs ...
随机推荐
- 理解 this
this this 取什么值是在函数执行的时候确认的,不是在函数定义的时候确认的 this 的不同应用场景,this 的指向 函数在调用时,js 会默认给 this 绑定一个值,this 的值与绑定方 ...
- 在centos上安装docker
安装docker 卸载旧版本 sudo yum remove docker \ docker-client \ docker-client-latest \ docker-common \ docke ...
- java笔试题(二)
1.写出一维数组初始化的两种方式 int[] arr={1,2,3}; String[] str=new String[2]; str[1]="23"; 2.写出二维数组初始化的两 ...
- Java 垃圾回收机制,13张图给你讲清楚
什么是自动垃圾回收? 第一步:标记 第二步:清除 压缩 为什么需要分代垃圾收集? JVM 分代 世代垃圾收集过程 什么是自动垃圾回收? 自动垃圾回收是一种在堆内存中找出哪些对象在被使用,还有哪些对象没 ...
- 无规矩不成方圆,聊一聊 Spring Boot 中 RESTful 接口设计规范
在设计接口时,有很多因素要考虑,如接口的业务定位,接口的安全性,接口的可扩展性.接口的稳定性.接口的跨域性.接口的协议规则.接口的路径规则.接口单一原则.接口过滤和接口组合等诸多因素,本篇文章将简要分 ...
- redhat6版本网卡绑定做bond
1.编写bond0配置文件 cd /etc/sysconfig/network-scripts(进入网卡配置文件路径) vi ifc-bond0(编辑bond0的配置文件,具体如下) DEVICE=b ...
- 剖析虚幻渲染体系(06)- UE5特辑Part 1(特性和Nanite)
目录 6.1 本篇概述 6.1.1 本篇内容 6.1.2 基础概念 6.2 UE5新特性 6.2.1 UE5编辑器 6.2.1.1 下载编辑器及资源 6.2.1.2 启动示例工程 6.2.1.3 编辑 ...
- 基于ILI9341的TFT液晶显示模组LCM240320详解(1)
Hello,大家好,今天我们来讨论当下非常流行的TFT液晶显示模组,它最大的特点是可以显示出效果非常好的彩色信息,绝大多数手机.液晶显示器,液晶电视.MID.MP4等产品都在使用它,你想抗拒它的魅力还 ...
- rabbitmqctl 命令整理
虽然还有http 接口.web admin组件可以进行管理,但是rabbitmqctl 基本包含了 rabbitmq 的全部管理功能,更为全面. 所以将其使用方法总结于此. 一,命令格式 rabbit ...
- Docker启动PostgreSQL时创建多个数据库
1 前言 在文章<Docker启动PostgreSQL并推荐几款连接工具>中我们介绍如何通过Docker来启动PostgreSQL,但只有一个数据库,如果想要创建多个数据库在同一个Dock ...