很多网站都有拼图验证码1。首先要了解拼图验证码的生成原理

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

3。编写脚本

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

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

我们先捋一捋大体思路:

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

直接上代码

先导入必要的包:

# -*- coding:utf-8 -*-import colorsysimport urllib,os,uuid,re,timefrom PIL import Imagefrom selenium.webdriver.common.action_chains import ActionChainsfrom selenium import webdriver

抓到并下载到本地

def create(locapath,fileName): filePath=locapath+'/'+fileName if not os.path.exists(filePath): file=open(filePath,'a+') file.close() return filePathdef 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 deferentdef 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拼图验证码_针对滑动拼图验证码的pythonselenium解法!相关推荐

  1. html 滑动拼图验证,vue登录滑动拼图验证

    vue登录滑动拼图验证 vue登录滑动拼图验证 一.安装插件: npm install --save vue-monoplasty-slide-verify 二.main.js引入: import S ...

  2. python编写一个简单的程序验证码_针对验证码,做一个简单的自动网上签到程序(一)...

    现在签到改成网络签到,比较麻烦,总是需要登陆再签,所以想着做个自动登录并签到的东西,看了看,其他的问题都不大,登录的东西很简单,就是post下就可以了. 查了查,主要问题在验证码部分,看了看,有几种途 ...

  3. java验证码图片滑动验证码_图片滑动验证码的生成

    使用Java生成图片滑动验证码 image.png 目前接到了一个新的小需求,要在登录时进行滑动图片验证. 搜了一下网上的demo,没有太多很完整的demo.就参考各种文档自己拼凑了一个出来.整理一下 ...

  4. python爬虫绕过验证码_爬虫怎样绕过验证码?

    叶湘伦:[文字篇]如何系统地自学 Python?​zhuanlan.zhihu.com 1,cookie登录利用cookie的特性:cookie会保持较长的时间,来避免用户频繁登录 cookie一般由 ...

  5. python 创意项目_针对python开发人员的10个很棒的python项目创意

    python 创意项目 The joy of coding Python should be in seeing short, concise, readable classes that expre ...

  6. python开发中级_针对中级Python开发人员的13个项目构想

    python开发中级 Learning the basics of Python is a wonderful experience. But the euphoria of just learnin ...

  7. 点击某个物体人机验证码java,captcha: 行为验证码(滑动拼图、点选文字),前后端(java)交互,包含h5/flutter/uni-app的源码和实现...

    uni-app在线体验(微信小程序,请使用微信扫一扫) uni-app H5页面在线体验(扫一扫)        微信小程序                  uni-app H5 如果图片未能正常展 ...

  8. 滑动拼图验证码操作步骤:_拼图项目:一个不完整的难题

    滑动拼图验证码操作步骤: 马克·雷因霍尔德(Mark Reinhold)最近提议延迟Java 9,以花更多的时间完成项目Jigsaw,这是即将发布的版本的主要功能. 虽然这个决定肯定会使Java的厄运 ...

  9. 滑动拼图验证码操作步骤:_拼图项目:延期的后果

    滑动拼图验证码操作步骤: Mark Reinhold先生于2012年7月宣布 ,他们计划从Java 8撤消Jigsaw项目 ,因为Jigsaw计划于2013年9月(从现在开始一年)推迟其发布. 这个日 ...

最新文章

  1. 开源引领的万亿级市场,该如何打造出成功的商业模式?
  2. Qt线程之QRunnable的使用详解
  3. wxWidgets:wxPropertyGrid类用法
  4. [Alpha]Scrum Meeting#5
  5. python主讲移动端自动化测试框架appium_Appium-移动端自动测试框架,如何入门?...
  6. [USACO13FEB]Perimeter【DFS / 深搜】
  7. 数据结构和算法——树结构(二叉树的创建、查找、遍历和删除)
  8. 企业API接口设计(token、timestamp、sign)之具体实现
  9. O2O C2C B2B B2C
  10. Auto CAD:CAD软件之顶层菜单栏(文件、编辑、视图、插入、格式、绘图、标注、修改、参数、窗口、数据视图)简介之详细攻略
  11. CSS设置字体和文字样式
  12. uq mysql_MySQL workbench中的PK,NN,UQ,BIN,UN,ZF,AI说明
  13. html文件怎么可以查错,CSS_CSS 网页布局中易犯的10个小错误小结,1. 检查HTML元素是否有拼写错误 - phpStudy...
  14. 华为手机摄影从入门到精通_华为手机拍照技巧从入门到精通
  15. JAVA 冷知识( break outer ;)
  16. 实验1 进程管理实验-计算机操作系统
  17. Flutter 使用Texture实现Windows渲染视频
  18. 海思Hi3518Ev200 4G wifi无线网络视频监控摄像开发板可二次开发
  19. 猪是坚强的,所以取名朱坚强!
  20. 离散数学期末基础知识点复习

热门文章

  1. YOLOv8模型调试记录
  2. ABAP 拼接PDF
  3. 2022java学习路线总结—纯干货分享
  4. 什么是交互设计?(附视频教程)
  5. 关于淘宝与Amazon的首页比较
  6. 基于SOCK_RAW的泛洪攻击
  7. 人工智能前沿——AI技术在医疗领域的应用(二)
  8. ETL(大数据)测试实战篇(二)
  9. 阿里巴巴暑期实习生笔试
  10. 这份 Dubbo 3.0 分布式实战笔记由阿里巴巴 P8 亲自撰写真是大厂 offer 收割机