python爬虫之图像对比



爬虫的一大难点就是破解验证码。验证码大致上分为文字识别、滑动、文字点击、图像识别等,本文讲的是其中的滑动验证码。滑动验证码,需要我们将滑块移至图片缺口位置。实际上我们可以通过对比完整图片和缺口图片各个像素点的RGB值,得出缺口位置左上角的坐标,然后构造轨迹算法使用selenium模拟移动滑块即可。


滑动验证码破解大致流程为:

1 - 获取缺口图片与原图片
2 - 图像对比,得出缺口左上角坐标
3 - 构造轨迹算法
4 - 使用selenium模拟移动滑块



本篇主要针对图像对比进行探讨。

使用工具:python,selenium,chromedriver,chrom浏览器



操作步骤讲解环节


下面就是喜闻乐见的操作步骤讲解环节了(´◔౪◔)



代码部分:

from PIL import Image


class get_Image_gap():
    def get_gap(self, image1, image2):
        self.Image1 = image1
        self.Image2 = image2
        # 从图片横坐标60开始取值,前面为滑块
        self.Left = 60
        # 用于记录缺口左上角的坐标
        gap_x = 0
        gap_y = 0
        # 这里image1与image2图像的size应该是相同的
        # 图像由一个个像素点构成,Image1.size[0]表示横坐标,Image1.size[1]表示纵坐标
        for i in range(self.Left, self.Image1.size[0]):
            for j in range(self.Image1.size[1]):
                if not self.is_pixel_equal(i, j):
                    gap_x = i
                    gap_y = j
                    return gap_x, gap_y
        return gap_x, gap_y


    def is_pixel_equal(self, x, y):
        # 取两个图片的像素点,返回该点的RGB值,如:(211, 181, 133, 255)
        pixel1 = self.Image1.load()[x, y]
        pixel2 = self.Image2.load()[x, y]

        # 设置误差区间为60,该值需要自己设置
        threshold = 60

        # abs(x)返回绝对值
        # 分别比较该点的RGB三值,若其中某个值的误差大于设定的threshold,则返回False,得出该点坐标
        if abs(pixel1[0] - pixel2[0]) < threshold and abs(pixel1[1] - pixel2[1]) < threshold and abs(pixel1[2] - pixel2[2]) < threshold:
            return True
        else:
            return False

if __name__ == '__main__':
    image1 = Image.open('./img/captcha1.png')
    image2 = Image.open('./img/captcha2.png')

    get_image_gap = get_Image_gap()
    (gap_x, gap_y) = get_image_gap.get_gap(image1, image2)
    print('缺口左上角坐标为:', '({}, {})'.format(gap_x, gap_y))



要点总结:
1 - 导入python的图像库Image,并使用该库打开两张图片(缺口图片与原图片)
2 - 从图片横坐标的60开始取值,因为缺口图片左端存在滑块
3 - 设置一个阈值,当两张图片相同坐标的像素点的RGB值超出阈值,则认为该点为缺口的左上角,并返回该点坐标







那么本次的分享就到这里了,喜欢的话麻烦点赞关注一下;不喜欢的话可以去看下小编的其他文章,肯定有喜欢的;都不喜欢的话可以点个关注,万一以后有喜欢的呢(๑•̀ㅂ•́)و✧

有疑问的小伙伴也可以在评论区留言哦,我会第一时间解答的。





你点了吗◔ ‸◔?

你可能感兴趣的:(python爬虫之图像对比)