Python自動識別驗證碼

2022-09-13 01:21:14 字數 3177 閱讀 3803

這個是在網上找的**修修改改之後發現還是蠻好用的。成功率在60%左右,雖然成功率雖然有點低,但是相對來說還是蠻可以的了。

1

importre2

from pil import

image

3import

pytesseract45

6#自動識別驗證碼

7def

get_pictures(driver):8#

整個頁面截圖的存放路徑

9 driver.s**e_screenshot(r'

d:\honest\picture\poo1.png')

10#id是驗證碼在頁面上的id

11 pg = driver.find_element_by_id('

codeimg')

12 left = pg.location['x'

]13 top = pg.location['y'

]14 right = pg.size['

width

'] +left

15 height = pg.size['

height

'] +top

16 im = image.open(r'

d:\honest\picture\poo1.png')

17 image_obj =im.crop((left, top, right, height))18#

驗證碼截圖的存放路徑

19 image_obj.s**e(r'

d:\honest\picture\poo2.png')

20 images = image_obj.convert("

l") #

轉灰度21 pixdata =images.load()

22 w, h =images.size23#

畫素值24 threshold = 19025#

遍歷所有畫素,大於閾值的為黑色

26for y in

range(h):

27for x in

range(w):

28if pixdata[x, y] 29 pixdata[x, y] =0

30else

:31 pixdata[x, y] = 255

32 data =images.getdata()

33 w, h =images.size

34 black_point =0

35for x in range(1, w - 1):

36for y in range(1, h - 1):

37 mid_pixel = data[w * y + x] #

**畫素點畫素值

38if mid_pixel < 50: #

找出上下左右四個方向畫素點畫素值

39 top_pixel = data[w * (y - 1) +x]

40 left_pixel = data[w * y + (x - 1)]

41 down_pixel = data[w * (y + 1) +x]

42 right_pixel = data[w * y + (x + 1)]43#

判斷上下左右的黑色畫素點總個數

44if top_pixel < 10:

45 black_point += 1

46if left_pixel < 10:

47 black_point += 1

48if down_pixel < 10:

49 black_point += 1

50if right_pixel < 10:

51 black_point += 1

52if black_point < 1:

53 images.putpixel((x, y), 255)

54 black_point =0

55 result = pytesseract.image_to_string(images) #

轉文字56 resultj = re.sub(u"

([^\u4e00-\u9fa5\u0030-\u0039\u0041-\u005a\u0061-\u007a])

", "", result) #

去除識別出來的特殊字元

57 result_four = resultj[0:4] #

只獲取前4個字元58#

print(result_four) # 列印識別的驗證碼

59return result_four

from selenium import

webdriver

from common.common_verification import get_pictures #

方法路徑

deftest_a():

driver =webdriver.chrome()

driver.get(r

"www.123.com")

#賬號driver.find_element_by_name('

loginname

').send_keys('

123'

) #密碼

driver.find_element_by_name('

password

').send_keys('

123'

)

#驗證碼 呼叫方法 get_pictures(self.driver)

driver.find_element_by_id('

code

').send_keys(get_pictures(self.driver)) if

__name__ == '

__main__':

test_a()

驗證碼自動識別平台與打碼平台的區別

從驗證碼出現之後,引發的驗證碼識別技術衍生了一系列的新興行業。比如打碼平台,軟體自動識別驗證碼等網際網路行業,可以說是促進了就業和經濟的發達。驗證碼識別平台 答題吧打碼平台 驗證碼識別作為一種圖靈測試,綜合了影象處理 機器視覺 模式識別 人工智慧等多個領域的研究。其研究成果不僅對於captcha識別...

Python 驗證碼識別

使用pip安裝pytessseract,如圖所示 例項 識別該中的字元 指令碼 import os os.chdir c python34 lib site packages pytesser from pytesser import from pytesseract import image to...

python 驗證碼識別

一 python識別簡單驗證碼 1 2 func 實現簡單驗證碼獲取 3 4import pytesseract 5from pil import image67 首先通過image開啟乙個 9 然後通過方法將image物件轉化為字串10 code pytesseract.image to stri...