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

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

 更新時間:2022年07月01日 15:03:59   作者:小旭2021  
這篇文章介紹了python自動化測試之破解圖文驗證碼的解決方案,文中通過示例代碼介紹的非常詳細。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下

對于web應(yīng)用程序來講,處于安全性考慮,在登錄的時候,都會設(shè)置驗證碼,
驗證碼的類型種類繁多,有圖片中辨別數(shù)字字母的,有點擊圖片中指定的文字的,也有算術(shù)計算結(jié)果的,再復(fù)雜一點就是滑動驗證的。
諸如此類的驗證碼,對我們的系統(tǒng)增加了安全性的保障,但是對于我們測試人員來講,在自動化測試的過程中,無疑是一個棘手的問題。

1、Web 自動化驗證碼解決方案

一般在我們測試過程中,登錄遇到上述的驗證碼的時候,有以下種解決方案:

  • 第一種、讓開發(fā)去掉驗證碼
  • 第二種、設(shè)置一個萬能的驗證碼
  • 第三種、通過 cookie 繞過登錄
  • 第四種、自動識別技術(shù)識別驗證碼

2、驗證碼解決方案

# coding:utf-8
import os
import subprocess
from PIL import Image
 
 
def get_captcha(driver, captcha_id, full_screen_img_path, captcha_img_path, captcha_final_path, txt_path, ocr_path):
    # 瀏覽器界面截圖
    driver.save_screenshot(full_screen_img_path)
    # 找到驗證碼圖片,得到它的坐標(biāo)
    element = driver.find_element_by_id(captcha_id)
    left = element.location['x']
    top = element.location['y']
    right = element.location['x'] + element.size['width']
    bottom = element.location['y'] + element.size['height']
    left, top, right, bottom = int(left), int(top), int(right), int(bottom)
    img = Image.open(full_screen_img_path)
    img = img.crop((left, top, right, bottom))
    # 得到驗證碼圖片
    img.save(captcha_img_path)
    # 打開驗證碼圖片
    img = Image.open(captcha_img_path)
    # 顏色直方圖,255種顏色,255為白色
    # 新建一張圖片(大小和原圖大小相同,背景顏色為255白色)
    img_new = Image.new('P', img.size, 255)
    for x in range(img.size[1]):
        for y in range(img.size[0]):
            # 遍歷圖片的xy坐標(biāo)像素點顏色
            pix = img.getpixel((y, x))
            # print(pix)
            # 自己調(diào)色,r=0,g=0,b>0為藍色
            if pix[0] < 20 and pix[1] < 20 and pix[2] > 50:
                # 把遍歷的結(jié)果放到新圖片上,0為透明度,不透明
                img_new.putpixel((y, x), 0)
    img_new.save(captcha_final_path, format='png')
 
    # 通過tesseract工具解析驗證碼圖片,生成文本
    os.system(ocr_path)
 
    # 讀取txt文件里面的驗證碼
    with open(txt_path, 'r') as f:
        if f.read():
            t = f.read().strip()
            # 去掉中間空格
            if ' ' in t:
                t = t.replace(' ', '')
            if t.isdigit() and len(t) == 4:
                return t
            else:
                return 'fail'
 
 
def check_resp(result, msg):
    if msg in result:
        return 'pass'
    else:
        return 'failed'
 
 
# 接口 - 識別驗證碼
def get_captcha(captcha_img_path, captcha_final_path, txt_path, ocr_path):
 
    # 打開驗證碼圖片
    img = Image.open(captcha_img_path)
 
    # 新建一張圖片(大小和原圖大小相同,背景顏色為255白色)
    img_new = Image.new('P', img.size, 55)
    for x in range(img.size[1]):
        for y in range(img.size[0]):
            # 遍歷圖片的xy坐標(biāo)像素點顏色
            pix = img.getpixel((y, x))
            # print(pix)
            # 自己調(diào)色,r=0,g=0,b>0為藍色
            if pix[0] < 20 and pix[1] < 20 and pix[2] > 50:
                # 把遍歷的結(jié)果放到新圖片上,0為透明度,不透明
                img_new.putpixel((y, x), 0)
    img_new.save(captcha_final_path, format='png')
 
    # 通過tesseract工具解析驗證碼圖片,生成文本,【Tesseract-OCR必須和jpg的根目錄必須相同,如C盤、D盤!?。 ?
    os.system(ocr_path)
 
    # 讀取txt文件里面的驗證碼
    with open(txt_path, 'r') as f:
        if r.read():
            t = f.read().strip()
            # 去掉中間空格
            if ' ' in t:
                t = t.replace(' ', '')
            # 如果是數(shù)字且長度為4,就返回數(shù)字,如果不是就返回 fail
            if t.isdigit() and len(t) == 4:
                return t
            else:
                return fail

