国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

python自動化測試之破解滑動驗證碼

89542767 / 1096人閱讀

  python作為一門比較常見的編程語言,在工作當中的應用還是比較的廣泛的,比如可以對此進行相關的自動化測試,比如自動化測試相關的代碼,另外還有破解滑動驗證碼。那么,具體的操作手法是怎樣的呢?下面就給大家詳細解答下。


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


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


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


  答案當然是有的,常見的驗證碼一般分為兩類,一類是圖文驗證碼,一類是滑動驗證碼!滑動驗證破解思路

02.png

  關于滑動驗證碼破解的思路大體上來講就是以下兩個步驟:


  1、獲取滑塊滑動的距離


  2、模擬拖動滑塊,通過驗證。


  關于這種滑動的驗證碼,滑塊和缺口背景都是分別是一張獨立的圖片,我們可以把這兩張圖片,


  下載下來借助于圖像識別的技術,去識別缺口在背景圖中的位置,然后減去滑塊當前所在位置,就可以得出需要滑動的距離。


  案例講解


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


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


  2、輸入賬號密碼


  3、點擊登錄


  4、模擬滑動驗證


  實現(xiàn)代碼


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


  運行效果:

01.png

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


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


  def get_element_slide_distance(self,slider_ele,background_ele,correct=0):
  """
  根據(jù)傳入滑塊,和背景的節(jié)點,計算滑塊的距離
  該方法只能計算滑塊和背景圖都是一張完整圖片的場景,
  如果背景圖是通過多張小圖拼接起來的背景圖,
  該方法不適用,請使用get_image_slide_distance這個方法
  :param slider_ele:滑塊圖片的節(jié)點
  :type slider_ele:WebElement
  :param background_ele:背景圖的節(jié)點
  :type background_ele:WebElement
  :param correct:滑塊缺口截圖的修正值,默認為0,調試截圖是否正確的情況下才會用
  :type:int
  :return:背景圖缺口位置的X軸坐標位置(缺口圖片左邊界位置)
  """
  #獲取驗證碼的圖片
  slider_url=slider_ele.get_attribute("src")
  background_url=background_ele.get_attribute("src")
  #下載驗證碼背景圖,滑動圖片
  slider="slider.jpg"
  background="background.jpg"
  self.onload_save_img(slider_url,slider)
  self.onload_save_img(background_url,background)
  #讀取進行色度圖片,轉換為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)
  #進行色彩轉換
  slider_pic=cv2.cvtColor(slider_pic,cv2.COLOR_BGR2GRAY)
  #獲取色差的絕對值
  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)
  #背景圖中的圖片缺口坐標位置
  print("當前滑塊的缺口位置:",(left,top,left+width,top+height))
  return left
  滑動滑塊進行驗證
  def slide_verification(self,driver,slide_element,distance):
  """
  滑動滑塊進行驗證
  :param driver:driver對象
  :type driver:webdriver.Chrome
  :param slide_element:滑塊的元組
  :type slider_ele:WebElement
  :param distance:滑動的距離
  :type:int
  :return:
  """
  #獲取滑動前頁面的url地址
  start_url=driver.current_url
  print("需要滑動的距離為:",distance)
  #根據(jù)滑動距離生成滑動軌跡
  locus=self.get_slide_locus(distance)
  print("生成的滑動軌跡為:{},軌跡的距離之和為{}".format(locus,distance))
  #按下鼠標左鍵
  ActionChains(driver).click_and_hold(slide_element).perform()
  time.sleep(0.5)
  #遍歷軌跡進行滑動
  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)
  #釋放鼠標
  ActionChains(driver).release(on_element=slide_element).perform()

  綜上所述,這篇文章就給大家介紹到這里了,希望可以給大家?guī)韼椭?/p>

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

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/128430.html

相關文章

  • python動化測試破解圖文驗證

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

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

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

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

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

    ghnor 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<