欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python3網(wǎng)絡(luò)爬蟲(chóng)開(kāi)發(fā)實(shí)戰(zhàn)之極驗(yàn)滑動(dòng)驗(yàn)證碼的識(shí)別

 更新時(shí)間:2019年08月02日 14:24:14   作者:崔慶才  
本節(jié)我們的目標(biāo)是用程序來(lái)識(shí)別并通過(guò)極驗(yàn)驗(yàn)證碼的驗(yàn)證,其步驟有分析識(shí)別思路、識(shí)別缺口位置、生成滑塊拖動(dòng)路徑,最后模擬實(shí)現(xiàn)滑塊拼合通過(guò)驗(yàn)證。需要的朋友可以參考下

上節(jié)我們了解了圖形驗(yàn)證碼的識(shí)別,簡(jiǎn)單的圖形驗(yàn)證碼我們可以直接利用 Tesserocr 來(lái)識(shí)別,但是近幾年又出現(xiàn)了一些新型驗(yàn)證碼,如滑動(dòng)驗(yàn)證碼,比較有代表性的就是極驗(yàn)驗(yàn)證碼,它需要拖動(dòng)拼合滑塊才可以完成驗(yàn)證,相對(duì)圖形驗(yàn)證碼來(lái)說(shuō)識(shí)別難度上升了幾個(gè)等級(jí),本節(jié)來(lái)講解下極驗(yàn)驗(yàn)證碼的識(shí)別過(guò)程。

1. 本節(jié)目標(biāo)

本節(jié)我們的目標(biāo)是用程序來(lái)識(shí)別并通過(guò)極驗(yàn)驗(yàn)證碼的驗(yàn)證,其步驟有分析識(shí)別思路、識(shí)別缺口位置、生成滑塊拖動(dòng)路徑,最后模擬實(shí)現(xiàn)滑塊拼合通過(guò)驗(yàn)證。

2. 準(zhǔn)備工作

本次我們使用的 Python 庫(kù)是 Selenium,使用的瀏覽器為 Chrome,在此之前請(qǐng)確保已經(jīng)正確安裝好了 Selenium 庫(kù)、Chrome瀏覽器并配置好了 ChromeDriver,相關(guān)流程可以參考第一章的說(shuō)明。

3. 了解極驗(yàn)驗(yàn)證碼

極驗(yàn)驗(yàn)證碼其官網(wǎng)為:  http://www.geetest.com/  ,它是一個(gè)專(zhuān)注于提供驗(yàn)證安全的系統(tǒng),主要驗(yàn)證方式是拖動(dòng)滑塊拼合圖像,若圖像完全拼合,則驗(yàn)證成功,即可以成功提交表單,否則需要重新驗(yàn)證,樣例如圖8-5 和 8-6 所示:

圖 8-5 驗(yàn)證碼示例

圖 8-6 驗(yàn)證碼示例

現(xiàn)在極驗(yàn)驗(yàn)證碼已經(jīng)更新到了 3.0 版本,截至 2017 年 7 月全球已有十六萬(wàn)家企業(yè)正在使用極驗(yàn),每天服務(wù)響應(yīng)超過(guò)四億次,廣泛應(yīng)用于直播視頻、金融服務(wù)、電子商務(wù)、游戲娛樂(lè)、政府企業(yè)等各大類(lèi)型網(wǎng)站,下面是斗魚(yú)、魅族的登錄頁(yè)面,可以看到其都對(duì)接了極驗(yàn)驗(yàn)證碼,如圖 8-7 和 8-8 所示:

圖 8-7 斗魚(yú)登錄頁(yè)面

圖 8-8 魅族登錄頁(yè)面

4. 極驗(yàn)驗(yàn)證碼的特點(diǎn)

