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 ...
随机推荐
- vulhub-struct2-s2-005
0x00 漏洞原理 s2-005漏洞的起源源于S2-003(受影响版本: 低于Struts 2.0.12),struts2会将http的每个参数名解析为OGNL语句执行(可理解为java代码).O ...
- 【逆向实战】ES文件浏览器未授权访问漏洞(CVE-2019-6447)具体分析及利用
/作者:Kali_MG1937 CSDN博客号:ALDYS4 QQ:3496925334 未经许可,禁止转载/ 漏洞简介 CVE-2019-6447是Android端上的一个知名软件:ES文件浏览器的 ...
- Ckeditor 缺少图像源文件地址的解决 笨笨的人都看啦!
Ckeditor 本文是关于CKEditor 无法上传图片问题的一个解决.我大致写了一下遇到问题的过程,问题的出处,怎么解决的,原因是什么. 希望能够帮到有需要的大家,有些时候找不到问题的答案,真的是 ...
- 【NX二次开发】Block UI 组
设置组及组内成员不可见 this->group->GetProperties()->SetLogical("Show", false); 设置组及组内成员不可操作 ...
- 【NX二次开发】Block UI 集列表
属性说明 属性 类型 描述 常规 BlockID String 控件ID Enable Logical 是否可操作 Group ...
- Linkerd 2.10(Step by Step)—使用 Debug Sidecar,注入调试容器来捕获网络数据包
Linkerd 2.10 系列 快速上手 Linkerd v2.10 Service Mesh 腾讯云 K8S 集群实战 Service Mesh-Linkerd2 & Traefik2 部署 ...
- 如何编写shell脚本
1.首先创建一个目录 vi hello.sh 2.编写shell第一行 #!/bin/bash (为了声明是shell脚本,第一行都要这么写) 3.可以添加注释 #the first p ...
- StringUtils中的常量
//空格字符串 public static final String SPACE = " "; //空字符串 public static final String EMPTY = ...
- 给STM32MP157C-DK2烧录固件
环境: 一台PC(window/linux) STM32CubeProgrammer 我下载到的是 2.1 版本(19\07\10下载的) 里面的文件是: 里面有 3 个文件,分别window.Lin ...
- Linux mlocate源码分析:updatedb
在Linux的文件查找命令中,mlocate提供的locate命令在单纯进行路径名名查找时有着显著的效率优势,因为mlocate预先对磁盘文件进行扫描并存储到一个数据库文件中,查找时只需要检索数据库而 ...