驗證碼識別


驗證碼識別
  • 基於線上的大碼平台識別驗證碼
  • 打碼平台 :

    1、超級鷹(常用)先注冊(用戶中心的身份)-->登錄(用戶中心)  官網:http://www.chaojiying.com/about.html

      2、雲打碼

      3、打碼兔

超級鷹的使用流程
  1. 注冊登錄
  2. 查詢余額,請充值
  3. 創建一個軟件ID
  4. 下載一個示例代碼
  5. 需要將驗證碼下載到本地,然后才能識別

注冊然后登錄:

充值1元錢可以后期1000積分,1000積分大概可以使用100多次。

 生成軟件ID

開發文檔中下載實例代碼:

下載后修改代碼

#!/usr/bin/env python
# coding:utf-8

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()


def tranformImgCode(imgPath, imgType):
    chaojiying = Chaojiying_Client('username', 'password', 'ID')  # 用戶中心>>軟件ID 生成一個替換 96001
    im = open(imgPath, 'rb').read()  # 本地圖片文件路徑 來替換 a.jpg 有時WIN系統須要//
    return chaojiying.PostPic(im, imgType)  # 1902 驗證碼類型  官方網站>>價格體系 3.4+版 print 后要加()


print(tranformImgCode('./a.jpg', 1902))
實例

模擬登錄:古詩文網  地址:https://so.gushiwen.cn/user/login.aspx?from=http://so.gushiwen.cn/user/collect.aspx

模擬登錄流程:

對點擊登錄按鈕對應的請求進行發送(post請求),需要處理請求參數:用戶名、密碼、驗證碼、其他防偽參數

 login.py

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# author: 青城子
# datetime: 2021/7/17 15:39
# ide: PyCharm

import requests
from lxml import etree

import chaojiying

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

# 識別驗證碼
# 使用超級鷹需要將驗證碼下載到本地
url = "https://so.gushiwen.cn/user/login.aspx?from=http://so.gushiwen.cn/user/collect.aspx"
page_text = session.get(url=url, headers=headers).text
# 解析驗證碼圖片的地址
tree = etree.HTML(page_text)
img_src = "https://so.gushiwen.cn" + tree.xpath('//*[@id="imgCode"]/@src')[0]  # 驗證碼圖片
# 將驗證碼圖片保存到本地
img_data = session.get(url=img_src, headers=headers).content
with open("./code.jpg", "wb") as fp:
    fp.write(img_data)

# 識別驗證碼
code_text = chaojiying.tranformImgCode("./code.jpg", 1902)
print(code_text)

login_url = "https://so.gushiwen.cn/user/login.aspx?from=http%3a%2f%2fso.gushiwen.cn%2fuser%2fcollect.aspx"
data = {
    "__VIEWSTATE": "bRb / aAzb7 + I + v8qJnjb / achUMrSTjgyK6TLoWB6wq4yEHtY / V1UnC1ckOq3rA / wkZRbfstT0lJHqG4RYQkykXTFV7eln2H + XkcN807hkVoueVgvuWernzqA8UeA =",
    "__VIEWSTATEGENERATOR": "C93BE1AE",
    "from": "http: // so.gushiwen.cn / user / collect.aspx",
    "email": "xxxxxxx@qq.com",
    "pwd": "xxxx",
    "code": code_text.get("pic_str"),  # 驗證碼動態變化
    "denglu": "登錄",
}

# 對點擊登錄按鈕發起請求:獲取了登錄成功后對應的頁面源碼數據
page_text_login = session.post(url=login_url, headers=headers, data=data).text
with open("./gushiwend.html", "w", encoding="utf-8") as fp:
    fp.write(page_text_login)

chaojiying.py

超級鷹驗證碼

#!/usr/bin/env python
# coding:utf-8

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()


def tranformImgCode(imgPath, imgType):
    chaojiying = Chaojiying_Client('username', 'password', 'ID')  # 用戶中心>>軟件ID 生成一個替換 96001
    im = open(imgPath, 'rb').read()  # 本地圖片文件路徑 來替換 a.jpg 有時WIN系統須要//
    return chaojiying.PostPic(im, imgType)  # 1902 驗證碼類型  官方網站>>價格體系 3.4+版 print 后要加()


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM