爬虫与反爬-旋转验证码突破方案(知名短视频、TK海外版 及 某东等等)

概述:文本对旋转验证码进行了突破及讲述了实现原理,代码使用纯算法 OpenCV,使用代价较小同时不用安装一大堆AI训练相关的模组,方便且能够快速上手

当前亲自验证了能够支持的网站:国内知名短视频平台、海外版 以及 某东等等使用了旋转验证码的网站

基本上是旋转验证码的网站都能过,测试成功率在 99% 以上

实现步骤:

一、下载图片

为了兼容,在这里可以支持自己传base64,或者自己传链接来下载图片

def request_image_content(image_url, proxies: Optional[dict] = None):
    """
    图片下载
    :param image_url: 
    :param proxies: 
    :return: 
    """
    import requests  # type: ignore

    headers = {
        "user-agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 "
        "(KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36"
    }
    response = requests.get(image_url, headers=headers, proxies=proxies)
    return response.content



def image_to_cv2(base_image: str, image_type: int, grayscale: bool, proxies=None):
    """
    根据 图片类型来读取图片数据
    :param base_image: 
    :param image_type: 
    :param grayscale: 
    :param proxies: 
    :return: 
    """
    assert image_type in [0, 1, 2]
    if image_type == 0:
        search_base64 = re.search("base64,(.*?)$", base_image)
        base64_image = search_base64.group(1) if search_base64 else base_image
        image_array = np.asarray(
            bytearray(base64.b64decode(base64_image)), dtype="uint8"
        )
        image = cv2.imdecode(image_array, cv2.IMREAD_COLOR)
    elif image_type == 1:
        image_content = request_image_content(base_image, proxies)
        if not image_content:
            raise Exception("请求图片链接失败!")
        image_array = np.array(bytearray(image_content), dtype=np.uint8)
        image = cv2.imdecode(image_array, cv2.IMREAD_COLOR)
    else:
        image = cv2.imread(base_image)

    if grayscale:
        image = cv2.cvtColor(image, cv2.COLOR_RGB2GRAY)

    return image

二、识别图像像素相似度

核心原理:使用opencv对两张图片进行合并,同时从0度开始,一点点旋转,选择像素相似度最高的一个度数

步骤1:将外圈图与内圈图的边缘像素进行匹配,获取相似度
            mat_rotate = cv2.getRotationMatrix2D((h * 0.5, w * 0.5), rtype * angle, 1)
            dst = cv2.warpAffine(inner_image, mat_rotate, (h, w))
            ret = cv2.matchTemplate(outer_image, dst, cv2.TM_CCOEFF_NORMED)
            similar_value = cv2.minMaxLoc(ret)[1]
步骤2:将相似度最高的一个结果进行返回并输出

step作为步长,设置1则1度1度的旋转,会更加精准

    step = 1
    rotate_info_list = [RotateData(0, 0, 1, 361, step)]
    for item in rotate_info_list:
        min_similar_rotate_info = item
        for angle in range(*item[2:]):
            mat_rotate = cv2.getRotationMatrix2D((h * 0.5, w * 0.5), rtype * angle, 1)
            dst = cv2.warpAffine(inner_image, mat_rotate, (h, w))
            ret = cv2.matchTemplate(outer_image, dst, cv2.TM_CCOEFF_NORMED)
            similar_value = cv2.minMaxLoc(ret)[1]
            if similar_value < min_similar_rotate_info.similar:
                continue
            rotate_info = RotateData(similar_value, angle, angle - step, angle + step, step)
            rotate_info_list.append(rotate_info)
            if len(rotate_info_list) > 5:
                rotate_info_list.remove(min_similar_rotate_info)
            min_similar_rotate_info = min(rotate_info_list)

三、效果展示:

输入图片:

输出图片:

核心的步骤及思路提供了,剩下的交给大家了,如果需要源码的话欢迎私聊

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/925184.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

STM32C011开发(1)----开发板测试

STM32C011开发----1.开发板测试 概述硬件准备视频教学样品申请源码下载参考程序生成STM32CUBEMX串口配置LED配置堆栈设置串口重定向主循环演示 概述 STM32C011F4P6-TSSOP20 评估套件可以使用户能够无缝评估 STM32C0 系列TSSOP20 封装的微控制器功能&#xff0c;基于 ARM Corte…

达梦数据库文件故障的恢复方法

目录 1、概述 1.1 概述 1.2 环境介绍 2、使用备份集的恢复方法 2.1 实验准备 2.2 误删除“用户表空间数据文件” 2.3 误删除SYSTEM.DBF 2.4 误删除ROLL.DBF 2.5 REDO日志文件 3、无备份集的恢复方法 3.1 误删除“表空间数据文件” 3.2误删除控制文件 3.3 误删除RO…

JVM:即时编译器,C2 Compiler,堆外内存排查

1&#xff0c;即时编译器 1.1&#xff0c;基本概念 常见的编译型语言如C&#xff0c;通常会把代码直接编译成CPU所能理解的机器码来运行。而Java为了实现“一次编译&#xff0c;处处运行”的特性&#xff0c;把编译的过程分成两部分&#xff0c;首先它会先由javac编译成通用的…

rocylinux9.4安装prometheus监控

一.上传软件包 具体的软件包如下&#xff0c;其中kubernetes-mixin是下载的监控kubernetes的一些监控规则、dashbaordd等。 二.Prometheus配置 1.promethes软件安装 #解压上传后的软件包 [rootlocalhost ] cd /opt [rootlocalhost opt]# tar xf prometheus-2.35.3.linux-amd…

FreeRTOS之链表源码分析

文章目录 前言一、结构体1、链表List_t2、链表项xLIST_ITEM3、头节点xMINI_LIST_ITEM4、链表示意图 二、函数分析1、初始化函数vListInitialise2、初始化链表项vListInitialiseItem3、链表尾部添加节点vListInsertEnd4、按序插入节点vListInsert5、删除节点uxListRemove 总结 前…

预测未来 | MATLAB实现Transformer时间序列预测未来

预测未来 | MATLAB实现Transformer时间序列预测未来 预测效果 基本介绍 1.Matlab实现Transformer时间序列预测未来&#xff1b; 2.运行环境Matlab2023b及以上&#xff0c;data为数据集&#xff0c;单变量时间序列预测&#xff1b; 3.递归预测未来数据&#xff0c;可以控制预…

怎么样才算得上熟悉高并发编程?

提到并发编程很多人就会头疼了&#xff1b;首先就是一些基础概念&#xff1a;并发&#xff0c;并行&#xff0c;同步&#xff0c;异步&#xff0c;临界区&#xff0c;阻塞&#xff0c;非阻塞还有各种锁全都砸你脸上&#xff0c;随之而来的就是要保证程序运行时关键数据在多线程…

最新 Blender 4.2 保姆级安装教程(附安装包)

目录 Blender介绍&#xff1a; Blender下载&#xff1a; Blender改进功能&#xff1a; Blender介绍&#xff1a; Blender是一款开源的跨平台全能三维动画制作软件&#xff0c;提供从建模、渲染、动画、特效、合成到音频处理、视频剪辑等一系列动画短片制作解决方案。它支持…

web安全之信息收集

在信息收集中,最主要是就是收集服务器的配置信息和网站的敏感信息,其中包括域名及子域名信息,目标网站系统,CMS指纹,目标网站真实IP,开放端口等。换句话说,只要是与目标网站相关的信息,我们都应该去尽量搜集。 1.1收集域名信息 知道目标的域名之后,获取域名的注册信…

网络原理(一)—— http

什么是 http http 是一个应用层协议&#xff0c;全称为“超文本传输协议”。 http 自 1991 年诞生&#xff0c;目前已经发展为最主流使用的一种应用层协议。 HTTP 往往基于传输层的 TCP 协议实现的&#xff0c;例如 http1.0&#xff0c;http1.0&#xff0c;http2.0 http3 是…