這種驗(yàn)證碼相較于圖形驗(yàn)證碼來(lái)說(shuō)識(shí)別難度更大,極驗(yàn)驗(yàn)證碼首先需要在前臺(tái)驗(yàn)證通過(guò),對(duì)于極驗(yàn) 3.0,我們首先需要點(diǎn)擊按鈕進(jìn)行智能驗(yàn)證,如果驗(yàn)證不通過(guò),則會(huì)彈出滑動(dòng)驗(yàn)證的窗口,隨后需要拖動(dòng)滑塊拼合圖像進(jìn)行驗(yàn)證,驗(yàn)證之后會(huì)生成三個(gè)加密參數(shù),參數(shù)隨后通過(guò)表單提交到后臺(tái),后臺(tái)還會(huì)進(jìn)行一次驗(yàn)證。

另外極驗(yàn)還增加了機(jī)器學(xué)習(xí)的方法來(lái)識(shí)別拖動(dòng)軌跡,官方網(wǎng)站的安全防護(hù)說(shuō)明如下:

三角防護(hù)之防模擬

惡意程序模仿人類(lèi)行為軌跡對(duì)驗(yàn)證碼進(jìn)行識(shí)別。針對(duì)模擬,極驗(yàn)擁有超過(guò) 4000 萬(wàn)人機(jī)行為樣本的海量數(shù)據(jù)。利用機(jī)器學(xué)習(xí)和神經(jīng)網(wǎng)絡(luò)構(gòu)建線(xiàn)上線(xiàn)下的多重靜態(tài)、動(dòng)態(tài)防御模型。識(shí)別模擬軌跡,界定人機(jī)邊界。

三角防護(hù)之防偽造

惡意程序通過(guò)偽造設(shè)備瀏覽器環(huán)境對(duì)驗(yàn)證碼進(jìn)行識(shí)別。針對(duì)偽造,極驗(yàn)利用設(shè)備基因技術(shù)。深度分析瀏覽器的實(shí)際性能來(lái)辨識(shí)偽造信息。同時(shí)根據(jù)偽造事件不斷更新黑名單,大幅提高防偽造能力。

三角防護(hù)之防暴力

惡意程序短時(shí)間內(nèi)進(jìn)行密集的攻擊,對(duì)驗(yàn)證碼進(jìn)行暴力識(shí)別

針對(duì)暴力,極驗(yàn)擁有多種驗(yàn)證形態(tài),每一種驗(yàn)證形態(tài)都有利用神經(jīng)網(wǎng)絡(luò)生成的海量圖庫(kù)儲(chǔ)備,每一張圖片都是獨(dú)一無(wú)二的,且圖庫(kù)不斷更新,極大程度提高了暴力識(shí)別的成本。

另外極驗(yàn)的驗(yàn)證相對(duì)于普通驗(yàn)證方式更加方便,體驗(yàn)更加友好,其官方網(wǎng)站說(shuō)明如下:

點(diǎn)擊一下,驗(yàn)證只需要 0.4 秒

極驗(yàn)始終專(zhuān)注于去驗(yàn)證化實(shí)踐,讓驗(yàn)證環(huán)節(jié)不再打斷產(chǎn)品本身的交互流程,最終達(dá)到優(yōu)化用戶(hù)體驗(yàn)和提高用戶(hù)轉(zhuǎn)化率的效果。

全平臺(tái)兼容,適用各種交互場(chǎng)景

極驗(yàn)兼容所有主流瀏覽器甚至古老的IE6,也可以輕松應(yīng)用在iOS和Android移動(dòng)端平臺(tái),滿(mǎn)足各種業(yè)務(wù)需求,保護(hù)網(wǎng)站資源不被濫用和盜取。

面向未來(lái),懂科技,更懂人性

極驗(yàn)在保障安全同時(shí)不斷致力于提升用戶(hù)體驗(yàn),精雕細(xì)琢的驗(yàn)證面板,流暢順滑的驗(yàn)證動(dòng)畫(huà)效果,讓驗(yàn)證過(guò)程不再枯燥乏味。

因此,相較于一般驗(yàn)證碼,極驗(yàn)的驗(yàn)證安全性和易用性有了非常大的提高。

5. 識(shí)別思路

