验证码处理

方式

1.手动处理

2.云打码平台自动识别验证码

    实现流程:-1.对携带验证码的页面数据进行抓取-2.可以将验证码图片进行解析,验证码图片下载到本地-3.将验证码图片交给第三方进行识别,返回验证码图片上的值-云打码平台1.进行注册 注册普通用户和开发者用户2.登录开发者用户1.进行示例代码下载(开发文档》》调用示例及最新的DLL》》pythonhttp示例下载)2.创建一个软件(我的软件》》新的软件)3.使用示例代码中的源文件代码文件进行修改

代码实现

class YDMHttp:apiurl = 'http://api.yundama.com/api.php'username = ''password = ''appid = ''appkey = ''def __init__(self, username, password, appid, appkey):self.username = username  self.password = passwordself.appid = str(appid)self.appkey = appkeydef request(self, fields, files=[]):response = self.post_url(self.apiurl, fields, files)response = json.loads(response)return responsedef balance(self):data = {'method': 'balance', 'username': self.username, 'password': self.password, 'appid': self.appid, 'appkey': self.appkey}response = self.request(data)if (response):if (response['ret'] and response['ret'] < 0):return response['ret']else:return response['balance']else:return -9001def login(self):data = {'method': 'login', 'username': self.username, 'password': self.password, 'appid': self.appid, 'appkey': self.appkey}response = self.request(data)if (response):if (response['ret'] and response['ret'] < 0):return response['ret']else:return response['uid']else:return -9001def upload(self, filename, codetype, timeout):data = {'method': 'upload', 'username': self.username, 'password': self.password, 'appid': self.appid, 'appkey': self.appkey, 'codetype': str(codetype), 'timeout': str(timeout)}file = {'file': filename}response = self.request(data, file)if (response):if (response['ret'] and response['ret'] < 0):return response['ret']else:return response['cid']else:return -9001def result(self, cid):data = {'method': 'result', 'username': self.username, 'password': self.password, 'appid': self.appid, 'appkey': self.appkey, 'cid': str(cid)}response = self.request(data)return response and response['text'] or ''def decode(self, filename, codetype, timeout):cid = self.upload(filename, codetype, timeout)if (cid > 0):for i in range(0, timeout):result = self.result(cid)if (result != ''):return cid, resultelse:time.sleep(1)return -3003, ''else:return cid, ''def report(self, cid):data = {'method': 'report', 'username': self.username, 'password': self.password, 'appid': self.appid, 'appkey': self.appkey, 'cid': str(cid), 'flag': '0'}response = self.request(data)if (response):return response['ret']else:return -9001def post_url(self, url, fields, files=[]):for key in files:files[key] = open(files[key], 'rb');res = requests.post(url, files=files, data=fields)return res.text

# 调用打码平台,识别验证码
def getCode(codeImg):# 用户名username    = 'bobo328410948'# 密码password    = 'bobo328410948'                            # 软件ID,开发者分成必要参数。登录开发者后台【我的软件】获得!appid       = 6003                                     # 软件密钥,开发者分成必要参数。登录开发者后台【我的软件】获得!appkey      = '1f4b564483ae5c907a1d34f8e2f2776c'    # 图片文件filename    = codeImg   # 路径                       # 验证码类型,# 例:1004表示4位字母数字,不同类型收费不同。请准确填写,否则影响识别率。在此查询所有类型 http://www.yundama.com/price.htmlcodetype    = 3000# 超时时间,秒timeout     = 20                                   # 检查if (username == 'username'):print('请设置好相关参数再测试')else:# 初始化yundama = YDMHttp(username, password, appid, appkey)# 登陆云打码uid = yundama.login();print('uid: %s' % uid)# 查询余额balance = yundama.balance();print('balance: %s' % balance)# 开始识别,图片路径,验证码类型ID,超时时间(秒),识别结果cid, result = yundama.decode(filename, codetype, timeout);print('cid: %s, result: %s' % (cid, result))return result

import requests
from lxml import etree
import json,time,re
#1.对携带验证码的页面数据进行抓取
url = 'https://accounts.douban.com/login?source=movie'
# 自定义请求头信息
headers={'User-Agent':'Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36'}
# 将代理IP封装到字典
proxies={'http':'59.44.43.198:80'   # 更换代理IP可能会不出现验证码
}
page_text = requests.get(url=url,proxies=proxies).text
#2.可以将验证码图片进行解析,验证码图片下载到本地
tree = etree.HTML(page_text)
codeImg_url = tree.xpath('//*[@id="captcha_image"]/@src')[0]
#获取验证码图片对应的二进制数据
code_img = requests.get(url=codeImg_url,headers=headers).content
# 获取动态的captcha-id
captcha_id = re.findall('<img id="captcha_image".*?id=(.*?)&.*?>',page_text,re.S)[0]
with open('./code.png','wb')as fp:fp.write(code_img)
codeText = getCode('./code.png')
print(codeText)# 进行登录操作
post = 'https://accounts.douban.com/login'
data={'source':'movie','redir':'https://movie.douban.com/','form_email':'15027900535','form_password':'bobo@15027900535','captcha-solution':codeText,'captcha-id':captcha_id,'login':'登录'
}print(captcha_id)login_text = requests.post(url=post,data=data,headers=headers,proxies=proxies).text
with open('./log.html','w',encoding='utf-8')as fp:fp.write(login_text)
print('ok')

