爬虫逆向——某建筑市场监管平台的滑块验证码分析

这篇具有很好参考价值的文章主要介绍了爬虫逆向——某建筑市场监管平台的滑块验证码分析。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

网址链接:

正文:

一、思路分析

二、图片处理

三、完整代码


网址链接:

aHR0cHM6Ly9nY3htLmh1bmFuanMuZ292LmNuL2RhdGFzZXJ2aWNlLmh0bWw=

(bs64解密可见)

正文:

注:分步的代码为示例代码,文章最后会给出图像处理部分的完整代码

一、思路分析

1、首先看验证码样式,可以看到是个滑块验证,包含一张带缺口的背景大图和一张用于拖动的小图,这类图片处理起来就比较简单。

爬虫逆向——某建筑市场监管平台的滑块验证码分析

2、再看图形验证码接口,请求没什么特别需要注意的参数

爬虫逆向——某建筑市场监管平台的滑块验证码分析

重点看一下响应预览,返回数据是一个列表,观察可知0、1元素分别是小图和大图的bs64编码,2、3元素用处下面会用到

爬虫逆向——某建筑市场监管平台的滑块验证码分析

 3、画错一次验证码看看请求结果

爬虫逆向——某建筑市场监管平台的滑块验证码分析

 4、在请求载荷中有moveX,verifyid。verifyid结合第二步,可知是请求图形验证码接口返回参数中的元素2;moveX应该就是拖动小图进行平移的距离。其他参数除了翻页pageIndex和列表大小pageSize外固定不变。

爬虫逆向——某建筑市场监管平台的滑块验证码分析

 5、看图片可知,正确的的moveX应该是背景大图缺口的左侧边缘背景大图左侧边缘的距离,只需要计算出这个长度即可

二、图片处理

大致分为4步:

原图:

爬虫逆向——某建筑市场监管平台的滑块验证码分析 

1、二值化处理:缺口处填充空白,其他部分填充黑色。其中先对图片进行高斯模糊处理,然后做了灰度处理,最后进行二值化处理。高斯模糊等图像处理相关的看这里:python-opencv 图像处理(滤波,噪点,模糊)

以下是相关示例代码:

# 读取图片
image = cv2.imread(img1)

# 高斯模糊
GAUSSIAN_BLUR_KERNEL_SIZE = (5, 5)
GAUSSIAN_BLUR_SIGMA_X = 0
image = cv2.GaussianBlur(image, GAUSSIAN_BLUR_KERNEL_SIZE, GAUSSIAN_BLUR_SIGMA_X)

# 二值化
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)  ##要二值化图像,必须先将图像转为灰度图
ret, binary = cv2.threshold(gray, 253, 255, cv2.THRESH_BINARY)

# 另存为
cv2.imwrite(img2, binary)

下面是处理后的图片:

爬虫逆向——某建筑市场监管平台的滑块验证码分析

2、边缘检测: 

名词解释为图像边缘是指图像中表达物体的周围像素灰度发生阶跃变化的那些像素集合。
        图像中两个灰度不同的相邻区域的交界处,必然存在灰度的快速过渡或称为跳变,它们与图像中各区域边缘的位置相对应,边缘蕴含了丰富的内在信息,如方向、阶跃性质、形状等,沿边缘走向的像素变化平缓,而垂直于边缘方向的像素变化剧烈。

绘制上图空白处的边缘后结果如下:

爬虫逆向——某建筑市场监管平台的滑块验证码分析

3、 绘制外接矩形:

为方便计算距离,这里需要绘制出上图的最小外接矩形,结果如下:

爬虫逆向——某建筑市场监管平台的滑块验证码分析

4、 计算外接矩形到图像左侧的距离:

实际上在绘制外接矩形时会得到矩形的边界坐标,其中最小的(x,y)为矩形的左上角坐标;最大的(x,y)为矩形的右下角坐标。即最小的坐标x就是验证码接口中的 moveX参数。

爬虫逆向——某建筑市场监管平台的滑块验证码分析

运行结果如下:

爬虫逆向——某建筑市场监管平台的滑块验证码分析 

最后将得到的距离作为moveX参数去请求校验接口即可。 

三、完整代码

为便于观察,将每一步的图片都进行了保存

import cv2
from PIL import Image
from loguru import logger

class OcrImg():
    def __init__(self):
        # 验证码原图
        self.img1 = './b1.png'

        # 二值化后的图片
        self.img2 = './b2.png'

        # 边缘检测后的图片
        self.img3 = './b3.png'

        # 绘制边缘矩形后的图片
        self.img4 = './b4.png'

        self.GAUSSIAN_BLUR_KERNEL_SIZE = (5, 5)
        self.GAUSSIAN_BLUR_SIGMA_X = 0
        self.CANNY_THRESHOLD1 = 200
        self.CANNY_THRESHOLD2 = 450

    def main(self, input_img_file='./b1.png'):
        self.img1 = input_img_file
        self.threshold_By_OTSU()

        self.detectEdge()

        x1 = self.get_contours()
        logger.info('缺口距左侧边缘 {} 个像素'.format(x1))
        return x1

    # 图片预处理
    def threshold_By_OTSU(self):
        # 读取图片
        image = cv2.imread(self.img1)
        # 高斯模糊
        image = cv2.GaussianBlur(image, self.GAUSSIAN_BLUR_KERNEL_SIZE, self.GAUSSIAN_BLUR_SIGMA_X)

        # 二值化
        gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)  ##要二值化图像,必须先将图像转为灰度图
        ret, binary = cv2.threshold(gray, 253, 255, cv2.THRESH_BINARY)
        cv2.imwrite(self.img2, binary)

    # 求图像img中(x,y)处像素的卷积c
    def convolute(self, img, x, y):
        juanjihe = [1, 1, 1, 1, -8, 1, 1, 1, 1]
        L = []
        xl = [x - 1, x, x + 1]
        yl = [y - 1, y, y + 1]
        for j in yl:
            for i in xl:
                gray = img.getpixel((i, j))  # 取出灰度值
                L.append(gray)
        c = 0
        for i, j in zip(juanjihe, L):
            c = c + i * j
        return c

    # 边缘检测
    def detectEdge(self):
        img1 = Image.open(self.img2)  
        img1 = img1.convert('L')  
        w, h = img1.size
        img2 = Image.new('L', (w, h), 'white')  
        for x in range(1, w - 1):
            for y in range(1, h - 1):
                c = self.convolute(img1, x, y) 
                if c > 0:
                    s = 0
                else:
                    s = 255
                img2.putpixel((x, y), s) 
        img2.save(self.img3)

    # 绘制外接矩形
    def get_contours(self):
        image = cv2.imread(self.img3)
        # 图像转灰度图
        img = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
        # 图像转二值图
        ret, thresh = cv2.threshold(img, 2, 255, cv2.THRESH_BINARY_INV)
        contours, hierarchy = cv2.findContours(thresh, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
        x1 = []
        y1 = []
        x2 = []
        y2 = []
        for c in contours:
            # 找到边界坐标
            x, y, w, h = cv2.boundingRect(c)
            if x != 0 and y != 0 and w != image.shape[1] and h != image.shape[0]:
                cv2.rectangle(image, (x, y), (x + w, y + h), (215, 42, 32), 2)
                x1.append(x)
                y1.append(y)
                x2.append(x + w)
                y2.append(y + h)
        x11 = min(x1)
        y11 = min(y1)
        x22 = max(x2)
        y22 = max(y2)
        print(x11, y11, x22, y22)
        cv2.imwrite(self.img4, image)
        cv2.waitKey(0)

        return x11

if __name__ == '__main__':
    ocr = OcrImg()
    # 传入图片位置
    ocr.main('./a.png')

注:本篇博客只对验证码图片进行了技术分析,不做任何数据抓取存储等操作。

 文章来源地址https://www.toymoban.com/news/detail-439957.html

到了这里,关于爬虫逆向——某建筑市场监管平台的滑块验证码分析的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 市场监管总局发布区块链和分布式记账技术6项标准,中创积极推动区块链产业发展!

    近日,市场监管总局(国家标准委)批准发布一批重要国家标准,涉及生产生活、绿色可持续等多个领域,这些标准将在引领产业发展、促进绿色转型、助力对外贸易、推动城乡建设、提升生活品质等方面发挥重要作用。 其中一项标准为区块链和分布式记账技术6项标准,对

    2024年01月19日
    浏览(34)
  • 金融监管平台系统-一站式监管服务体系、强大数据监管模型

    一、金融监管平台系统简介 金融监管平台是为协助金融办加强日常监管效率,解决监管存在的问题,帮助金融办进一步加强对小额贷款公司的日常监管,及时掌握涉及小额贷款公司的业务监管信息,有效防范金融风险而设计的一套系统。监管平台的建立除了为金融办等主管部

    2024年02月09日
    浏览(49)
  • 简述环保用电监管云平台

    1、概述        推进打赢蓝天保卫战,打好碧水保卫战,打胜净土保卫战,加快生态环境保护、建设美丽中国,各省市结合物联网和大数据政策,也相继颁布有关污染治理设施用电监管平台等相关政策。针对企业内的环保设施、设备运行状况作出检测控制,发挥环保设备的作

    2024年02月11日
    浏览(40)
  • 海域可视化监管:浅析海域动态远程视频智能监管平台的构建方案

    一、方案背景 随着科技的不断进步,智慧海域管理平台已经成为海洋领域监管的一种重要工具。相比传统的视频监控方式,智慧海域管理平台通过建设近岸海域视频监控网、海洋环境监测网和海上目标探测网络等,可实现海洋管理的数字化转型。 传统的监控方式往往需要大

    2024年02月09日
    浏览(40)
  • Spring Cloud 智慧工地源码(PC端+移动端)项目平台、监管平台、大数据平台

     智慧工地源码 智慧工地云平台源码 智慧建筑源码 “智慧工地”是利用物联网、人工智能、云计算、大数据、移动互联网等新一代信息技术,彻底改变传统建筑施工现场参建各方现场管理的交互方式、工作方式和管理模式,实现对人、机、料、法、环的全方位实时监控,变

    2024年02月13日
    浏览(31)
  • 银行安全用电监管平台可行性研究及解决方案

    2017年4月26日,国务院安全生产委员会印发《国务院安全生产委员会关于开展电气火灾综合治理工作的通知》(安委〔2017〕4号),强调用三年时间综合治理电气火灾工作,提高社会单位发现和处置消防电气安全隐患能力,全面推进电气安全管理制度化、规范化,巩固综合治理

    2024年02月16日
    浏览(35)
  • 【Java】Spring Cloud 智慧工地信息云平台源码(PC端+APP端)项目平台、监管平台、大数据平台

    智慧工地是目前建筑行业的热门话题之一,它代表了未来建筑施工的发展趋势。那么,智慧工地的未来,你看好吗? 从技术角度来看,智慧工地无疑是未来发展的趋势。随着人工智能、大数据、云计算等技术的飞速发展,智慧工地可以实现工地信息化、可视化、智能化管理。

    2024年02月08日
    浏览(48)
  • 浅谈基于分项计量的校园能源监管平台解决方案设计

    张心志 关注acrelzxz 安科瑞电气股份有限公司 上海嘉定 201801 摘要:伴随着我国经济的飞速发展,国家机关办公建筑和大型公共建筑高耗能的问题日益突出,如何解决建筑能耗己成为一个国家总能耗的重要组成部分。学校是肩负着教育、科研和社会服务重任的基地,也是资源能

    2024年02月11日
    浏览(32)
  • 10万字信用大数据一体化监管平台建设方案word

    本资料来源公开网络,仅供个人学习,请勿商用,如有侵权请联系删除。 XX公共信用信息管理系统的主要业务流程包括信用信息资源编录管理流程、信用信息归集流程、信用信息服务流程和信用信息异议处理流程。 一.1.1、nbsp; 信用信息资源编录管理流程 信用信息资源编录管

    2023年04月19日
    浏览(52)
  • 大数据库可视化模版16:矿产资源大数据监管平台

    博主介绍: 《Vue.js入门与商城开发实战》《微信小程序商城开发》图书作者,CSDN博客专家,在线教育专家,CSDN钻石讲师;专注大学生毕业设计教育和辅导。 所有项目都配有从入门到精通的基础知识视频课程,免费 项目配有对应开发文档、开题报告、任务书、PPT、论文模版

    2024年02月03日
    浏览(44)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包