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()
原文地址:https://www.cnblogs.com/chenshengkai/p/11676352.html