验证码处理

  当我们登陆某些门户网站时,如果用户连续登陆的次数超过一定次数时,就会在登陆页面中动态生成验证码,通过验证码达到分流和反爬的效果。所以我们可以借用打码平台来进行验证码的识别。

超级鹰处理验证码的实现流程:

  1.对携带验证码的页面数据进行抓取;

  2.可以将页面数据中验证码进行解析,验证码图片下载到本地;

  3.可以将验证码图片提交给三方平台进行识别,返回验证码图片上的数据值

     - 超级鹰平台:

      1.在官网中进行注册(普通用户和开发者用户)

      2. 在用户中心生成软件ID,主要用来接入接口的软件ID

        - 1.实例代码的下载(开发文档 ---> Python实例下载)

      3.使用示例代码中的源码文件中的代码进行修改,让其识别验证码图片中的数据值

代码展示:

import requests
from lxml import etree
from chaojiying import Chaojiying_Client    # 利用超级鹰进行验证码识别

session = requests.Session()
# 登陆页面url
url = "https://so.gushiwen.org/user/login.aspx?from=http://so.gushiwen.org/user/collect.aspx"

headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36"
}

page_text = session.get(url, headers=headers).text
tree = etree.HTML(page_text)

# 验证码获取地址
code_url = "https://so.gushiwen.org" + tree.xpath("//*[@id='imgCode']/@src")[0]

# 动态参数获取
__VIEWSTATE = tree.xpath("//*[@id='__VIEWSTATE']/@value")[0]
__VIEWSTATEGENERATOR = tree.xpath("//*[@id='__VIEWSTATEGENERATOR']/@value")[0]

# 获取并保存二维码
code_data = session.get(code_url, headers=headers).content      # 获取验证码时也需要携带cookie
with open("./code.jpg", "wb")as f1:
    f1.write(code_data)

# 超级鹰识别验证码
chaojiying = Chaojiying_Client('shy007', 'shy123456.', '900186')  # 用户中心>>软件ID 生成一个替换 96001
im = open('code.jpg', 'rb').read()  # 本地图片文件路径 来替换 a.jpg 有时WIN系统须要//
code = chaojiying.PostPic(im, 1902).get("pic_str")  # 1902 验证码类型  官方网站>>价格体系 3.4+版 print 后要加()
print(code)
data = {
    "__VIEWSTATE": __VIEWSTATE,
    "__VIEWSTATEGENERATOR": __VIEWSTATEGENERATOR,
    "from": "http://so.gushiwen.org/user/collect.aspx",
    "email": "15364608478",
    "pwd": "shy123456.",
    "code": code,
    "denglu": "登录"
}

login_text = session.post(url=url, headers=headers, data=data).text
with open("./gsww.html", "w", encoding="utf-8")as fp:
    fp.write(login_text)

 

posted @ 2019-07-12 16:47  DF-包子  阅读(208)  评论(0)    收藏  举报