亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

python自動(dòng)化測(cè)試之破解滑動(dòng)驗(yàn)證碼

89542767 / 1316人閱讀

  python作為一門比較常見的編程語(yǔ)言,在工作當(dāng)中的應(yīng)用還是比較的廣泛的,比如可以對(duì)此進(jìn)行相關(guān)的自動(dòng)化測(cè)試,比如自動(dòng)化測(cè)試相關(guān)的代碼,另外還有破解滑動(dòng)驗(yàn)證碼。那么,具體的操作手法是怎樣的呢?下面就給大家詳細(xì)解答下。


  在Web自動(dòng)化測(cè)試的過程中,經(jīng)常會(huì)被登錄的驗(yàn)證碼給卡住,不知道如何去通過驗(yàn)證碼的驗(yàn)證。


  一般的情況下遇到驗(yàn)證碼我們可以都可以找開發(fā)去幫忙解決,關(guān)閉驗(yàn)證碼,或者給一個(gè)萬(wàn)能的驗(yàn)證碼!


  那么如果開發(fā)不提供幫助的話,我們自己有沒有辦法來(lái)處理這些驗(yàn)證碼的問題呢?


  答案當(dāng)然是有的,常見的驗(yàn)證碼一般分為兩類,一類是圖文驗(yàn)證碼,一類是滑動(dòng)驗(yàn)證碼!滑動(dòng)驗(yàn)證破解思路

02.png

  關(guān)于滑動(dòng)驗(yàn)證碼破解的思路大體上來(lái)講就是以下兩個(gè)步驟:


  1、獲取滑塊滑動(dòng)的距離


  2、模擬拖動(dòng)滑塊,通過驗(yàn)證。


  關(guān)于這種滑動(dòng)的驗(yàn)證碼,滑塊和缺口背景都是分別是一張獨(dú)立的圖片,我們可以把這兩張圖片,


  下載下來(lái)借助于圖像識(shí)別的技術(shù),去識(shí)別缺口在背景圖中的位置,然后減去滑塊當(dāng)前所在位置,就可以得出需要滑動(dòng)的距離。


  案例講解


  話不多說,我們先來(lái)看一個(gè)案例(QQ空間登錄),QQ空間登錄案例實(shí)現(xiàn)步驟如下:


  1、創(chuàng)建一個(gè)driver對(duì)象,訪問qq登錄頁(yè)面


  2、輸入賬號(hào)密碼


  3、點(diǎn)擊登錄


  4、模擬滑動(dòng)驗(yàn)證


  實(shí)現(xiàn)代碼


  import time
  from selenium import webdriver
  from slideVerfication import SlideVerificationCode
  #1、創(chuàng)建一個(gè)driver對(duì)象,訪問qq登錄頁(yè)面
  browser=webdriver.Chrome()
  browser.get("https://qzone.qq.com/")
  #2、輸入賬號(hào)密碼
  #2.0點(diǎn)擊切換到登錄的iframe
  browser.switch_to.frame('login_frame')
  #2.1點(diǎn)擊賬號(hào)密碼登錄
  browser.find_element_by_id('switcher_plogin').click()
  #2.2定位賬號(hào)輸入框,輸入賬號(hào)
  browser.find_element_by_id("u").send_keys("123456")
  #2.3定位密碼輸入輸入密碼
  browser.find_element_by_id("p").send_keys("PYTHON")
  #3、點(diǎn)擊登錄
  browser.find_element_by_id('login_button').click()
  time.sleep(3)
  #4、模擬滑動(dòng)驗(yàn)證
  #4.1切換到滑動(dòng)驗(yàn)證碼的iframe中
  tcaptcha=browser.find_element_by_id("tcaptcha_iframe")
  browser.switch_to.frame(tcaptcha)
  #4.2獲取滑動(dòng)相關(guān)的元素
  #選擇拖動(dòng)滑塊的節(jié)點(diǎn)
  slide_element=browser.find_element_by_id('tcaptcha_drag_thumb')
  #獲取滑塊圖片的節(jié)點(diǎn)
  slideBlock_ele=browser.find_element_by_id('slideBlock')
  #獲取缺口背景圖片節(jié)點(diǎn)
  slideBg=browser.find_element_by_id('slideBg')
  #4.3計(jì)算滑動(dòng)距離
  sc=SlideVerificationCode(save_image=True)
  distance=sc.get_element_slide_distance(slideBlock_ele,slideBg)
  #滑動(dòng)距離誤差校正,滑動(dòng)距離*圖片在網(wǎng)頁(yè)上顯示的縮放比-滑塊相對(duì)的初始位置
  distance=distance*(280/680)-22
  print("校正后的滑動(dòng)距離",distance)
  #4.4、進(jìn)行滑動(dòng)
  sc.slide_verification(browser,slide_element,distance=100)


  運(yùn)行效果:

