python使用selenium和pytesser3處理爬蟲頁面中的驗證碼
阿新 • • 發佈:2019-01-06
from selenium import webdriver import pytesser3 import time driver = webdriver.Chrome() # 迴圈輸入驗證碼,因為一遍可能不能正確識別,直到正確識別,再進行其他操作 accept = False while not accept: try: # 開啟含有驗證碼的搜尋頁 driver.get('your link') time.sleep(3) # 找到輸入框input,輸入你的搜尋關鍵詞 input = driver.find_element_by_id('keyword') input.send_keys('your keyword') time.sleep(5) # 驗證碼識別 # 先對瀏覽器當前頁面截圖,並存儲 driver.get_screenshot_as_file('C:\\screenshot.jpg') im = Image.open('C:\\screenshot.jpg') # 用box裁剪出截圖中驗證碼的所在區域 box = [100, 100, 200, 200] # 設定要裁剪的區域 region = im.crop(box) # 此時,region是一個新的影象物件 region.save('C:\\codeImage.jpg') time.sleep(3) # 防止由於網速,可能圖片還沒儲存好,就開始識別 im = Image.open('C:\\codeImage.jpg') imgry = im.convert('L') # 影象加強,二值化 sharpness = ImageEnhance.Contrast(imgry) # 對比度增強 sharp_img = sharpness.enhance(2.0) # 將處理後的驗證碼圖片存在code.jpg中 sharp_img.save('C:\\code.jpg') # sharp_img.show() #這是分佈測試時候用的,整個程式使用需要註釋掉 # 呼叫pytesser3方法,變數code即為識別出的圖片數字str型別 code = pytesser3.image_file_to_string('C:\\code.jpg', graceful_errors=True) print('code:' + code) # 在頁面的驗證碼輸入框中輸入識別出的code code_input = driver.find_element_by_id('keyword2') code_input.send_keys(code) time.sleep(2) # 然後進行搜尋和後續操作 driver.find_element_by_class_name('search').click() time.sleep(2) # 如果驗證碼沒有識別正確,可能會彈出提示框,這裡我們需要對提示框進行處理 # 在頁面中尋找提示框 res = EC.alert_is_present()(driver) # 如果彈出提示框 if res: # 點選提示框的確認,從新搜尋一遍 res.accept() time.sleep(5) else: # 說明已經識別成功並搜尋成功,跳出迴圈進行下一步操作 accept = True except UnicodeDecodeError: accept = False time.sleep(3)