返回顶部
首页 > 资讯 > 后端开发 > Python >Python+selenium破解拼图验证码的脚本
  • 305
分享到

Python+selenium破解拼图验证码的脚本

2024-04-02 19:04:59 305人浏览 八月长安

Python 官方文档:入门教程 => 点击学习

摘要

目录实现思路核心代码实现思路 很多网站都有拼图验证码 1.首先要了解拼图验证码的生成原理 2.制定破解计划,考虑其可能性和成功率。 3.编写脚本 很多网站的拼图验证码都是直接借助第三

实现思路

很多网站都有拼图验证码

1.首先要了解拼图验证码的生成原理

2.制定破解计划,考虑其可能性和成功率。

3.编写脚本

很多网站的拼图验证码都是直接借助第三方插件,也就是一类一种解法。

笔者遇到的这种拼图验证码实际上是多个小碎片经过重新组合成的一张整体,首先要在网站上抓取这种小碎片图片并下载到本地

我们先捋一捋大体思路:

获取所有碎片图片----找出他们的排列顺序逻辑-----找出他们中含有颜色深的真正位置的那个小碎块的序号-----根据每块碎片的宽度和上下和这个深色小块的序号算出距离----用selenium向右移动滑块到这个距离

核心代码

先导入必要的包:

# -*- coding:utf-8 -*-
import colorsys
import urllib,os,uuid,re,time
from PIL import Image
from selenium.WEBdriver.common.action_chains import ActionChains
from selenium import webdriver

抓到并下载到本地

def create(locapath,fileName):
  filePath=locapath+'/'+fileName
  if not os.path.exists(filePath):
    file=open(filePath,'a+')
    file.close()
    return filePath
def downloadImg():
  list = openBrowser()
  for i in range(2):
    fileName = str(i) + '_test.jpg'
    urllib.urlretrieve(list[i], create('/Users/zijiawang/Downloads/', fileName))  #下载到本地
  time.sleep(3)
def openBrowser():
  global wzj
  wzj =  webdriver.Firefox()
  wzj.get('https://。。。。')
  image1_url = wzj.find_elements_by_class_name('gt_cut_bg_slice')[0].get_attribute('style')
  image1_url=image1_url[23:-38]
  image2_url = wzj.find_elements_by_class_name('gt_cut_fullbg_slice')[0].get_attribute('style')
  image2_url=image2_url[23:-38]
  return [image1_url,image2_url]

分割并获取rgb颜色

ef getcolor(image):
  list = [[x,y] for x in range(26) for y in range(2)]
  listt = []
  colors = []
  for i in range(len(list)):
    l = list[i][0]*12+12
    w = list[i][1]*58+58
    listt.append([12*0.25+i/2*12, 58*0.25+((i+10)%2)*58])
    listt.append([12*0.25+i/2*12, 58*0.75+((i+10)%2)*58])
    listt.append([12*0.75+i/2*12, 58*0.25+((i+10)%2)*58])
    listt.append([12*0.75+i/2*12, 58*0.75+((i+10)%2)*58])
  for i in range(len(listt)):
    colors.append(image[listt[i][0],listt[i][1]])
  return colors

找出不同的小碎片序号

def getDeferent():
  deferent = []
  for i in range(208):
    if abs(color1[i][2] - color2[i][2]) >20:
      print u'B差值: ',color1[i][2]-color2[i][2]
      deferent.append(i)
      # print ([i,abs(color1[i][0] - color2[i][0]),abs(color1[i][1] - color2[i][1]),abs(color1[i][2] - color2[i][2])])
  return deferent
def getUPDOWN():
  deferent = getDeferent()
  xlist = []
  ylist = []
  for i in deferent:
    if (i / 4) % 2 == 0:
      xlist.append(i)
    else:
      ylist.append(i)
  uplist = []
  downlist = []
  for i in xlist:
    uplist.append(i / 4)
  for i in ylist:
    downlist.append(i / 4)
  for i in range(len(uplist)):
    uplist[i] /= 2
  for i in range(len(downlist)):
    downlist[i] /= 2
  func = lambda x, y: x if y in x else x + [y]
  up = reduce(func, [[], ] + uplist)
  func = lambda x, y: x if y in x else x + [y]
  down = reduce(func, [[], ] + downlist)
  return up,down

编写好排列方法,会用的

def bubble(l):
    for index in range(len(l) - 1, 0 , -1):
        for two_index in range(index):
            if l[two_index] > l[two_index + 1]:
                l[two_index], l[two_index + 1] = l[two_index + 1], l[two_index]
    return l

最后的进行解析,拼装源码

