极验验证码的图片还原

极验验证码的图片还原思路

1.获取图片地址

由上方的图片获取到图片的地址,完整链接需要地址前方+"https://static.geetest.com/"

请求图片之后得到混淆的图片

上方乱序的图片需要进行重组才会得到正常的图片,直接上代码: 下面展示一些 内联代码片。

// A code block
var foo = bar;
def get_merge_image(imurl):  # 传入带缺口信息的图片的地址
        location_list = [{
          
   "x": -157, "y": -58}, {
          
   "x": -145, "y": -58}, {
          
   "x": -265, "y": -58}, {
          
   "x": -277, "y": -58},
                         {
          
   "x": -181, "y": -58}, {
          
   "x": -169, "y": -58}, {
          
   "x": -241, "y": -58}, {
          
   "x": -253, "y": -58},
                         {
          
   "x": -109, "y": -58}, {
          
   "x": -97, "y": -58}, {
          
   "x": -289, "y": -58}, {
          
   "x": -301, "y": -58},
                         {
          
   "x": -85, "y": -58}, {
          
   "x": -73, "y": -58}, {
          
   "x": -25, "y": -58}, {
          
   "x": -37, "y": -58},
                         {
          
   "x": -13, "y": -58}, {
          
   "x": -1, "y": -58}, {
          
   "x": -121, "y": -58}, {
          
   "x": -133, "y": -58},
                         {
          
   "x": -61, "y": -58}, {
          
   "x": -49, "y": -58}, {
          
   "x": -217, "y": -58}, {
          
   "x": -229, "y": -58},
                         {
          
   "x": -205, "y": -58}, {
          
   "x": -193, "y": -58}, {
          
   "x": -145, "y": 0}, {
          
   "x": -157, "y": 0},
                         {
          
   "x": -277, "y": 0}, {
          
   "x": -265, "y": 0}, {
          
   "x": -169, "y": 0}, {
          
   "x": -181, "y": 0},
                         {
          
   "x": -253, "y": 0}, {
          
   "x": -241, "y": 0}, {
          
   "x": -97, "y": 0}, {
          
   "x": -109, "y": 0},
                         {
          
   "x": -301, "y": 0}, {
          
   "x": -289, "y": 0}, {
          
   "x": -73, "y": 0}, {
          
   "x": -85, "y": 0},
                         {
          
   "x": -37, "y": 0}, {
          
   "x": -25, "y": 0}, {
          
   "x": -1, "y": 0}, {
          
   "x": -13, "y": 0},
                         {
          
   "x": -133, "y": 0}, {
          
   "x": -121, "y": 0}, {
          
   "x": -49, "y": 0}, {
          
   "x": -61, "y": 0},
                         {
          
   "x": -229, "y": 0}, {
          
   "x": -217, "y": 0}, {
          
   "x": -193, "y": 0}, {
          
   "x": -205, "y": 0}]

        bg_img = self.sess.get(imurl, verify=False, timeout=3).content
        bg_img = io.BytesIO(bg_img)

        im = Image.open(bg_img)
        
        im_list_upper = []
        im_list_down = []
        for location in location_list:
            if location[y] == -58:
                im_list_upper.append(im.crop((abs(location[x]), 58, abs(location[x]) + 10, 116)))  # 有关参数的介绍请看下方的crop方法的介绍, 可自行调整
            if location[y] == 0:
                im_list_down.append(im.crop((abs(location[x]), 0, abs(location[x]) + 10, 0 + 58)))

        new_im = Image.new(RGB, (260, 116))  # 生成的图片的大小, 可调整

        x_offset = 0
        for im in im_list_upper:

            new_im.paste(im, (x_offset, 0))
            x_offset += im.size[0]

        x_offset = 0
        for im in im_list_down:
            new_im.paste(im, (x_offset, 58))
            x_offset += im.size[0]
        return new_im
        # 将重组之后的图片进行返回 也可直接使用 new_im.save("./captcha.png") 保存
经验分享 程序员 微信小程序 职场和发展