最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python+selenium破解拼圖驗證碼的腳本

 更新時間:2022年02月07日 11:58:46   作者:我去熱飯  
很多網(wǎng)站在登錄或者注冊時都會遇到拼圖驗證碼,這種拼圖驗證碼實際上是多個小碎片經(jīng)過重新組合成的一張整體。本文將和大家分享一個基于Python selenium的破解拼圖驗證碼的腳本,需要的可以參考一下

實現(xiàn)思路

很多網(wǎng)站都有拼圖驗證碼

1.首先要了解拼圖驗證碼的生成原理

2.制定破解計劃,考慮其可能性和成功率。

3.編寫腳本

很多網(wǎng)站的拼圖驗證碼都是直接借助第三方插件,也就是一類一種解法。

筆者遇到的這種拼圖驗證碼實際上是多個小碎片經(jīng)過重新組合成的一張整體,首先要在網(wǎng)站上抓取這種小碎片圖片并下載到本地

我們先捋一捋大體思路:

獲取所有碎片圖片----找出他們的排列順序邏輯-----找出他們中含有顏色深的真正位置的那個小碎塊的序號-----根據(jù)每塊碎片的寬度和上下和這個深色小塊的序號算出距離----用selenium向右移動滑塊到這個距離

核心代碼

先導(dǎo)入必要的包:

# -*- 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
  #系統(tǒng)最多可實驗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

主函數(shù)

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()

因每個網(wǎng)站的都大同小異,這里不寫具體測試的網(wǎng)站了,以免對其造成壓力。此算法屬于高度定制的,應(yīng)用其他網(wǎng)站需要改些參數(shù),但是代碼注釋較小。需要注釋,不明白的地方請留言哈。

以上就是Python+selenium破解拼圖驗證碼的腳本的詳細(xì)內(nèi)容,更多關(guān)于Python selenium拼圖驗證碼的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • 13個你可能未使用過的Python特性分享

    13個你可能未使用過的Python特性分享

    Python?是頂級編程語言之一,它具有許多程序員從未使用過的許多隱藏功能。在這篇博客中,將和大家分享一下你可能從未使用過的13?個?Python?特性,感興趣的可以學(xué)習(xí)一下
    2022-11-11
  • 使用Python實現(xiàn)數(shù)據(jù)庫文檔生成工具

    使用Python實現(xiàn)數(shù)據(jù)庫文檔生成工具

    這篇文章主要為大家詳細(xì)介紹了如何使用Python實現(xiàn)數(shù)據(jù)庫文檔生成工具,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以參考一下
    2024-04-04
  • python音頻處理的示例詳解

    python音頻處理的示例詳解

    這篇文章主要介紹了python音頻處理的示例詳解,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-12-12
  • 深入理解python中if?__name__?==?‘__main__‘

    深入理解python中if?__name__?==?‘__main__‘

    很多python的文件中會有語句if?__name=='__main__':,一直不太明白,最近查閱了一下資料,現(xiàn)在明白,本文就來深入理解一下,感興趣的可以了解一下
    2023-08-08
  • 在Django的上下文中設(shè)置變量的方法

    在Django的上下文中設(shè)置變量的方法

    這篇文章主要介紹了在Django的上下文中設(shè)置變量的方法,Django是重多Python高人氣框架中最為著名的一個,需要的朋友可以參考下
    2015-07-07
  • python爬蟲入門教程之點點美女圖片爬蟲代碼分享

    python爬蟲入門教程之點點美女圖片爬蟲代碼分享

    這篇文章主要介紹了python爬蟲入門教程之點點美女圖片爬蟲代碼分享,本文以采集抓取點點網(wǎng)美女圖片為例,需要的朋友可以參考下
    2014-09-09
  • 利用python生成照片墻的示例代碼

    利用python生成照片墻的示例代碼

    這篇文章主要介紹了利用python生成照片墻的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-04-04
  • 用Python?Tkinter庫GUI編程創(chuàng)建圖形用戶界面

    用Python?Tkinter庫GUI編程創(chuàng)建圖形用戶界面

    這篇文章主要為大家介紹了用Python?Tkinter庫GUI編程創(chuàng)建圖形用戶界面,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-08-08
  • python 實現(xiàn)簡易的記事本

    python 實現(xiàn)簡易的記事本

    這篇文章主要介紹了python 實現(xiàn)簡易的記事本的示例代碼,幫助大家更好的理解和學(xué)習(xí)python,感興趣的朋友可以了解下
    2020-11-11
  • 詳解django中url路由配置及渲染方式

    詳解django中url路由配置及渲染方式

    這篇文章主要介紹了詳解django中url路由配置及渲染方式,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2019-02-02

最新評論

四平市| 武宁县| 水富县| 册亨县| 大连市| 屯昌县| 明溪县| 龙陵县| 原平市| 安丘市| 三都| 六盘水市| 常州市| 商城县| 台安县| 龙海市| 信宜市| 饶平县| 克什克腾旗| 元阳县| 吴堡县| 榕江县| 道孚县| 博白县| 米泉市| 名山县| 乡城县| 改则县| 昭平县| 丹江口市| 浮山县| 平乡县| 于都县| 宁安市| 兴宁市| 上饶县| 卢湾区| 五家渠市| 安岳县| 当阳市| 洛隆县|