但是對(duì)于應(yīng)用了極驗(yàn)驗(yàn)證碼的網(wǎng)站,識(shí)別并不是沒(méi)有辦法的。如果我們直接模擬表單提交的話(huà),加密參數(shù)的構(gòu)造是個(gè)問(wèn)題,參數(shù)構(gòu)造有問(wèn)題服務(wù)端就會(huì)校驗(yàn)失敗,所以在這里我們采用直接模擬瀏覽器動(dòng)作的方式來(lái)完成驗(yàn)證,在 Python 中我們就可以使用 Selenium 來(lái)通過(guò)完全模擬人的行為的方式來(lái)完成驗(yàn)證,此驗(yàn)證成本相對(duì)于直接去識(shí)別加密算法容易不少。

首先我們找到一個(gè)帶有極驗(yàn)驗(yàn)證的網(wǎng)站,最合適的當(dāng)然為極驗(yàn)官方后臺(tái)了,鏈接為: https://account.geetest.com/login ,首先可以看到在登錄按鈕上方有一個(gè)極驗(yàn)驗(yàn)證按鈕,如圖 8-9 所示:

圖 8-9 驗(yàn)證按鈕

此按鈕為智能驗(yàn)證按鈕,點(diǎn)擊一下即可智能驗(yàn)證,一般來(lái)說(shuō)如果是同一個(gè) Session,一小段時(shí)間內(nèi)第二次登錄便會(huì)直接通過(guò)驗(yàn)證,如果智能識(shí)別不通過(guò),則會(huì)彈出滑動(dòng)驗(yàn)證窗口,我們便需要拖動(dòng)滑塊來(lái)拼合圖像完成二步驗(yàn)證,如圖 8-10 所示:

圖 8-10 拖動(dòng)示例

驗(yàn)證成功后驗(yàn)證按鈕便會(huì)變成如下?tīng)顟B(tài),如圖 8-11 所示:

圖 8-11 驗(yàn)證成功結(jié)果

接下來(lái)我們便可以進(jìn)行表單提交了。

所以在這里我們要識(shí)別驗(yàn)證需要做的有三步:

  • 模擬點(diǎn)擊驗(yàn)證按鈕
  • 識(shí)別滑動(dòng)缺口的位置
  • 模擬拖動(dòng)滑塊

第一步操作是最簡(jiǎn)單的,我們可以直接用 Selenium 模擬點(diǎn)擊按鈕即可。

第二步操作識(shí)別缺口的位置比較關(guān)鍵,需要用到圖像的相關(guān)處理方法,那缺口怎么找呢?首先來(lái)觀(guān)察一下缺口的樣子,如圖 8-12 和 8-13 所示:

圖 8-12 缺口示例

圖 8-13 缺口示例

可以看到缺口的四周邊緣有明顯的斷裂邊緣,而且邊緣和邊緣周?chē)忻黠@的區(qū)別,我們可以實(shí)現(xiàn)一個(gè)邊緣檢測(cè)算法來(lái)找出缺口的位置。對(duì)于極驗(yàn)來(lái)說(shuō),我們可以利用和原圖對(duì)比檢測(cè)的方式來(lái)識(shí)別缺口的位置,因?yàn)樵跊](méi)有滑動(dòng)滑塊之前,缺口其實(shí)是沒(méi)有呈現(xiàn)的,如圖 8-14 所示:

圖 8-14 初始狀態(tài)

所以我們可以同時(shí)獲取兩張圖片,設(shè)定一個(gè)對(duì)比閾值,然后遍歷兩張圖片找出相同位置像素 RGB 差距超過(guò)此閾值的像素點(diǎn)位置,那么此位置就是缺口的位置。

第三步操作看似簡(jiǎn)單,但是其中的坑比較多,極驗(yàn)驗(yàn)證碼增加了機(jī)器軌跡識(shí)別,勻速移動(dòng)、隨機(jī)速度移動(dòng)等方法都是不行的,只有完全模擬人的移動(dòng)軌跡才可以通過(guò)驗(yàn)證,而人的移動(dòng)軌跡一般是先加速后減速的,這又涉及到物理學(xué)中加速度的相關(guān)問(wèn)題,我們需要模擬這個(gè)過(guò)程才能成功。