def end():
  orders = getUPDOWN()
  orderx = orders[0]
  ordery = orders[1]
  print 'x:',orderx
  print 'y:',ordery
  orderX = [145, 157, 277, 265, 169, 181, 253, 241, 97, 109, 301, 289, 73, 85, 37, 25, 1, 13, 133, 121, 49, 61, 229,
            217, 193, 205]
  orderY = [157, 145, 265, 277, 181, 169, 241, 253, 109, 97, 289, 301, 85, 73, 25, 37, 13, 1, 121, 133, 61, 49, 217,
            229, 205, 193]
  print u'X:',orderX
  print u'Y:',orderY
  for x in range(26):
    orderX[x] -= 1
    orderX[x] /= 12
  for y in range(26):
    orderY[y] -= 1
    orderY[y] /= 12
  endX = []
  endY = []
  for i in range(len(orderX)):
    for j in range(len(orderx)):
      if orderx[j] == orderX[i]:
        endX.append(i)
        break
  for i in range(len(orderY)):
    for j in range(len(ordery)):
      if ordery[j] == orderY[i]:
        endY.append(i)
        break
  print 'endx:',endX
  print 'endy:',endY
  os.remove('/Users/zijiawang/Downloads/0_test.jpg')
  os.remove('/Users/zijiawang/Downloads/1_test.jpg')
  all = []
  all = endX+endY
  # print 'all:',all
  #系统最多可实验5次
  func = lambda x, y: x if y in x else x + [y]
  all_old = reduce(func, [[], ] + all)
  # print 'all_old:',all_old
  all_end =bubble(all_old)
  print 'all_end:',all_end
  duandata = 1000
  for i in range(1,len(all_end)):
    if all_end[i]-1 in all_end:
      pass
    else:
      duandata = all_end[i]
      print u'断点为:',duandata
  guess =[]
  if duandata != 1000:
    if endX != [] and endY!=[]:
      print u'断点1'
      guess = [duandata,all_end[0]]
    elif endX ==[]:
      print u'断点2'
      guess = [duandata, endY[0]]
    elif endY == []:
      print u'断点3'
      guess = [duandata,  endX[0]]
  else:
      print u'无断点'
      guess = [ all_end[0]]
  end_guess =[]
  print u'猜测的点:',guess
  for i in guess:
    end_guess.append(i * 12 - 38)
    end_guess.append(i * 12 - 28)
    end_guess.append(i * 12 - 20)
    end_guess.append(i * 12 - 17)
    end_guess.append(i * 12 - 15)
  print  u'猜测的位移量: ',end_guess
  return end_guess

主函数

if __name__ == '__main__':
  downloadImg()
  color1 = getcolor(Image.open('/Users/zijiawang/Downloads/0_test.jpg').load())
  color2 = getcolor(Image.open('/Users/zijiawang/Downloads/1_test.jpg').load())
  guess = end()
  for i in guess:
    print i,wzj.title
    try:
      ele = wzj.find_element_by_xpath('//div[@class="gt_slider_knob gt_show"]')
    except:
      ele = wzj.find_element_by_xpath('//div[@class="gt_slider_knob gt_show moving"]')
    ActionChains(wzj).click_and_hold(ele).perfORM()
    ActionChains(wzj).move_to_element_with_offset(ele, 0,i).perform()

因每个网站的都大同小异,这里不写具体测试的网站了,以免对其造成压力。此算法属于高度定制的,应用其他网站需要改些参数,但是代码注释较小。需要注释,不明白的地方请留言哈。

以上就是python+selenium破解拼图验证码的脚本的详细内容,更多关于Python selenium拼图验证码的资料请关注编程网其它相关文章!

--结束END--

本文标题: Python+selenium破解拼图验证码的脚本

本文链接: https://lsjlt.com/news/138259.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Python+selenium破解拼图验证码的脚本
    目录实现思路核心代码实现思路 很多网站都有拼图验证码 1.首先要了解拼图验证码的生成原理 2.制定破解计划,考虑其可能性和成功率。 3.编写脚本 很多网站的拼图验证码都是直接借助第三...
    99+
    2024-04-02
  • Python+selenium怎么破解拼图验证码
    这篇文章主要介绍“Python+selenium怎么破解拼图验证码”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Python+selenium怎么破解拼图验证码”文章能帮助大家解决问题。实现思路很多...
    99+
    2023-06-29
  • selenium+java破解极验滑动验证码的示例代码
    摘要分析验证码素材图片混淆原理,并采用selenium模拟人拖动滑块过程,进而破解验证码。人工验证的过程打开威锋网注册页面移动鼠标至小滑块,一张完整的图片会出现(如下图1)点击鼠标左键,图片中间会出现一个缺块(如下图2)移动小滑块正上方图案...
    99+
    2023-05-30
  • 实验楼Python破解验证码
      本人大二,因为Python结业考试项目,又想要学习机器学习方向,但是由于接触时间不长,选择了实验楼的Python破解验证码这个项目作为我的项目, 我在原来的基础上加了一些代码用于完善,并且对功能如何实现记录在此,第一次接触到图像识别的...
    99+
    2023-01-30
    验证码 实验楼 Python
  • Python实现滑块拼图验证码详解
    目录初级版滑块拼图验证码补充知识点高级版滑动拼图验证码滑动拼图验证码可以算是滑块验证码的进阶版本,其验证机制相对复杂。本节将介绍两种滑动拼图验证码:初级版和高级版本。 初级版滑块拼...
    99+
    2024-04-02
  • 详解Python结合Genetic Algorithm算法破解网易易盾拼图验证
    首先看一下目标的验证形态是什么样子的 是一种通过验证推理的验证方式,用来防人机破解的确是很有效果,但是,But,这里面已经会有一些破绽,比如: (以上是原图和二值化之后的结果) ...
    99+
    2024-04-02
  • Python+Selenium+Pytesseract实现图片验证码识别
    目录一、selenium截取验证码二、安装识别环境pytesseract+Tesseract-OCR验证识别环境是否正常三、处理验证码图片图片处理识别一、selenium截取验证码 ...
    99+
    2024-04-02
  • python自动化测试之破解图文验证码
    对于web应用程序来讲,处于安全性考虑,在登录的时候,都会设置验证码,验证码的类型种类繁多,有图片中辨别数字字母的,有点击图片中指定的文字的,也有算术计算结果的,再复杂一点就是滑动验...
    99+
    2024-04-02
  • python滑块验证码如何破解
    很抱歉,我不能提供关于破解滑块验证码的信息。这是不道德且违法行为,违反了网站的服务条款和法律法规。我鼓励尊重和遵守所有的在线服务和法...
    99+
    2023-08-24
    python
  • 利用Python+Selenium破解春秋航空网滑块验证码的实战过程
    目录前言开发工具环境搭建实战记录一.验证码简介二.破解滑块验证码2.1计算滑块到缺口的距离2.2将滑块拖到缺口位置前言 记录一次利用Python+Selenium破解滑块验证码的实战过程。 让我们愉快地开始吧~ 开...
    99+
    2022-06-02
    Python Selenium滑块验证码 Python Selenium验证码
  • 用Python写漏洞验证脚本的代码
    小白尝试写任意文件读取poc 我是一个小白,完全不懂Python,但是Python在渗透中往往是一个重要的角色。有一个CSDN百万大佬写了这样一句话,不会编程的渗透都是耍流氓。我虽然...
    99+
    2024-04-02
  • 怎么用Python破解滑动验证码
    本篇文章给大家分享的是有关怎么用Python破解滑动验证码,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。相信大家在登录某些网站的时候,都会遇到请输入验证码的状态,比如在哔哔哔哔...
    99+
    2023-06-02
  • 利用Python破解验证码实例详解
    一、前言 本实验将通过一个简单的例子来讲解破解验证码的原理,将学习和实践以下知识点: Python基本知识 PIL模块的使用 二、实例详解 安装 pillow(PIL)库: ...
    99+
    2022-06-04
    验证码 详解 实例
  • Python破解极验滑动验证码的示例分析
    这篇文章将为大家详细讲解有关Python破解极验滑动验证码的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。极验滑动验证码以上图片是最典型的要属于极验滑动认证了,极验官网:http://www.ge...
    99+
    2023-06-15
  • Python+Selenium+Pytesseract怎么实现图片验证码识别
    这篇文章给大家介绍Python+Selenium+Pytesseract怎么实现图片验证码识别,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。一、selenium截取验证码import jsonfrom&nbs...
    99+
    2023-06-26
  • Python破解极验滑动验证码详细步骤
    目录极验滑动验证码实现位移移动需要的基础知识对比两张图片,找出缺口获得图片按照位移移动详细代码极验滑动验证码 以上图片是最典型的要属于极验滑动认证了,极验官网:http://www...
    99+
    2024-04-02
  • Python爬虫怎么破解滑块验证码
    这篇文章主要介绍“Python爬虫怎么破解滑块验证码”,在日常操作中,相信很多人在Python爬虫怎么破解滑块验证码问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Python爬虫怎么破解滑块验证码”的疑惑有所...
    99+
    2023-06-20
  • Python脚本暴力破解栅栏密码
    今天遇到一个要破解的栅栏密码,先给大家介绍通用的脚本。 方法一(通用脚本): #!/usr/bin/env python # -*- coding: gbk -*- # -*- coding: ut...
    99+
    2022-06-04
    栅栏 脚本 暴力
  • Python破解网站登录密码脚本
    目录关键代码解释完整代码方法一运行结果方法二运行结果测试靶机为DVWA,适合DVWA暴力破解模块的Low和Medium等级 关键代码解释 url指定url地址 url = "http...
    99+
    2024-04-02
  • 怎么用Python爬虫破解滑动验证码
    这篇文章给大家分享的是有关怎么用Python爬虫破解滑动验证码的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。python的数据类型有哪些python的数据类型:1. 数字类型,包括int(整型)、long(长整型...
    99+
    2023-06-14
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作