01.png

  其實(shí)關(guān)于這個(gè)模塊圖像識(shí)別,是借助了第三方的圖像處理模塊來(lái)進(jìn)行識(shí)別的,python中有很多現(xiàn)成的用來(lái)處理圖片的庫(kù),本文使用的是opencv-python來(lái)進(jìn)行識(shí)別的。slideVerfication模塊上面用到的兩個(gè)方法的部分參考代碼如下:


  根據(jù)傳入滑塊,和背景的節(jié)點(diǎn),計(jì)算滑塊的距離


  def get_element_slide_distance(self,slider_ele,background_ele,correct=0):
  """
  根據(jù)傳入滑塊,和背景的節(jié)點(diǎn),計(jì)算滑塊的距離
  該方法只能計(jì)算滑塊和背景圖都是一張完整圖片的場(chǎng)景,
  如果背景圖是通過多張小圖拼接起來(lái)的背景圖,
  該方法不適用,請(qǐng)使用get_image_slide_distance這個(gè)方法
  :param slider_ele:滑塊圖片的節(jié)點(diǎn)
  :type slider_ele:WebElement
  :param background_ele:背景圖的節(jié)點(diǎn)
  :type background_ele:WebElement
  :param correct:滑塊缺口截圖的修正值,默認(rèn)為0,調(diào)試截圖是否正確的情況下才會(huì)用
  :type:int
  :return:背景圖缺口位置的X軸坐標(biāo)位置(缺口圖片左邊界位置)
  """
  #獲取驗(yàn)證碼的圖片
  slider_url=slider_ele.get_attribute("src")
  background_url=background_ele.get_attribute("src")
  #下載驗(yàn)證碼背景圖,滑動(dòng)圖片
  slider="slider.jpg"
  background="background.jpg"
  self.onload_save_img(slider_url,slider)
  self.onload_save_img(background_url,background)
  #讀取進(jìn)行色度圖片,轉(zhuǎn)換為numpy中的數(shù)組類型數(shù)據(jù),
  slider_pic=cv2.imread(slider,0)
  background_pic=cv2.imread(background,0)
  #獲取缺口圖數(shù)組的形狀-->缺口圖的寬和高
  width,height=slider_pic.shape[::-1]
  #將處理之后的圖片另存
  slider01="slider01.jpg"
  background_01="background01.jpg"
  cv2.imwrite(background_01,background_pic)
  cv2.imwrite(slider01,slider_pic)
  #讀取另存的滑塊圖
  slider_pic=cv2.imread(slider01)
  #進(jìn)行色彩轉(zhuǎn)換
  slider_pic=cv2.cvtColor(slider_pic,cv2.COLOR_BGR2GRAY)
  #獲取色差的絕對(duì)值
  slider_pic=abs(255-slider_pic)
  #保存圖片
  cv2.imwrite(slider01,slider_pic)
  #讀取滑塊
  slider_pic=cv2.imread(slider01)
  #讀取背景圖
  background_pic=cv2.imread(background_01)
  #比較兩張圖的重疊區(qū)域
  result=cv2.matchTemplate(slider_pic,background_pic,cv2.TM_CCOEFF_NORMED)
  #獲取圖片的缺口位置
  top,left=np.unravel_index(result.argmax(),result.shape)
  #背景圖中的圖片缺口坐標(biāo)位置
  print("當(dāng)前滑塊的缺口位置:",(left,top,left+width,top+height))
  return left
  滑動(dòng)滑塊進(jìn)行驗(yàn)證
  def slide_verification(self,driver,slide_element,distance):
  """
  滑動(dòng)滑塊進(jìn)行驗(yàn)證
  :param driver:driver對(duì)象
  :type driver:webdriver.Chrome
  :param slide_element:滑塊的元組
  :type slider_ele:WebElement
  :param distance:滑動(dòng)的距離
  :type:int
  :return:
  """
  #獲取滑動(dòng)前頁(yè)面的url地址
  start_url=driver.current_url
  print("需要滑動(dòng)的距離為:",distance)
  #根據(jù)滑動(dòng)距離生成滑動(dòng)軌跡
  locus=self.get_slide_locus(distance)
  print("生成的滑動(dòng)軌跡為:{},軌跡的距離之和為{}".format(locus,distance))
  #按下鼠標(biāo)左鍵
  ActionChains(driver).click_and_hold(slide_element).perform()
  time.sleep(0.5)
  #遍歷軌跡進(jìn)行滑動(dòng)
  for loc in locus:
  time.sleep(0.01)
  ActionChains(driver).move_by_offset(loc,random.randint(-5,5)).perform()
  ActionChains(driver).context_click(slide_element)
  #釋放鼠標(biāo)
  ActionChains(driver).release(on_element=slide_element).perform()

  綜上所述,這篇文章就給大家介紹到這里了,希望可以給大家?guī)?lái)幫助。

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/128430.html

相關(guān)文章

  • python動(dòng)化測(cè)試破解圖文驗(yàn)證

      小編寫這篇文章的主要目的,主要是用來(lái)給大家介紹關(guān)于python自動(dòng)化測(cè)試的一些事情,涉及到的內(nèi)容主要有包括破解圖文驗(yàn)證碼等相關(guān)的一些事宜,具體怎么才能夠破解圖文驗(yàn)證碼呢?下面就給大家詳細(xì)解答下。  對(duì)于web應(yīng)用程序來(lái)講,處于安全性考慮,在登錄的時(shí)候,都會(huì)設(shè)置驗(yàn)證碼,  驗(yàn)證碼的類型種類繁多,有圖片中辨別數(shù)字字母的,有點(diǎn)擊圖片中指定的文字的,也有算術(shù)計(jì)算結(jié)果的,再?gòu)?fù)雜一點(diǎn)就是滑動(dòng)驗(yàn)證的?! ≈T...

    89542767 評(píng)論0 收藏0
  • 首次公開,整理12年積累的博客收藏夾,零距離展示《收藏夾吃灰》系列博客

    摘要:時(shí)間永遠(yuǎn)都過得那么快,一晃從年注冊(cè),到現(xiàn)在已經(jīng)過去了年那些被我藏在收藏夾吃灰的文章,已經(jīng)太多了,是時(shí)候把他們整理一下了。那是因?yàn)槭詹貖A太亂,橡皮擦給設(shè)置私密了,不收拾不好看呀。 ...

    Harriet666 評(píng)論0 收藏0
  • 我不是機(jī)器人:谷歌最新版驗(yàn)證系統(tǒng)ReCaptcha破解已開源

    摘要:驗(yàn)證碼旨在確認(rèn)訪問者是人還是程序,并防止惡意程序的入侵。自年以來(lái),改為在我不是機(jī)器人的方框中打勾,進(jìn)而完成判別。 選自 Github 作者:George Hughey 機(jī)器之心編譯 每個(gè)人都討厭驗(yàn)證碼,這些惱人的圖片中包含你必須輸入的字符,我們只有正確地填寫才能繼續(xù)訪問網(wǎng)站。驗(yàn)證碼旨在確認(rèn)訪問者是人還是程序,并防止惡意程序的入侵。然而,隨著深度學(xué)習(xí)和計(jì)算機(jī)視覺技術(shù)的發(fā)展,現(xiàn)在這些認(rèn)證方...

    ghnor 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<