1 ''' 2 Created on 2019年 3 用戶登錄 4 @author: Root 5 ''' 6 import time 7 import pytesseract 8 from PIL import Image, ImageEnhance 9 from selenium import webdriver 10 11 # 打開瀏覽器並窗口最大化 12 driver = webdriver.Chrome() 13 driver.get(url) 14 driver.maximize_window() 15 16 # 識別驗證碼 17 def codeRecognize(): 18 # 1.截取屏幕內容,保存到本地 19 driver.save_screenshot("F://09_0102_zjs//code//01.png") 20 21 # 2.打開截圖 22 ran = Image.open("F://09_0102_zjs//code//01.png") 23 # 3.獲取驗證碼位置,截取保存驗證碼 24 imgElement = driver.find_element_by_id("captchaImage") 25 #獲取驗證碼x,y軸坐標 26 location = imgElement.location 27 #獲取驗證碼的長寬 28 size=imgElement.size 29 # 定位驗證碼,自動定位或者手動定位 30 # 參數:左,上,右,下 31 codeRange=(int(location['x']),int(location['y']),int(location['x']+size['width']+1),int(location['y']+size['height'])) 32 33 # 截取驗證碼並保存 34 ran.crop(codeRange).save("F://09_0102_zjs//code//02.png") 35 36 # 4、獲取驗證碼圖片,讀取驗證碼 37 imageCode = Image.open("F://09_0102_zjs//code//02.png") # 圖像增強,二值化 38 # imageCode.load() 39 sharp_img = ImageEnhance.Contrast(imageCode).enhance(2.0) 40 sharp_img.save("F://09_0102_zjs//code//03.png") 41 sharp_img.load() # 對比度增強 42 time.sleep(3) 43 44 # 5、識別驗證碼 45 pytesseract.pytesseract.tesseract_cmd = "C://Program Files//Tesseract-OCR//tesseract.exe" 46 image = Image.open("F://09_0102_zjs//code//03.png") 47 result = pytesseract.image_to_string(image) 48 print(result) 49 50 return result 51 52 def userLogin(): 53 user = driver.find_element_by_id("username") 54 pwd = driver.find_element_by_id("password") 55 user.clear() 56 pwd.clear() 57 # 輸入用戶名和密碼 58 user.send_keys("xxx") 59 pwd.send_keys("xxx") 60 61 # 輸入驗證碼 62 result = codeRecognize() 63 driver.find_element_by_id("captcha").send_keys(result) 64 65 # 點擊登錄 66 time.sleep(1.5) 67 driver.find_element_by_id("login").click() 68 time.sleep(0.5) 69 # 檢查是否登錄 70 isLogin = driver.find_element_by_xpath("//span[text()='掃碼登錄']") 71 72 try: 73 time.sleep(0.5) 74 while isLogin.is_enabled(): 75 userLogin() 76 try: 77 exitEle = driver.find_element_by_id("headerHandle") 78 if exitEle.is_enabled(): 79 exit() 80 except: 81 print ("登錄頁面元素不存在") 82 else: 83 time.sleep(0.5) 84 # 刷新頁面 85 driver.refresh() 86 userLogin() 87 except: 88 print ("登錄頁面元素不存在") 89 else: 90 pass
1. 識別驗證碼,實現自動登錄