博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
07.验证码处理,云打码平台
阅读量:5108 次
发布时间:2019-06-13

本文共 2828 字,大约阅读时间需要 9 分钟。

引入

  • 相关的门户网站在进行登录的时候,如果用户连续登录的次数超过3次或者5次的时候,就会在登录页中动态生成验证码。通过验证码达到分流和反爬的效果。

今日概要

  • 使用云打码平台识别验证码

知识点回顾

  • session的创建方式
  • session的作用
  • proxies参数的作用
  • 高匿,透明代理的区别

今日内容

云打码平台处理验证码的实现流程:

云打码平台处理验证码的实现流程:

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

代码展示:

#该函数就调用了打码平台的相关的接口对指定的验证码图片进行识别,返回图片上的数据值def getCode(codeImg):    # 云打码平台普通用户的用户名    username    = 'bobo328410948'    # 云打码平台普通用户的密码    password    = 'bobo328410948'                                    # 软件ID,开发者分成必要参数。登录开发者后台【我的软件】获得!    appid       = 6003                                         # 软件密钥,开发者分成必要参数。登录开发者后台【我的软件】获得!    appkey      = '1f4b564483ae5c907a1d34f8e2f2776c'        # 验证码图片文件    filename    = codeImg                            # 验证码类型,# 例:1004表示4位字母数字,不同类型收费不同。请准确填写,否则影响识别率。在此查询所有类型 http://www.yundama.com/price.html    codetype    = 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 resultimport requestsfrom lxml import etreeimport jsonimport timeimport re#1.对携带验证码的页面数据进行抓取url = 'https://www.douban.com/accounts/login?source=movie'headers = {    'User-Agent': 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.77 Mobile Safari/537.36'}page_text = requests.get(url=url,headers=headers).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#获取capture_id'captcha'c_id = re.findall('',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":c_id,    "login": "登录",}print(c_id)login_text = requests.post(url=post,data=data,headers=headers).textwith open('./login.html','w',encoding='utf-8') as fp:    fp.write(login_text)

 

转载于:https://www.cnblogs.com/ls13691357174/p/10104353.html

你可能感兴趣的文章
access检测表没有的字段,添加之
查看>>
相对论的时间计算
查看>>
最大堆算法
查看>>
spring4新特性 泛型依赖注入
查看>>
mysql-备份恢复
查看>>
leetcode 90. 子集 II(Subsets II)
查看>>
Linux最大打开文件描述符数
查看>>
leetcode: Count and Say
查看>>
Access VBA-用Find或Seek方法实现查找符合条件的记录
查看>>
jquery Ajax标准规范写法
查看>>
MySQL Order By实现原理分析和Filesort优化
查看>>
C语言的那些小秘密之【链表(一)】
查看>>
AndroidSDK开发范例大全_不同Activity之间数据传递(Bundle对象的实现)_返回数据到前一个Activity(startActivityForResult方法)...
查看>>
js高阶函数
查看>>
本周ASP.NET英文技术文章推荐[06/17- 07/07]
查看>>
Android解析JSON
查看>>
【Excel】数据字典制作
查看>>
643. Maximum Average Subarray I 最大子阵列平均数
查看>>
JAVA处理文件压缩
查看>>
161-PHP 文本替换函数str_replace(二)
查看>>