有了基本的思路之后就讓我們用程序來(lái)實(shí)現(xiàn)一下它的識(shí)別過(guò)程吧。

6. 初始化

首先這次我們選定的鏈接為: https://account.geetest.com/login ,也就是極驗(yàn)的管理后臺(tái)登錄頁(yè)面,在這里我們首先初始化一些配置,如 Selenium 對(duì)象的初始化及一些參數(shù)的配置:

EMAIL = 'test@test.com'
PASSWORD = '123456'
 
class CrackGeetest():
 def __init__(self):
  self.url = 'https://account.geetest.com/login'
  self.browser = webdriver.Chrome()
  self.wait = WebDriverWait(self.browser, 20)
  self.email = EMAIL
  self.password = PASSWORD

其中 EMAIL 和 PASSWORD 就是登錄極驗(yàn)需要的用戶(hù)名和密碼,如果沒(méi)有的話(huà)可以先注冊(cè)一下。

7. 模擬點(diǎn)擊

隨后我們需要實(shí)現(xiàn)第一步的操作,也就是模擬點(diǎn)擊初始的驗(yàn)證按鈕,所以我們定義一個(gè)方法來(lái)獲取這個(gè)按鈕,利用顯式等待的方法來(lái)實(shí)現(xiàn):

def get_geetest_button(self):
  """
  獲取初始驗(yàn)證按鈕
  :return: 按鈕對(duì)象
  """
  button = self.wait.until(EC.element_to_be_clickable((By.CLASS_NAME, 'geetest_radar_tip')))
  return button

獲取之后就會(huì)獲取一個(gè) WebElement 對(duì)象,調(diào)用它的 click() 方法即可模擬點(diǎn)擊,代碼如下:

# 點(diǎn)擊驗(yàn)證按鈕
button = self.get_geetest_button()
button.click()

到這里我們第一步的工作就完成了。

8. 識(shí)別缺口

接下來(lái)我們需要識(shí)別缺口的位置,首先我們需要將前后的兩張比對(duì)圖片獲取下來(lái),然后比對(duì)二者的不一致的地方即為缺口。首先我們需要獲取不帶缺口的圖片,利用 Selenium 選取圖片元素,然后得到其所在位置和寬高,隨后獲取整個(gè)網(wǎng)頁(yè)的截圖,再?gòu)慕貓D中裁切出來(lái)即可,代碼實(shí)現(xiàn)如下:

def get_position(self):
  """
  獲取驗(yàn)證碼位置
  :return: 驗(yàn)證碼位置元組
  """
  img = self.wait.until(EC.presence_of_element_located((By.CLASS_NAME, 'geetest_canvas_img')))
  time.sleep(2)
  location = img.location
  size = img.size
  top, bottom, left, right = location['y'], location['y'] + size['height'], location['x'], location['x'] + size[
    'width']
  return (top, bottom, left, right)
 
def get_geetest_image(self, name='captcha.png'):
  """
  獲取驗(yàn)證碼圖片
  :return: 圖片對(duì)象
  """
  top, bottom, left, right = self.get_position()
  print('驗(yàn)證碼位置', top, bottom, left, right)
  screenshot = self.get_screenshot()
  captcha = screenshot.crop((left, top, right, bottom))
  return captcha

在這里 get_position() 函數(shù)首先獲取了圖片對(duì)象,然后獲取了它的位置和寬高,隨后返回了其左上角和右下角的坐標(biāo)。而 get_geetest_image() 方法則是獲取了網(wǎng)頁(yè)截圖,然后調(diào)用了 crop() 方法將圖片再裁切出來(lái),返回的是 Image 對(duì)象。