转载于:https://www.cnblogs.com/yuliangkaiyue/p/10022941.html

校验验证码 实现登录验证相关推荐

  1. 手机验证码+Redis登录验证+token+登录拦截

    手机验证码+Redis登录验证+token+登录拦截 文章目录 手机验证码+Redis登录验证+token+登录拦截 解决方案 思想 以阿里云为例 1.阿里云官网开通短信服务 2.创建签名 3.创建短 ...

  2. 如何通过腾讯云短信实现发送验证码并校验验证码以实现登录功能

    如何通过腾讯云短信实现发送验证码并校验验证码以实现登录功能 验证码相关的10种技术 图像处理技术:生成.识别.验证验证码的图像. 机器学习技术:让计算机自动学习并识别验证码. 文字识别技术:将图像中的 ...

  3. 在JSP中动态生成随机验证码,登录时后台校验验证码,以及如何避免同一个验证码被重复提交爆破密码...

    只需几步就可以生成动态随机的验证码,最终效果如下图: 一 前台显示页面login.jsp 其中验证码显示的是一张图片,链接指向的是生成验证码的servlet,同时点击图片后触发changeImg()这 ...

  4. Abp.Zero 手机号免密登录验证与号码绑定功能的实现(一):验证码模块

    这是一篇系列博文,我将使用Abp.Zero搭建一套集成手机号免密登录验证与号码绑定功能的用户系统: Abp.Zero 手机号免密登录验证与号码绑定功能的实现(一):验证码模块 Abp.Zero 手机号 ...

  5. Spring Security自定义登录验证,验证码,动态管理uri访问权限,Thymeleaf,限制密码强度、过期、错误密码锁定超时自动解锁、禁用历史密码、新密码和现密码差异要求编辑距离

    在本教程中,我将指导您如何编写代码,以使用具有基于表单的身份验证的Spring安全API来保护Spring Boot应用程序中的网页.用户详细信息存储在MySQL数据库中,并使用春季JDBC连接到数据 ...

  6. Spring Security登录验证,验证码,动态管理uri访问权限,Thymeleaf,限制密码强度、过期、错误密码锁定超时自动解锁、禁用历史密码、新密码和现密码差异要求编辑距离

    在本教程中,我将指导您如何编写代码,以使用具有基于表单的身份验证的Spring安全API来保护Spring Boot应用程序中的网页.用户详细信息存储在MySQL数据库中,并使用春季JDBC连接到数据 ...

  7. java发送QQ邮箱验证码实现登录注册、邮箱验证码防刷校验

    文章目录 一:前台功能实现 1.1 页面编写 1.2 发送验证码--sendEmailCode 1.2.1 远程调用发送接口 1.2.1 接口防刷校验--60s内只能发送一次 二:获取QQ邮箱授权码 ...

  8. 魔方APP项目-07-客户端提交登录信息、在APICloud中集成防水墙验证码,前端获取显示并校验验证码、服务端校验验证码、保存用户登录状态,APICloud提供的数据存储、客户端保存用户登陆数据

    用户登录 一.客户端提交登录信息 html/login.html,代码: <!DOCTYPE html> <html> <head><title>登录& ...

  9. Flask项目实战——7—(Redis数据库存储验证码信息、验证登录界面的表单信息、注册功能实现、登录实现)

    推荐一个API平台:聚合数据 1.Redis数据库存储验证码信息 保存手机验证码到Redis数据库 公有视图文件:apps/common/views.py # -*- encoding: utf-8 ...

最新文章

  1. ftp 的三种数据传输模式
  2. LNMP架构环境搭建之mysql源码编译安装
  3. QT的QFormBuilder类的使用
  4. 深度学习之卷积神经网络(5)表示学习
  5. C++ primer 第14章 操作重载与类型转换
  6. Python 爬虫工具 —— fake_useragent
  7. WP7模拟器使用技巧
  8. Swift 5 Dictionary用法大全
  9. java请求url拼接xml_java访问一个URL,会返回给你一个XML格式的数据,该怎么实现?...
  10. 单目深度估计论文(1)— Depth Map Prediction from a Single Image using a Multi-Scale Deep Network (NIPS 2014)
  11. ElasticSearch文档检索,分词、精确匹配、多条件
  12. 发短信属于长连接还是短连接_通过链接发送短信
  13. 书摘---创业36条军规4:如何组建公司
  14. Javascript中transducer的应用
  15. python读取.db文件
  16. iOS时间戳与北京时间的转换
  17. 一级下拉对应多个二级下拉联动
  18. flume采集数据到hdfs
  19. addons.php,GitHub - zz-studio/think-addons: The ThinkPHP6 Addons Package
  20. Microsoft Completes Acquisition of Collaboration Software Provider Groove Networks

热门文章

  1. Could not find multidex.jar (com.android.support:multidex:1.0.2).
  2. 游戏建模师具体干什么!30岁后进入行业算不算晚?
  3. signature=06503812625e47e9ee33634e47a778e8,Title page for ETD etd-07242013-155857
  4. CCF大专委2020年大数据发展趋势预测
  5. Unity 动画系统:Animator
  6. 牛顿法与拟牛顿法学习笔记(一)牛顿法
  7. 一文详解像素、DPI、分辨率之间的关系
  8. 手写签名插件—jSignature使用心得
  9. spark master web ui 端口8080被占用解决方法
  10. 【整理】EFI/UEFI BIOS 入门 : All For Beginners