到此這篇關(guān)于python破解圖文驗證碼的文章就介紹到這了。希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • 基于Python實現(xiàn)成語填空游戲的示例代碼

    基于Python實現(xiàn)成語填空游戲的示例代碼

    成語填空想必大家都是十分熟悉的了,特別是有在上小學(xué)的家長肯定都有十分深刻的印象。當(dāng)然了你也別小看了成語調(diào)控小游戲,有的時候知識儲備不夠,你還真的不一定猜得出來是什么。本文就來用Python編寫一個簡單的成語填空游戲,感興趣的可以了解下
    2023-02-02
  • 利用Opencv實現(xiàn)圖片的油畫特效實例

    利用Opencv實現(xiàn)圖片的油畫特效實例

    這篇文章主要給大家介紹了關(guān)于利用Opencv實現(xiàn)圖片的油畫特效的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-02-02
  • Anaconda中導(dǎo)出環(huán)境的實現(xiàn)步驟

    Anaconda中導(dǎo)出環(huán)境的實現(xiàn)步驟

    在 Anaconda 中導(dǎo)出環(huán)境是一種常用的做法,可以將當(dāng)前的環(huán)境配置導(dǎo)出到一個文件中,本文主要介紹了Anaconda中導(dǎo)出環(huán)境的實現(xiàn)步驟,具有一定的參考價值
    2024-05-05
  • 詳解python編譯器和解釋器的區(qū)別

    詳解python編譯器和解釋器的區(qū)別

    在本文中小編給讀者們整理了關(guān)于python編譯器和解釋器的區(qū)別的知識點內(nèi)容,有興趣的朋友們跟著學(xué)習(xí)下。
    2019-06-06
  • 能讓Python提速超40倍的神器Cython詳解

    能讓Python提速超40倍的神器Cython詳解

    今天帶大家了解一下能讓Python提速超40倍的神器,文章圍繞著神器Cython展開,文中有非常詳細的介紹及代碼示例,需要的朋友可以參考下
    2021-06-06
  • python 異步async庫的使用說明

    python 異步async庫的使用說明

    這篇文章主要介紹了python 異步async庫的使用說明,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-05-05
  • 在python中利用opencv簡單做圖片比對的方法

    在python中利用opencv簡單做圖片比對的方法

    今天小編就為大家分享一篇在python中利用opencv簡單做圖片比對的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-01-01
  • Django顯示可視化圖表的實踐

    Django顯示可視化圖表的實踐

    這篇文章主要介紹了Django顯示可視化圖表的實踐,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-05-05
  • 基于python select.select模塊通信的實例講解

    基于python select.select模塊通信的實例講解

    下面小編就為大家?guī)硪黄趐ython select.select模塊通信的實例講解。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-09-09
  • Python使用plt.boxplot()函數(shù)繪制箱圖、常用方法以及含義詳解

    Python使用plt.boxplot()函數(shù)繪制箱圖、常用方法以及含義詳解

    箱線圖一般用來展現(xiàn)數(shù)據(jù)的分布,如上下四分位值、中位數(shù)等,也可以直觀地展示異常點,下面這篇文章主要給大家介紹了關(guān)于Python使用plt.boxplot()函數(shù)繪制箱圖、常用方法以及含義詳解的相關(guān)資料,需要的朋友可以參考下
    2022-08-08

最新評論

临洮县| 扶风县| 宜兰县| 罗定市| 丰宁| 图们市| 格尔木市| 浮山县| 桓仁| 即墨市| 钦州市| 定结县| 迭部县| 夹江县| 宝兴县| 阳信县| 汉川市| 大埔区| 全南县| 汾阳市| 南漳县| 社会| 蒙阴县| 大城县| 冷水江市| 昌图县| 平江县| 姚安县| 嫩江县| 礼泉县| 自治县| 葫芦岛市| 谷城县| 镇平县| 华宁县| 三原县| 东台市| 泰顺县| 犍为县| 三门县| 宁陵县|