WebUI自动化测试中关于图片验证码的解决方法
关于怎么识别图片中的文字,传送门:https://www.cnblogs.com/teangtang/p/16157880.html
实现代码如下:
#! /usr/bin/env python # -*- coding:utf-8 -*- # author:特昂糖 import pytesseract from PIL import Image from selenium import webdriver import time as t driver=webdriver.Chrome() driver.get('*******************') driver.maximize_window() driver.implicitly_wait(30) t.sleep(2) driver.find_element_by_xpath('//*[@id="formLogin"]/div[3]/div[3]/img').screenshot('1.png') #截取验证码并保存到本地 ver=pytesseract.image_to_string(Image.open('1.png')) #识别截图中的字符串 with open('index.txt',"w") as f: #将识别出的字符串写入到文件中 f.write("".join(ver.split())) #因为识别到的文字有空格,所有我这里做了去除空格的处理 with open("index.txt","r") as f: #将写入的字符串读取出来并赋值给a a=f.read() driver.find_element_by_xpath('//*[@id="inputCode"]').send_keys(ver) #将读取到的字符串填写到验证码输入框 t.sleep(3) driver.quit()
那么问题来了,文字识别的准确率不是100%我们应该怎么去判断是否登录成功呢?
比如我在测试代码中做了一个if循环,判断URL是不是还是登录页面的地址,如果是,那就重新识别一下,代码如下:
#! /usr/bin/env python # -*- coding:utf-8 -*- # author:特昂糖 import pytesseract from PIL import Image from selenium import webdriver import time as t driver=webdriver.Chrome() driver.get('http://****************') driver.maximize_window() driver.implicitly_wait(30) t.sleep(2) driver.find_element_by_xpath('//*[@id="formLogin"]/div[3]/div[3]/img').screenshot('1.png') #截取验证码并保存到本地 ver=pytesseract.image_to_string(Image.open('1.png')) #识别截图中的字符串 with open('index.txt',"w") as f: #将识别出的字符串写入到文件中 f.write("".join(ver.split())) #因为识别到的文字有空格,所有我这里做了去除空格的处理 with open("index.txt","r") as f: #将写入的字符串读取出来并赋值给a a=f.read() driver.find_element_by_xpath('//*[@id="username"]').send_keys("******") #输入用户名 t.sleep(1) driver.find_element_by_xpath('//*[@id="password"]').send_keys("******") #输入密码 t.sleep(1) driver.find_element_by_xpath('//*[@id="inputCode"]').send_keys(ver) #输入验证码 t.sleep(1) driver.find_element_by_xpath('//*[@id="formLogin"]/div[5]/div/div/span/button') #点击登录 t.sleep(2) if driver.current_url=='http://**************.com': #如果URL为登录页面的URL driver.find_element_by_xpath('//*[@id="formLogin"]/div[3]/div[3]/img').screenshot('1.png') # 截取验证码并保存到本地 ver = pytesseract.image_to_string(Image.open('1.png')) # 识别截图中的字符串 with open('index.txt', "w") as f: # 将识别出的字符串写入到文件中 f.write("".join(ver.split())) # 因为识别到的文字有空格,所有我这里做了去除空格的处理 with open("index.txt", "r") as f: # 将写入的字符串读取出来并赋值给a a = f.read() driver.find_element_by_xpath('//*[@id="username"]').send_keys("******") # 重新输入用户名 t.sleep(1) driver.find_element_by_xpath('//*[@id="password"]').send_keys("********") # 重新输入密码 t.sleep(1) driver.find_element_by_xpath('//*[@id="inputCode"]').send_keys(ver) # 重新输入验证码 t.sleep(1) driver.find_element_by_xpath('//*[@id="formLogin"]/div[5]/div/div/span/button') # 点击登录 t.sleep(2) else: pass driver.quit()

浙公网安备 33010602011771号