首页/新闻资讯/正文详情

Pillow识别极验消消乐验证码

发布时间:2026/11/6 1:18:15 来源:云帆数科 栏目:资讯中心
Pillow识别极验消消乐验证码
前言该文章为学习使用严禁用于商业用途和非法用途否则由此产生的一切后果均与作者无关如有侵权请私信联系作者删除~正文识别思路总共有9张图片每张图片计算摘要信息变成一个3行3列的矩阵。去尝试每个图片上下左右互换判断行和列的图片是否相等。以此循环图片先存到本地并按规则命名这里用一个自动化程序搞下来命名规则和顺序如下defget_img():tabChromium().latest_tab tab.get(https://www.geetest.com/adaptive-captcha)tab.ele(.tab-item tab-item-3).click()eletab.ele(class:geetest_btn_click).click()imagestab.eles(class:geetest_item)row1col1forimginimages:patternrurl\(([^])\)matchre.search(pattern,img.attr(style))ifmatch:urlmatch.group(1)resprequests.get(url)withopen(fimg{row}{col}.png,wb)asf:f.write(resp.content)ifrow3:row1col1else:row1# 加载所有9张拼图碎片图片(命名格式为img11.png, img12.png,...,img33.png)imgs[]foriinrange(1,4):# 行号1-3forjinrange(1,4):# 列号1-3imgs.append(Image.open(fimg{i}{j}.png))# 加载图片并添加到列表# 获取单张图片的宽度和高度(假设所有图片大小相同)width,heightimgs[0].size# 创建一个大背景图(3x3拼图)bgImage.new(RGB,(width*3,height*3))# 将9张小图拼接成3x3的大图foriinrange(3):# 行循环forjinrange(3):# 列循环# 计算当前图片在列表中的索引(行优先顺序)# 将图片粘贴到对应位置bg.paste(imgs[i*3j],(j*width,i*height))# 计算每张图片的MD5哈希值(用于唯一标识每张图片)md5_list[]forimginimgs:dataimg.tobytes()# 将图像转换为字节数据md5_list.append(hashlib.md5(data).hexdigest())# 计算MD5哈希值# 将MD5列表转换为3x3的numpy数组(与拼图布局对应)md5_listnp.array(md5_list).reshape([3,3])defidentify_slide(md5_list): 识别需要交换的拼图块位置 参数: md5_list: 3x3的MD5哈希值矩阵 返回值: 包含两个坐标的列表表示需要交换的两个拼图块的位置 [[源行,源列], [目标行,目标列]] result[[0,0],[0,0]]# 初始化结果# 遍历所有拼图块foriinrange(3):# 行循环forjinrange(3):# 列循环# 尝试向上交换ifi-10:# 检查是否在上边界内# 临时交换两个位置的MD5值md5_list[i-1][j],md5_list[i][j]md5_list[i][j],md5_list[i-1][j]# 检查交换后是否形成完整的行或列(三个相同MD5值)# 检查第i-1行是否全部相同 或 第i行是否全部相同if(md5_list[i-1][0]md5_list[i-1][1]md5_list[i-1][2])or\(md5_list[i][0]md5_list[i][1]md5_list[i][2]):result[0][i,j]# 源位置result[1][i-1,j]# 目标位置returnresult# 还原交换md5_list[i-1][j],md5_list[i][j]md5_list[i][j],md5_list[i-1][j]# 尝试向下交换(逻辑同上)ifi12:md5_list[i1][j],md5_list[i][j]md5_list[i][j],md5_list[i1][j]if(md5_list[i1][0]md5_list[i1][1]md5_list[i1][2])or\(md5_list[i][0]md5_list[i][1]md5_list[i][2]):result[0][i,j]result[1][i1,j]# 注意这里应该是i1而不是i-1(原代码有误)returnresult md5_list[i1][j],md5_list[i][j]md5_list[i][j],md5_list[i1][j]# 尝试向左交换ifj-10:md5_list[i][j-1],md5_list[i][j]md5_list[i][j],md5_list[i][j-1]# 检查列是否全部相同if(md5_list[0][j-1]md5_list[1][j-1]md5_list[2][j-1])or\(md5_list[0][j]md5_list[1][j]md5_list[2][j]):result[0][i,j]result[1][i,j-1]returnresult md5_list[i][j-1],md5_list[i][j]md5_list[i][j],md5_list[i][j-1]# 尝试向右交换(逻辑同上)ifj12:md5_list[i][j1],md5_list[i][j]md5_list[i][j],md5_list[i][j1]if(md5_list[0][j1]md5_list[1][j1]md5_list[2][j1])or\(md5_list[0][j]md5_list[1][j]md5_list[2][j]):result[0][i,j]result[1][i,j1]returnresult md5_list[i][j1],md5_list[i][j]md5_list[i][j],md5_list[i][j1]returnresult# 返回找到的交换位置# 创建新的背景图(用于显示结果)bgImage.new(RGB,(width*3,height*3))# 识别需要交换的拼图块resultidentify_slide(md5_list)print(需要交换的位置:,result)# 打印交换建议# 执行交换(在图片列表中交换两个图片的位置)imgs[result[0][0]*3result[0][1]],imgs[result[1][0]*3result[1][1]]\ imgs[result[1][0]*3result[1][1]],imgs[result[0][0]*3result[0][1]]# 重新拼接交换后的完整图片foriinrange(3):forjinrange(3):bg.paste(imgs[i*3j],(j*width,i*height))# 显示交换后的完整图片bg.show()代码功能说明图片加载与预处理加载9张拼图碎片图片(3x3排列)计算每张图片的MD5哈希值作为唯一标识交换位置识别尝试每个拼图块与相邻块(上、下、左、右)的交换检查交换后是否能形成完整的一行或一列(三个相同MD5值)找到满足条件的第一个交换对执行交换与结果显示在图片列表中交换两个图片的位置重新拼接完整的3x3图片显示交换后的结果最后欢迎联系作者交流更多

相关推荐

CAPWAP隧道基本概念:集中转发和本地转发
CAPWAP隧道基本概念:集中转发和本地转发

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/6 1:18:15

补环境常见检测点以及瑞数补环境框架
补环境常见检测点以及瑞数补环境框架

补环境常见检测点与Node.js模拟 前言 通常我们在进行js逆向的时候,会发现js文件它通过检测大量的浏览器环境特征来区分真实浏览器和自动化脚本/模拟环境。本文将分析补环境的关键环境检测点,并探讨如何在Node.js环境中进行有效模拟。 环境检测点详解 1. … · 2026/11/6 1:18:15

初学java_继承和多态知识梳理
初学java_继承和多态知识梳理

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/6 1:18:15

霞鹜文楷:免费商用开源楷体字体完整指南
霞鹜文楷:免费商用开源楷体字体完整指南

霞鹜文楷:免费商用开源楷体字体完整指南 【免费下载链接】LxgwWenKai An open-source Chinese font derived from Fontworks Klee One. 一款开源中文字体,基于 FONTWORKS 出品字体 Klee One 衍生。 项目地址: https://gitcode.com/GitHub_Trending/lx… · 2026/11/6 1:22:20

agent-browser多会话并行完全指南:如何同时运行多个浏览器互不干扰
agent-browser多会话并行完全指南:如何同时运行多个浏览器互不干扰

agent-browser多会话并行完全指南:如何同时运行多个浏览器互不干扰 【免费下载链接】agent-browser Browser automation CLI for AI agents 项目地址: https://gitcode.com/GitHub_Trending/agen/agent-browser agent-browser 是一款面向 AI Agent 的浏览器自… · 2026/11/6 1:22:20

八大网盘直链下载:LinkSwift 网页脚本完整新手指南
八大网盘直链下载:LinkSwift 网页脚本完整新手指南

八大网盘直链下载:LinkSwift 网页脚本完整新手指南 【免费下载链接】Online-disk-direct-link-download-assistant 一个基于 JavaScript 的网盘文件下载地址获取工具。基于【网盘直链下载助手】修改 ,支持 百度网盘 / 阿里云盘 / 中国移动云盘 / 天翼云盘… · 2026/11/6 1:22:20

WildGS-SLAM如何运行自己的视频?自定义数据集与相机内参配置完全解析
WildGS-SLAM如何运行自己的视频?自定义数据集与相机内参配置完全解析

【免费下载链接】WildGS-SLAM [CVPR 2025] WildGS-SLAM: Monocular Gaussian Splatting SLAM in Dynamic Environments 项目地址: https://gitcode.com/gh_mirrors/wi/WildGS-SLAM 点击查看 免费下载 WildGS-SLAM 是一个 CVPR 2025 收录的动态环境单目高斯泼溅&… · 2026/11/6 1:22:20

OpenMDW-1.1 许可证商用落地指南:Nemotron 合规自查清单
OpenMDW-1.1 许可证商用落地指南:Nemotron 合规自查清单

OpenMDW-1.1 许可证商用落地指南:Nemotron 合规自查清单 【免费下载链接】NVIDIA-Nemotron-3.5-Transcribe-30B-A4B 项目地址: https://ai.gitcode.com/hf_mirrors/nvidia/NVIDIA-Nemotron-3.5-Transcribe-30B-A4B 拿到这份 34B 权重文件,你的产… · 2026/11/6 1:22:20

5种网页截图方案全解析
5种网页截图方案全解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/6 1:21:20

双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试
双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/5 10:27:59

STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析
STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/5 10:28:03

DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案
DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/5 10:28:07

三菱PLC数据采集到数据库的时序设计:Python+MC协议实战
三菱PLC数据采集到数据库的时序设计:Python+MC协议实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/6 1:02:11

ASIC主模式RTL设计:状态机与三态驱动的流片级实现
ASIC主模式RTL设计:状态机与三态驱动的流片级实现

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/6 1:02:11

STM32嵌入式C++开发:GDB调试与Renode仿真实战指南
STM32嵌入式C++开发:GDB调试与Renode仿真实战指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/6 1:02:11

双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试
双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/5 10:27:59

STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析
STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/5 10:28:03

DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案
DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/5 10:28:07

了解更多?预约专属演示

我们的顾问将为您一对一讲解产品与方案

企业微信二维码