上节博客(链接https://blog.csdn.net/MG1723054/article/details/81900983)谈到利用python实现登陆的三种方法,其中利用session登陆网站的方法具有比较不错的效果,不需要考虑cookie的时效性,但是有一个潜在的问题是有些文字验证码用一般的程序很难破解,主要是识别度不高,为了提高识别有多种方法,包含机器学习训练验证码,利用OpenCV中的点降噪或者线降噪,还有就是利用打码平台,将程序接到打码平台让别人解决验证码问题(相当于是一个黑盒,我们只需要传入验证码图片,然后输出验证码字符),网上的打码平台有很多,我选择的是超级鹰打码平台(http://www.chaojiying.com/),这个平台可以通过注册账号,关注微信号送1000题分,可以免费测试。超级鹰打码平台中有python怎么使用该平台的案例。下面是chaojiying.py文件,这个文件在主程序时候调用即可,现在版本chaojiying.py与之前的有些不同。

#!/usr/bin/env python
# coding:utf-8import requests
from hashlib import md5class Chaojiying_Client(object):###这里面类名与之前的有所改变def __init__(self, username, password, soft_id):self.username = usernamepassword =  password.encode('utf8')self.password = md5(password).hexdigest()self.soft_id = soft_idself.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()####chaojingyi.py文件,等下导入到别的程序中

介绍了这么多,下面我们进入正题。我们先点击进入豆瓣登陆首页,打开源代码找到验证码图片。如下图所示。

利用 正则表达式提取出链接地址,这样我们就得到了图片的链接,然后再将图片下载在指定的文件中。代码如下,该段代码相对比较简单

import requests,re
login_url='https://accounts.douban.com/login'
def get_imge_url():rep=requests.get(login_url,headers={'User-Agent':'Mozilla/5.0'})res=re.compile('<img id="captcha_image" src="(.*?)" alt="captcha" class="captcha_image"/>')imge_url=re.findall(res,rep.text)return imge_url[0]
def download_imge(url,filename):byte=requests.get(url,headers={'User-Agent':'Mozilla/5.0'})with open (filename,'wb') as f:f.write(byte.content)

再次我们怎么样将图片传入超级鹰平台,根据该网站提供的实例,我们只要这样即可:

chaojiying = Chaojiying_Client('超级鹰账号', '超级鹰密码', '超级鹰ID')
im = open(filename, 'rb').read()
yanzhengma=chaojiying.PostPic(im, 1902)['pic_str']

最后,我们需要解决的是怎么样传送表单,于是我们打开开发者模式,勾选preserve log,然后再登陆页面的账号,密码,验证码随便输入字符(先不要输入正确的账号密码和验证码,便于后面的分析),点击登陆,我们在DOC选项中看到一个post请求,然后我们看下面的表单,果然是我们当时输入的账号,密码,和验证码,如下图所示。

前面我们已经解决了验证码问题,现在这表单里面还有一个需要构造的参数,也就是captcha_id,仔细观察该captcha_id键的值我们可以知道,这个就是在验证码图片链接https://www.douban.com/misc/captcha?id=GU3dsxGehVnCmQ5IaWIipDKo:en&size=s

中的数据,我们就利用正则表达式来构造它,这样所有的表单构造全部完成。这也是利用打码平台破解验证码,session登陆豆瓣的全部思路。

下面我们给出完整代码:

# -*- coding: utf-8 -*-
"""
Created on Tue Aug 21 16:18:38 2018@author: NJUer
"""
import requests,re
from chaojiying import Chaojiying_Client ###导入chaojiying模块中的Chaojiying_Client
login_url='https://accounts.douban.com/login'
def get_imge_url():  ###获取验证码链接rep=requests.get(login_url,headers={'User-Agent':'Mozilla/5.0'})res=re.compile('<img id="captcha_image" src="(.*?)" alt="captcha" class="captcha_image"/>')imge_url=re.findall(res,rep.text)return imge_url[0]
def download_imge(url,filename):byte=requests.get(url,headers={'User-Agent':'Mozilla/5.0'})with open (filename,'wb') as f:f.write(byte.content)####下载验证码图片
def post_data(id_string,yanzhengma):    ###提交表单form_data={'source':'index_nav','redir:https':'//www.douban.com/','form_email':'m18851989116@163.com','form_password':'豆瓣账号','captcha-solution':'豆瓣密码',###自己注册豆瓣账号密码'captcha-id':id_string,'login':'登录', }session=requests.session()session.post(login_url,data=form_data)infor=session.get('https://www.douban.com/',headers={'User-Agent':'Mozilla/5.0'})infor.encoding='utf-8'if '方天画戟吕奉先的帐号'in infor.text : ###测试是否登陆成功,因为我的账号
###名称为‘方天画戟吕奉先’,所以登陆成功必然会有显示print('登陆成功!')else :print('登陆失败!')print(infor.text[0:10000])
if __name__ == '__main__':chaojiying = Chaojiying_Client('超级鹰账号', '超级鹰密码', '超级鹰ID')###自己注册url= get_imge_url()id_string=url.split('=')[1].split("&")[0] ###获取验证码的IDfilename='C:\\Users\\FangWei\\Desktop\\网络爬虫\\chaojiying_Python\\豆瓣.jpg'download_imge(url,filename)im = open(filename, 'rb').read()yanzhengma=chaojiying.PostPic(im, 1902)['pic_str']post_data(id_string,yanzhengma)

运行部分结果如下:

利用打码平台破解验证码相对于机器学习来说,学习时间短,不需要我们知道怎么去识别,机器学习学习周期长,不易理解,所以使用打码平台是一个不错的选择。

原创不易 如若转载 请注明作者和出处,谢谢!

打码平台破解验证码+session登陆豆瓣相关推荐

  1. 关于如何使用打码平台识别验证码

    准备工作 安装好selenium库,使用的浏览器为Chrome 这次使用的打码平台为超级鹰,提前准备好账户 练习地址为:https://captcha3.scrape.center/ 提供者:崔庆才 ...

  2. python爬虫验证码的处理(云打码)_Python 通过打码平台实现验证码的实现

    在爬虫时,经常遇到登录需要验证码的情况,简单的验证码可以自己解决,复制的验证码需要借助机器学习,有一定的难度.还有一个简单的方案就是采用付费的打码平台. 比如R若快(http://www.ruokua ...

  3. 学会用打码平台处理验证码

    在前一课时我们介绍了多种多样的验证码,有图形文字的.有模拟点选的.有拖动滑动的,但其实归根结底都需要人来对某种情形做一些判断,然后把结果返回并提交.如果此时提交的验证码结果是正确的,并且通过了一些验证 ...

  4. 第23讲:利用资源,学会用打码平台处理验证码

    在前一课时我们介绍了多种多样的验证码,有图形文字的.有模拟点选的.有拖动滑动的,但其实归根结底都需要人来对某种情形做一些判断,然后把结果返回并提交.如果此时提交的验证码结果是正确的,并且通过了一些验证 ...

  5. 对抗打码平台的验证码思路

    我们先来回顾一下,验证码的学名是啥? 图灵测试. 图灵测试的目的是为了区分人与机器,而打码平台的加入使得这个过程立即无效--打码平台上活跃的对象还真是人. 但这样就没辙了么? No.这"人& ...

  6. 爬虫-requests库(四)对接打码平台识别验证码

    以下内容,仅用于学习交流,如有侵权,请联系我删除. 模拟登录经常遇到要输入验证码,有自己写解析验证码识别的,也有用第三方打码平台的,这次说下第三方的打码平台. 首先要找个收费的,免费的太坑了,比如上次 ...

  7. android模拟键盘自动输入,【求助】如何让接码平台的验证码自动输入到安卓模拟器的编辑框中...

    求大神帮忙看看 这是哪里错了吗?为什么运行不了 FindPic 0,0,1024,768,"E:\1.bmp",0.9,intX,intY If intX > 0 And i ...

  8. Reptile:requests + 云打码平台实现 识别图片验证码登陆

    使用requests加上打码平台云打码,实现登陆有图片验证的网站,是图片验证码. 豆瓣的登陆验证方式换了,换成点击验证和图片滑动验证组合的了,所以实验对象不能使用豆瓣了 图片不能是JS写入的,必须得有 ...

  9. 07.验证码处理,云打码平台

    引入 相关的门户网站在进行登录的时候,如果用户连续登录的次数超过3次或者5次的时候,就会在登录页中动态生成验证码.通过验证码达到分流和反爬的效果. 今日概要 使用云打码平台识别验证码 知识点回顾 se ...

最新文章

  1. 通过正则表达式校验手机号码,拿走即用!
  2. attention retain_Attention-Aware Compositional Network
  3. 使用SGD(Stochastic Gradient Descent)进行大规模机器学习
  4. 笔记-高项案例题-2019年下-计算题
  5. (转)VS2010 快捷键
  6. NOIP赛前模拟20171027总结
  7. wince中重启网卡
  8. Python gensim库word2vec 基本用法
  9. 又掐起来了!余承东称小米环幕屏手机无实用价值,卢伟冰回怼...
  10. Web后端学习笔记 Flask(7)数据库
  11. YYYY-mm-dd HH:MM:SS 备忘录
  12. 看完这篇文章就知道为什么要使用 Node.js啦!
  13. centos 计算器_Linux下的计算器
  14. 如何使用腾讯云轻量服务器以及WooCommerce 应用镜像搭建跨境电商独立站!
  15. CSS学习之绘制几何图形
  16. CCD与CMOS摄像头哪个好
  17. “神童”Tom Ding:区块链是下一代云计算和互联网的基础
  18. Vitalik:单个 Slot 实现最终确认的路径
  19. Oracle的模糊查询
  20. 以可信度加权的方式做决定

热门文章

  1. python3 open 打开模式详解
  2. matlab RBF语音识别
  3. CSS 3.0图片像素放大马赛克特效
  4. 关于囚徒问题的概率解释(
  5. 航天院做程序员,是一种什么体验?
  6. 【解决】LayUI表单验证,提交按钮在弹出层,lay-verify失效的情况
  7. squashfs─sfs镜像文件制作方法简要介绍
  8. 被AI击败的“第一代李世石”卡斯帕罗夫:我和机器和解了!
  9. PHP爬虫音乐缓存,爬取网易云音乐热评[附上音乐下载]
  10. RHCE-1——网卡配置