"Si desea aprender, el rastreador de Python debe ver una serie de procesamiento de código de verificación" el uso de la plataforma de codificación

Procesamiento del código de verificación

objetivo de aprendizaje

  1. Comprender el conocimiento relevante del código de verificación.

  2. Domina el uso del motor de reconocimiento de imágenes

  3. Comprender las plataformas de codificación comunes

  4. Domine el método de procesamiento de códigos de verificación a través de la plataforma de codificación.


1. Código de verificación de imagen

1.1 ¿Qué es un código de verificación de imagen?

  • CAPTCHA es la abreviatura de "Prueba pública de Turing completamente automatizada para diferenciar a las computadoras y los humanos", que es un programa público automático que distingue si un usuario es una computadora o un humano.

1.2 El papel del código de verificación

  • Evite el descifrado malicioso de contraseñas, el deslizamiento de tickets, la irrigación de foros y el deslizamiento de páginas. Evite de manera eficaz que un pirata informático realice intentos continuos de inicio de sesión para un usuario registrado específico mediante el uso de un programa específico mediante la fuerza bruta. De hecho, el uso de códigos de verificación es un método común para muchos sitios web (como la banca personal en línea de China Merchants Bank, la comunidad de Baidu ), utilizamos una forma relativamente sencilla de lograr esta función. Aunque iniciar sesión es un poco más problemático, esta función sigue siendo necesaria e importante para la seguridad de las contraseñas de los internautas.

1.3 Usar escenarios de códigos de verificación de imágenes en rastreadores

  • registrado

  • iniciar sesión

  • Cuando se envían solicitudes con frecuencia, el servidor muestra un código de verificación para su verificación.

1.4 Esquema de procesamiento del código de verificación de imagen

  • Entrada manual (entrada) Este método está limitado al caso de uso continuo después de iniciar sesión una vez

  • El análisis del motor de reconocimiento de imágenes utiliza un motor de reconocimiento óptico para procesar los datos en la imagen, actualmente se usa a menudo para la extracción de datos de imágenes, menos usado para el procesamiento de códigos de verificación

  • Soluciones de código de verificación comúnmente utilizadas por rastreadores de plataformas de codificación

2. Motor de reconocimiento de imágenes

OCR (reconocimiento óptico de caracteres) se refiere al software que utiliza un escáner o una cámara digital para escanear datos de texto en archivos de imagen, y luego analiza y procesa los archivos de imagen para reconocer y obtener automáticamente información de texto e información de diseño.

2.1 ¿Qué es el tesseract?

  • Tesseract, un motor de OCR de código abierto desarrollado por HP Labs y mantenido por Google, se caracteriza por su soporte de código abierto, gratuito, multilingüe y multiplataforma.

  • Dirección del proyecto: https://github.com/tesseract-ocr/tesseract

2.2 Instalación del entorno del motor de reconocimiento de imágenes

1 Instalación del motor

  • Ejecute comandos directamente en el entorno mac

brew install --con-herramientas-de-formación-tesseract
  • La instalación en el entorno de Windows se puede instalar a través del paquete de instalación exe, y la dirección de descarga se puede encontrar en la wiki del proyecto GitHub. Una vez completada la instalación, recuerde agregar el directorio del archivo ejecutable Tesseract a la RUTA para facilitar las llamadas posteriores.

  • Instalación en entorno linux

sudo apt-get install tesseract-ocr

2 instalación de la biblioteca de Python

# PIL se usa para abrir archivos de imagen 
PIP / PIP3 install Pillow 
# módulo pytesseract para analizar datos de la imagen 
pip / pip3 install pytesseract

2.3 Uso del motor de reconocimiento de imágenes

Los datos en el archivo de imagen abierto se pueden extraer en datos de cadena a través del método image_to_string del módulo pytesseract. El método específico es el siguiente

from PIL import Image
import pytesseract

im = Image.open()

result = pytesseract.image_to_string(im)

print(result)

2.4 Ampliación del uso del motor de reconocimiento de imágenes

    Reconocimiento de imágenes de Microsoft Azure: https: //azure.microsoft.com/zh-cn/services/cognitive-services/computer-vision/ 
    forma adecuada Reconocimiento de caracteres Zhiyun: http: //aidemo.youdao.com/ocrdemo 
    Ali Cloud Reconocimiento de texto : https://www.aliyun.com/product/cdi/Tencent 
    OCR reconocimiento de texto: https://cloud.tencent.com/product/ocr

3 plataforma de codificación

Tomemos como ejemplo la codificación en la nube para comprender cómo utilizar la plataforma de codificación.

3.1 Interfaz oficial de codificación en la nube

La plataforma de codificación en la nube proporciona el siguiente código. Se ha realizado una modificación sencilla para implementar dos métodos:

  1. indetificar: el número binario de respuesta de la imagen entrante puede ser

  2. indetify_by_filepath: la ruta de la imagen entrante se puede identificar

Los lugares que debe configurar usted mismo son:

username = 'whoarewe' # 用户名

password = '***' # 密码

appid = 4283 # appid

appkey = '02074c64f0d0bb9efb2df455537b01c3' # appkey

codetype = 1004 # 验证码类型

La API oficial proporcionada por Cloud Code es la siguiente:

#yundama.py
import requests
import json
import time

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 = password
        self.appid = str(appid)
        self.appkey = appkey

    def request(self, fields, files=[]):
        response = self.post_url(self.apiurl, fields, files)
        response = json.loads(response)
        return response

    def 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 -9001

    def 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 -9001

    def 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 -9001

    def 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, result
                else:
                    time.sleep(1)
            return -3003, ''
        else:
            return cid, ''

    def 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 
        
username = 'whoarewe' # 用户名

password = '***' # 密码

appid = 4283 # appid

appkey = '02074c64f0d0bb9efb2df455537b01c3' # appkey

filename = 'getimage.jpg' # 文件位置

codetype = 1004 # 验证码类型

# 超时
timeout = 60

def indetify(response_content):
    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(response_content, codetype, timeout)
        print('cid: %s, result: %s' % (cid, result))
        return result

def indetify_by_filepath(file_path):
    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(file_path, codetype, timeout)
        print('cid: %s, result: %s' % (cid, result))
        return result

if __name__ == '__main__':
    pass

4 Tipos comunes de códigos de verificación

4.1 La dirección URL permanece sin cambios y el código de verificación permanece sin cambios

Este es un tipo de código de verificación muy simple, el correspondiente solo necesita obtener la dirección del código de verificación, para luego solicitarlo e identificarlo a través de la plataforma de codificación.

4.2 La dirección URL permanece sin cambios, el código de verificación cambia

Este tipo de código de verificación es un tipo más común. Para este tipo de código de verificación, debe pensar en lo siguiente:

Durante el proceso de inicio de sesión, asumiendo que el código de verificación que ingresé es correcto, ¿cómo determina el servidor de la otra parte que el código de verificación que ingresé es el código de verificación que se muestra en mi pantalla, en lugar de otros códigos de verificación?

Al obtener una página web, solicitar un código de verificación y al enviar un código de verificación, el servidor de la otra parte debe haber pasado algún método para verificar que el código de verificación que obtuve antes y el código de verificación que envié por última vez son el mismo código de verificación, entonces, ¿qué es este método?

Obviamente, se logra a través de cookies, por lo tanto, en la página de solicitud, solicite el código de verificación y envíe el código de verificación, debe garantizar la consistencia de la cookie.Puede usar request.session para resolver este problema.


resumen

  1. Comprender el conocimiento relevante del código de verificación.

  2. Domina el uso del motor de reconocimiento de imágenes

  3. Comprender las plataformas de codificación comunes

  4. Domine el método de procesamiento de códigos de verificación a través de la plataforma de codificación.

Supongo que te gusta

Origin blog.csdn.net/weixin_45293202/article/details/114580359
Recomendado
Clasificación