安裝PIL和pytesseract,用Pycharm自動化測試,驗證碼登陸


1、安裝PIL

window鍵+r打開cmd,在cmd輸入:pip install PIL

錯誤提示:

Could not find a version that satisfies the requirement PIL (from versions: )

No matching distribution found for PIL
解決方案:
找一個非官方的64位大家通用的PIL安裝
Ctrl+F,搜PIL,根據自己的python版本下載(我是python3.6,64位,但是我64位的cp36用不了,所以就試着安裝了32位的cp36,然后就可以了,同情況的朋友可以試一下)

先安裝wheel。選擇相應版本下載后,打開cmd(win+r),你要先安裝pip,具體pip安裝百度一下怎么安裝,然后pip install wheel,然后直接打開PyCharm就可以直接使用了。

2、安裝tesseract-ocr

github地址: https://github.com/tesseract-ocr/tesseract

windows:

The latest installer can be downloaded here: tesseract-ocr-setup-3.05.01.exe and tesseract-ocr-setup-4.00.00dev.exe (experimental). 

pip install pytesseract

遇到問題及解決:

FileNotFoundError: [WinError 2] 系統找不到指定的文件

解決方案:

1[推薦]: 將tesseract.exe添加到環境變量PATH中,

例如: D:\Tesseract-OCR,默認路徑為C:\Program Files (x86)\Tesseract-OCR

注意: 為了使環境變量生效,需要關閉cmd窗口或是關閉pycharm等ide重新啟動

方法2: 修改pytesseract.py文件,指定tesseract.exe安裝路徑

# CHANGE THIS IF TESSERACT IS NOT IN YOUR PATH, OR IS NAMED DIFFERENTLY
tesseract_cmd = 'C:\\Program Files (x86)\\Tesseract-OCR\\tesseract.exe‘

3、用Pycharm自動化測試,驗證碼登陸,代碼如下:

# -*- coding: utf-8 -*-
# -*- author: hjd -*-

#coding:utf-8
from selenium import webdriver
from time import sleep
import unittest
from PIL import Image
from PIL import ImageEnhance
import pytesseract
from selenium.webdriver.common.keys import Keys

#測試Image類
# im=Image.open('D:\\Pictures\\Camera Roll\\xuanku_chahua.jpg')
# w,h = im.size
# print(w,h)

#打開登陸界面
driver = webdriver.Firefox()
url = "需要登陸的網址"
driver.get(url)
driver.maximize_window()
#點擊顯示驗證碼
sleep(2)
driver.switch_to.default_content()
driver.find_element_by_css_selector("input#captcha").clear()
#截取當前網頁中我們需要的驗證碼
sleep(2)
driver.save_screenshot(r"E:\aa.png")
img = driver.find_element_by_id("codeimage") #定位驗證碼
location = img.location #獲取驗證碼x,y軸坐標
size = img.size #獲取驗證碼的長寬
coderange = (int(location['x']),int(location['y']),int(location['x']+size['width']),int(location['y']+size['height']))
#寫成我們需要截取的位置坐標
i = Image.open(r"E:\aa.png")#打開截圖
frame4 = i.crop(coderange)#使用Image的crop函數,從截圖中再次截取我們需要的區域
frame4.save(r"E:\frame4.png")
i2=Image.open(r"E:\frame4.png")
imgry = i2.convert('L')   #圖像加強,二值化,PIL中有九種不同模式。分別為1,L,P,RGB,RGBA,CMYK,YCbCr,I,F。L為灰度圖像
sharpness = ImageEnhance.Contrast(imgry)#對比度增強
i3 = sharpness.enhance(3.0)  #3.0為圖像的飽和度
i3.save("E:\\image_code.png")
i4 = Image.open("E:\\image_code.png")
text = pytesseract.image_to_string(i4)  #使用image_to_string識別驗證碼
print(text)

#admin登陸
sleep(5)
driver.switch_to.default_content()
driver.find_element_by_id('user_name').send_keys('用戶名')
driver.find_element_by_id('password').send_keys('密碼')
driver.find_element_by_css_selector("input#captcha").send_keys(text)

  需要考慮驗證碼的圖片復雜度問題,如果是有干擾線和噪點的驗證碼圖片,這段代碼無法實現。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM