import time
import pytesseract
from PIL import Image, ImageEnhance
from selenium import webdriver
url = "https://www.xxxxx.com"
# 1、打開瀏覽器,最大化瀏覽器
driver = webdriver.Chrome()
driver.get(url)
#driver.implicitly_wait(10)#隱式等待10s
driver.maximize_window()#最大化窗口
name=driver.find_element_by_id("username")#定位賬號輸入框
password=driver.find_element_by_id("password_1")#定位密碼輸入框
code1=driver.find_element_by_id("user_ck")#定位驗證碼輸入框
driver.save_screenshot("H://test/01.png")#截取屏幕內容,保存到本地
ran = Image.open("H://test/01.png")#打開截圖,獲取驗證碼位置,截取保存驗證碼
box = (564, 395, 643, 423) # 獲取驗證碼位置,自動定位不是很明白,就使用了手動定位,代表(左,上,右,下)
ran.crop(box).save("H://test/02.png")#把獲取的驗證碼保存
#獲取驗證碼圖片,讀取驗證碼
imageCode = Image.open("H://test/02.png") #打開保存的驗證碼圖片
#imageCode.load()
# 圖像增強,二值化
sharp_img = ImageEnhance.Contrast(imageCode).enhance(2.0)
sharp_img.save("H://test/03.png")#保存圖像增強,二值化之后的驗證碼圖片
sharp_img.load() # 對比度增強
time.sleep(2)
print(sharp_img)#打印圖片的信息
code = pytesseract.image_to_string(sharp_img).strip()#讀取驗證碼
# 5、收到驗證碼,進行輸入驗證
print(code)#輸出驗證碼
name.send_keys('60037')#給定位賬號的輸入框中輸入值
password.send_keys('123456')#給定位密碼的輸入框中輸入值
code1.send_keys(code)#給定位驗證碼的輸入框中輸入讀取到的驗證碼
click=driver.find_element_by_name("yt0").click()#點擊登錄
time.sleep(2)
#關閉瀏覽器
driver.quit()
關於於上面的手動定位方法,其實也很簡單,我們拿到截取屏幕的圖片后,用畫圖工具打開,用光標分別找到驗證碼的左、上、右、下的4個點,然后把坐標寫到上面代碼中就可以了。
中間出現了錯誤
解決辦法是在https://github.com/UB-Mannheim/tesseract/wiki中下載 tesseract-ocr,然后安裝
然后,打開pytesseract.py文件,找到tesseract_cmd,將原來的注釋掉,然后添加新的:tesseract_cmd="路徑/tesseract.exe"。再執行代碼,成功
原文鏈接:https://blog.csdn.net/jiaweide123/java/article/details/88060374