隨后我們需要獲取第二張圖片,也就是帶缺口的圖片,要使得圖片出現(xiàn)缺口,我們只需要點(diǎn)擊一下下方的滑塊即可,觸發(fā)這個(gè)動(dòng)作之后,圖片中的缺口就會(huì)顯現(xiàn),實(shí)現(xiàn)如下:

def get_slider(self):
  """
  獲取滑塊
  :return: 滑塊對(duì)象
  """
  slider = self.wait.until(EC.element_to_be_clickable((By.CLASS_NAME, 'geetest_slider_button')))
  return slider

利用 get_slider() 方法獲取滑塊對(duì)象,接下來(lái)調(diào)用其 click() 方法即可觸發(fā)點(diǎn)擊,缺口圖片即可呈現(xiàn):

# 點(diǎn)按呼出缺口
slider = self.get_slider()
slider.click()

隨后還是調(diào)用 get_geetest_image() 方法將第二張圖片獲取下來(lái)即可。

到現(xiàn)在我們就已經(jīng)得到了兩張圖片對(duì)象了,分別賦值給變量 image1 和 image2,接下來(lái)對(duì)比圖片獲取缺口即可。要對(duì)比圖片的不同之處,我們?cè)谶@里遍歷圖片的每個(gè)坐標(biāo)點(diǎn),獲取兩張圖片對(duì)應(yīng)像素點(diǎn)的 RGB 數(shù)據(jù),然后判斷二者的 RGB 數(shù)據(jù)差異,如果差距超過(guò)在一定范圍內(nèi),那就代表兩個(gè)像素相同,繼續(xù)比對(duì)下一個(gè)像素點(diǎn),如果差距超過(guò)一定范圍,則判斷像素點(diǎn)不同,當(dāng)前位置即為缺口位置,代碼實(shí)現(xiàn)如下:

def is_pixel_equal(self, image1, image2, x, y):
  """
  判斷兩個(gè)像素是否相同
  :param image1: 圖片1
  :param image2: 圖片2
  :param x: 位置x
  :param y: 位置y
  :return: 像素是否相同
  """
  # 取兩個(gè)圖片的像素點(diǎn)
  pixel1 = image1.load()[x, y]
  pixel2 = image2.load()[x, y]
  threshold = 60
  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
 
def get_gap(self, image1, image2):
  """
  獲取缺口偏移量
  :param image1: 不帶缺口圖片
  :param image2: 帶缺口圖片
  :return:
  """
  left = 60
  for i in range(left, image1.size[0]):
    for j in range(image1.size[1]):
      if not self.is_pixel_equal(image1, image2, i, j):
        left = i
        return left
  return left

get_gap() 方法即為獲取缺口位置的方法,此方法的參數(shù)為兩張圖片,一張為帶缺口圖片,另一張為不帶缺口圖片,在這里遍歷兩張圖片的每個(gè)像素,然后利用 is_pixel_equal() 方法判斷兩張圖片同一位置的像素是否相同,比對(duì)的時(shí)候比較了兩張圖 RGB 的絕對(duì)值是否均小于定義的閾值 threshold,如果均在閾值之內(nèi),則像素點(diǎn)相同,繼續(xù)遍歷,否則遇到不相同的像素點(diǎn)就是缺口的位置。

在這里比如兩張對(duì)比圖片如下,如圖 8-15 和 8-16 所示:

圖 8-15 初始狀態(tài)

圖 8-16 后續(xù)狀態(tài)

兩張圖片其實(shí)有兩處明顯不同的地方,一個(gè)就是待拼合的滑塊,一個(gè)就是缺口,但是滑塊的位置會(huì)出現(xiàn)在左邊位置,缺口會(huì)出現(xiàn)在與滑塊同一水平線(xiàn)的位置,所以缺口一般會(huì)在滑塊的右側(cè),所以要尋找缺口的話(huà),我們直接從滑塊右側(cè)尋找即可,所以在遍歷的時(shí)候我們直接設(shè)置了遍歷的起始橫坐標(biāo)為 60,也就是在滑塊的右側(cè)開(kāi)始識(shí)別,這樣識(shí)別出的結(jié)果就是缺口的位置了。

到現(xiàn)在為止,我們就可以獲取缺口的位置了,剩下最后一步模擬拖動(dòng)就可以完成驗(yàn)證了。

9. 模擬拖動(dòng)

模擬拖動(dòng)的這個(gè)過(guò)程說(shuō)復(fù)雜并不復(fù)雜,只是其中的坑比較多?,F(xiàn)在我們已經(jīng)獲取到了缺口的位置,接下來(lái)只需要調(diào)用拖動(dòng)的相關(guān)函數(shù)將滑塊拖動(dòng)到對(duì)應(yīng)位置不就好了嗎?然而事實(shí)很殘酷,如果勻速拖動(dòng),極驗(yàn)必然會(huì)識(shí)別出來(lái)這是程序的操作,因?yàn)槿耸菬o(wú)法做到完全勻速拖動(dòng)的,極驗(yàn)利用機(jī)器學(xué)習(xí)模型篩選出此類(lèi)數(shù)據(jù),歸類(lèi)為機(jī)器操作,驗(yàn)證碼識(shí)別失敗。

隨后我又嘗試了分段模擬,將拖動(dòng)過(guò)程劃分幾段,每段設(shè)置一個(gè)平均速度,同時(shí)速度圍繞該平均速度小幅度隨機(jī)抖動(dòng),同樣無(wú)法完成驗(yàn)證。

最后嘗試了完全模擬加速減速的過(guò)程通過(guò)了驗(yàn)證,在前段滑塊需要做勻加速運(yùn)動(dòng),后面需要做勻減速運(yùn)動(dòng),在這里利用物理學(xué)的加速度公式即可完成。

設(shè)滑塊滑動(dòng)的加速度用 a 來(lái)表示,當(dāng)前速度用 v 表示,初速度用 v0 表示,位移用 x 表示,所需時(shí)間用 t 表示,則它們之間滿(mǎn)足如下關(guān)系:

x = v0 * t + 0.5 * a * t * t 
v = v0 + a * t

接下來(lái)我們利用兩個(gè)公式可以構(gòu)造一個(gè)軌跡移動(dòng)算法,計(jì)算出先加速后減速的運(yùn)動(dòng)軌跡,代碼實(shí)現(xiàn)如下:

def get_track(self, distance):
  """
  根據(jù)偏移量獲取移動(dòng)軌跡
  :param distance: 偏移量
  :return: 移動(dòng)軌跡
  """
  # 移動(dòng)軌跡
  track = []
  # 當(dāng)前位移
  current = 0
  # 減速閾值
  mid = distance * 4 / 5
  # 計(jì)算間隔
  t = 0.2
  # 初速度
  v = 0
 
  while current < distance:
    if current < mid:
      # 加速度為正2
      a = 2
    else:
      # 加速度為負(fù)3
      a = -3
    # 初速度v0
    v0 = v
    # 當(dāng)前速度v = v0 + at
    v = v0 + a * t
    # 移動(dòng)距離x = v0t + 1/2 * a * t^2
    move = v0 * t + 1 / 2 * a * t * t
    # 當(dāng)前位移
    current += move
    # 加入軌跡
    track.append(round(move))
  return track

在這里我們定義了 get_track() 方法,傳入的參數(shù)為移動(dòng)的總距離,返回的是運(yùn)動(dòng)軌跡,用 track 表示,它是一個(gè)列表,列表的每個(gè)元素代表每次移動(dòng)多少距離。

首先定義了一個(gè)變量 mid,即減速的閾值,也就是加速到什么位置就開(kāi)始減速,在這里定義為 4/5,即模擬前 4/5 路程是加速過(guò)程,后 1/5 是減速過(guò)程。

隨后定義了當(dāng)前位移的距離變量 current,初始為 0,隨后進(jìn)入 while 循環(huán),循環(huán)的條件是當(dāng)前位移小于總距離。在循環(huán)里我們分段定義了加速度,其中加速過(guò)程加速度定義為2,減速過(guò)程加速度定義為 -3,隨后再套用位移公式計(jì)算出某個(gè)時(shí)間段內(nèi)的位移,同時(shí)將當(dāng)前位移更新并記錄到軌跡里即可。

