yzmsb_test.py
识别诺诺金服页面的验证码,并自动登录到后台。
1 #导包 2 from selenium import webdriver 3 from PIL import Image, ImageDraw 4 from time import sleep 5 import pytesseract 6 #定义浏览器句柄,赋值url为诺诺金服后台地址 7 driver = webdriver.Chrome() 8 driver.implicitly_wait(10) #隐式等待10s 9 url = 'https://gl.axnjf.com/Contents/global/login/login.jsp' 10 #窗口最大化 11 driver.maximize_window() 12 driver.get(url) 13 # 诺诺金服后台页面截取验证码,代码如下: 14 driver.save_screenshot('E:/test_nuonuojinfu/step_01.png') 15 #定位验证码 16 imgelement = driver.find_element_by_xpath('//*[@id="img_validator"]') 17 #获取验证码x,y轴坐标 18 location = imgelement.location 19 #获取验证码的长宽 20 size = imgelement.size 21 #写成我们需要截取的位置坐标 22 rangle = (int(location['x']), int(location['y']), int(location['x']+size['width']), int(location['y']+size['height'])) 23 i = Image.open('E:/test_nuonuojinfu/step_01.png') 24 #二次截图 25 frame4 = i.crop(rangle) 26 #二次截图后命名 27 frame4.save('E:/test_nuonuojinfu/step_02.png') 28 print('二次截图成功!') 29 30 #对截取后的验证码二值化,代码如下: 31 # 二值数组 32 t2val = {} 33 def twoValue(image, G): 34 for y in range(0, image.size[1]): 35 for x in range(0, image.size[0]): 36 g = image.getpixel((x, y)) 37 if g > G: 38 t2val[(x, y)] = 1 39 else: 40 t2val[(x, y)] = 0 41 42 def saveImage(filename, size): 43 image = Image.new("1", size) 44 draw = ImageDraw.Draw(image) 45 for x in range(0, size[0]): 46 for y in range(0, size[1]): 47 draw.point((x, y), t2val[(x, y)]) 48 image.save(filename) 49 50 path = 'E:/test_nuonuojinfu/step_02.png' 51 image = Image.open(path) 52 image = image.convert('L') 53 twoValue(image, 125) 54 path1 = 'E:/test_nuonuojinfu/step_03.jpg' 55 saveImage(path1, image.size) 56 print("返回信息:验证码到手,增强成功,春哥附体,定能识别!") 57 #将处理后的验证码用Tesseract识别,代码如下: 58 #添加pytesseract参数变量 59 pytesseract.pytesseract.tesseract_cmd= "C:\Program Files (x86)\Tesseract-OCR/tesseract.exe" 60 tessdata_dir_config = '--tessdata-dir "C:\Program Files (x86)\Tesseract-OCR/tessdata" ' 61 #打开需要识别的验证码图片 62 image1 = Image.open("E:/test_nuonuojinfu/step_03.jpg") 63 #识别验证码,赋值变量为code 64 print('开始识别二维码,请等待...') 65 code = pytesseract.image_to_string(image1) 66 #打印识别后的验证码 67 print('验证码:' + str(code)) 68 #拿到验证码后,进行登录操作,代码如下: 69 driver.find_element_by_xpath('//*[@id="username"]').send_keys("nbiaabc") #输入账号 70 driver.find_element_by_xpath('//*[@id="password"]').send_keys("fBmhicc") #输入密码 71 #输入拿到的验证码 72 driver.find_element_by_xpath('//*[@id="validator"]').send_keys(code) #输入验证码 73 # 点击登录按钮 74 driver.find_element_by_xpath('//*[@id="button"]').click() 75 sleep(1) 76 driver.quit()