第四十二篇 EfficientNet:重新思考卷积神经网络的模型缩放

文章目录 摘要1、简介2、相关工作3、复合模型缩放3.1、 问题公式化3.2、扩展维度3.3、复合比例 4、EfficientNet架构5、实验5.1、扩展MobileNets和ResNets5.2、EfficientNet的ImageNet结果5.3、EfficientNet的迁移学习结果 6、讨论7、结论 摘要 卷积神经网络(ConvNets)通常在固…

典型组合逻辑电路设计

目录 行为级描述方式基本运算电路 一、半加器&#xff08;Half Adder&#xff09; 二、全加器&#xff08;Full Adder&#xff09; 1、逻辑门构成加法器 2、集成全加器 3、串行加法器 4、超前进位加法器 三、全减器(Full Deductor) 数值比较电路 一、一位比较器 二、…

【论文阅读】三平面相关与变体

文章目录 1. 【CVPR2023】Tri-Perspective View for Vision-Based 3D Semantic Occupancy Prediction动机可视化方法Pipeline 2. 【2023/08/31】PointOcc: Cylindrical Tri-Perspective View for Point-based 3D Semantic Occupancy Prediction动机&#xff08;针对雷达点云、与…

修改bag的frame_id的工具srv_tools

在使用数据集导航或者建图时&#xff0c;bag中的点云或者其他话题的frame_id没有和需要的对应 1.创建工作空间 2.cd xxxx/src 3.git clone https://github.com/srv/srv_tools.git cd .. catkin_make source ./devel/setup.bash rosrun bag_tools change_frame_id.py -t /要改…

hue 4.11容器化部署,已结合Hive与Hadoop

配合《Hue 部署过程中的报错处理》食用更佳 官方配置说明页面&#xff1a; https://docs.gethue.com/administrator/configuration/connectors/ 官方配置hue.ini页面 https://github.com/cloudera/hue/blob/master/desktop/conf.dist/hue.ini docker部署 注意&#xff1a; …

如何用Excel做数据可视化自动化报表?

作为一个经常需要做数据报表的人&#xff0c;我最常用的工具是Excel&#xff0c;对于我来说用Excel处理繁琐冗杂的数据并不难&#xff0c;但是我发现身边很多人用Excel做的数据报表非常的耗时&#xff0c;而且最后的成品也是难以直视&#xff0c;逻辑和配色等都非常的“灾难”。…

layui table 纵向滚动条导致单元格表头表体错位问题

我用的时layui2.6.8版本 历史项目维护&#xff0c;bug给我让我做了&#xff0c;本来利用前端手段强解决&#xff0c;后来发现很多table 找了解决办法 打开layui-v2.6.8/lay/modules/table.js 如果打开后时压缩的代码 直接搜索 e.find(".layui-table-patch") …

C语言学习笔记:流程控制和数据输入输出

流程控制和数据的输入输出 算法 著名计算机科学家沃思提出了一个公式&#xff1a; 数据结构 算法 程序 数据结构&#xff1a;对数据的描述 算法&#xff1a;对操作步骤的描述 算法定义 广义的说&#xff0c;为解决一个问题而采取的方法和有限的步骤&#xff0c;就称为“…

旋转图像(java)

题目描述&#xff1a; 给定一个 n n 的二维矩阵 matrix 表示一个图像。请你将图像顺时针旋转 90 度。 你必须在 原地 旋转图像&#xff0c;这意味着你需要直接修改输入的二维矩阵。请不要 使用另一个矩阵来旋转图像。 代码思路&#xff1a; class Solution {public void ro…

windows 应用 UI 自动化实战

UI 自动化技术架构选型 UI 自动化是软件测试过程中的重要一环&#xff0c;网络上也有很多 UI 自动化相关的知识或资料&#xff0c;具体到 windows 端的 UI 自动化&#xff0c;我们需要从以下几个方面考虑&#xff1a; 开发语言 毋庸置疑&#xff0c;在 UI 自动化测试领域&am…