這樣直到運(yùn)動(dòng)軌跡達(dá)到總距離時(shí)即終止循環(huán),最后得到的 track 即記錄了每個(gè)時(shí)間間隔移動(dòng)了多少位移,這樣滑塊的運(yùn)動(dòng)軌跡就得到了。

最后我們只需要按照該運(yùn)動(dòng)軌跡拖動(dòng)滑塊即可,方法實(shí)現(xiàn)如下:

def move_to_gap(self, slider, tracks):
  """
  拖動(dòng)滑塊到缺口處
  :param slider: 滑塊
  :param tracks: 軌跡
  :return:
  """
  ActionChains(self.browser).click_and_hold(slider).perform()
  for x in tracks:
    ActionChains(self.browser).move_by_offset(xoffset=x, yoffset=0).perform()
  time.sleep(0.5)
  ActionChains(self.browser).release().perform()

在這里傳入的參數(shù)為滑塊對(duì)象和運(yùn)動(dòng)軌跡,首先調(diào)用ActionChains click_and_hold() 方法按住拖動(dòng)底部滑塊,隨后遍歷運(yùn)動(dòng)軌跡獲取每小段位移距離,調(diào)用 move_by_offset() 方法移動(dòng)此位移,最后移動(dòng)完成之后調(diào)用 release() 方法松開(kāi)鼠標(biāo)即可。

這樣再經(jīng)過(guò)測(cè)試,驗(yàn)證就通過(guò)了,識(shí)別完成,效果圖 8-17 所示:

圖 8-17 識(shí)別成功結(jié)果

最后,我們只需要將表單完善,模擬點(diǎn)擊登錄按鈕即可完成登錄,成功登錄后即跳轉(zhuǎn)到后臺(tái)。

至此,極驗(yàn)驗(yàn)證碼的識(shí)別工作即全部完成,此識(shí)別方法同樣適用于其他使用極驗(yàn)3.0的網(wǎng)站,原理都是相同的。

10. 本節(jié)代碼

本節(jié)代碼地址為: https://github.com/Python3WebSpider/CrackGeetest 。

11. 結(jié)語(yǔ)

本節(jié)我們分析并實(shí)現(xiàn)了極驗(yàn)驗(yàn)證碼的識(shí)別,其關(guān)鍵在于識(shí)別的思路,如怎樣識(shí)別缺口位置,怎樣生成運(yùn)動(dòng)軌跡等,學(xué)會(huì)了這些思路后以后我們?cè)儆龅筋?lèi)似原理的驗(yàn)證碼同樣可以完成識(shí)別過(guò)程。

總結(jié)

以上所述是小編給大家介紹的Python3網(wǎng)絡(luò)爬蟲(chóng)開(kāi)發(fā)實(shí)戰(zhàn)之極驗(yàn)滑動(dòng)驗(yàn)證碼的識(shí)別,希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!
如果你覺(jué)得本文對(duì)你有幫助,歡迎轉(zhuǎn)載,煩請(qǐng)注明出處,謝謝!

相關(guān)文章

  • pytorch?膨脹算法實(shí)現(xiàn)大眼效果

    pytorch?膨脹算法實(shí)現(xiàn)大眼效果

    在PS中,我們可以利用液化工具對(duì)人像進(jìn)行瘦臉、放大眼睛等系列的常規(guī)操作。今天我們來(lái)了解一下這些操作的算法原理,并用pytorch?膨脹算法來(lái)實(shí)現(xiàn)大眼效果,感興趣的可以了解一下
    2021-11-11
  • python機(jī)器學(xué)習(xí)pytorch?張量基礎(chǔ)教程

    python機(jī)器學(xué)習(xí)pytorch?張量基礎(chǔ)教程

    這篇文章主要為大家介紹了python機(jī)器學(xué)習(xí)pytorch?張量基礎(chǔ)教程,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-10-10
  • python基礎(chǔ)學(xué)習(xí)之遞歸函數(shù)知識(shí)總結(jié)

    python基礎(chǔ)學(xué)習(xí)之遞歸函數(shù)知識(shí)總結(jié)

    在函數(shù)中調(diào)用函數(shù)自身,我們把這樣的函數(shù)叫做遞歸函數(shù), 遞歸函數(shù)就是循環(huán)的調(diào)用,類(lèi)似于俄羅斯套娃,本文給各位小伙伴詳細(xì)介紹了python遞歸函數(shù),需要的朋友可以參考下
    2021-05-05
  • Python英文詞頻統(tǒng)計(jì)(哈姆雷特)程序示例代碼

    Python英文詞頻統(tǒng)計(jì)(哈姆雷特)程序示例代碼

    在文本處理方面,Python也有著得天獨(dú)厚的優(yōu)勢(shì),不僅提供了多種字符串操作函數(shù),而且還可以使用各種開(kāi)源庫(kù)來(lái)處理文本,下面這篇文章主要給大家介紹了關(guān)于Python英文詞頻統(tǒng)計(jì)(哈姆雷特)程序示例的相關(guān)資料,需要的朋友可以參考下
    2023-06-06
  • python3 中時(shí)間戳、時(shí)間、日期的轉(zhuǎn)換和加減操作

    python3 中時(shí)間戳、時(shí)間、日期的轉(zhuǎn)換和加減操作

    這篇文章主要介紹了python3 中時(shí)間戳、時(shí)間、日期的轉(zhuǎn)換和加減操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-07-07
  • Python腳本實(shí)現(xiàn)Web漏洞掃描工具

    Python腳本實(shí)現(xiàn)Web漏洞掃描工具

    這是去年畢設(shè)做的一個(gè)Web漏洞掃描小工具,主要針對(duì)簡(jiǎn)單的SQL注入漏洞、SQL盲注和XSS漏洞。下文給大家介紹了使用說(shuō)明和源代碼,一起看看吧
    2016-10-10
  • Python實(shí)現(xiàn)基于KNN算法的筆跡識(shí)別功能詳解

    Python實(shí)現(xiàn)基于KNN算法的筆跡識(shí)別功能詳解

    這篇文章主要介紹了Python實(shí)現(xiàn)基于KNN算法的筆跡識(shí)別功能,結(jié)合實(shí)例形式詳細(xì)分析了使用KNN算法進(jìn)行筆跡識(shí)別的相關(guān)庫(kù)引入、操作步驟與相關(guān)注意事項(xiàng),需要的朋友可以參考下
    2018-07-07
  • python實(shí)現(xiàn)線(xiàn)性插值的示例

    python實(shí)現(xiàn)線(xiàn)性插值的示例

    線(xiàn)性插值是針對(duì)一維數(shù)據(jù)的插值方法,它根據(jù)一維數(shù)據(jù)序列中需要插值的點(diǎn)的左右臨近兩個(gè)數(shù)據(jù)來(lái)進(jìn)行數(shù)值估計(jì),這篇文章主要介紹了python實(shí)現(xiàn)線(xiàn)性插值,需要的朋友可以參考下
    2022-12-12
  • 用Python中的wxPython實(shí)現(xiàn)最基本的瀏覽器功能

    用Python中的wxPython實(shí)現(xiàn)最基本的瀏覽器功能

    這篇文章主要介紹了用Python中的wxPython實(shí)現(xiàn)基本的瀏覽器功能,本文來(lái)自于IBM官方網(wǎng)站開(kāi)發(fā)者文檔,需要的朋友可以參考下
    2015-04-04
  • Python中max函數(shù)用于二維列表的實(shí)例

    Python中max函數(shù)用于二維列表的實(shí)例

    下面小編就為大家分享一篇Python中max函數(shù)用于二維列表的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-04-04

最新評(píng)論