python 自动化测试(1):获取验证码图片,实现自动登录

时间:2022-07-24
本文章向大家介绍python 自动化测试(1):获取验证码图片,实现自动登录,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

1、版本:

firefox:59.0.2 selenium:3.11.0

Geckodriver :0.18.0 pytesseract:0.2.0

tesseract-ocr:4.0.0

2、代码:

import time
import pytesseract
from PIL import Image, ImageEnhance
from selenium import webdriver
from selenium.webdriver.common.by import By

url = "http://172.20.10.2/ecshop/admin"
# 1、打开浏览器,最大化浏览器
driver = webdriver.Firefox()
driver.get(url)
driver.implicitly_wait(10)
driver.maximize_window()

# 用户名元素
userElement = driver.find_element(By.XPATH, "/html/body/form/table/tbody/tr/td[2]/table/tbody/tr[1]/td[2]/input")
# 密码元素
passElement = driver.find_element(By.XPATH, "/html/body/form/table/tbody/tr/td[2]/table/tbody/tr[2]/td[2]/input")
# 验证码输入框元素
codeElement = driver.find_element(By.XPATH, "/html/body/form/table/tbody/tr/td[2]/table/tbody/tr[3]/td[2]/input")
# 验证图片元素
imgElement = driver.find_element(By.XPATH, "/html/body/form/table/tbody/tr/td[2]/table/tbody/tr[4]/td/img")

# 2、截取屏幕内容,保存到本地
driver.save_screenshot("G://test/01.png")

# 3、打开截图,获取验证码位置,截取保存验证码
ran = Image.open("G://test/01.png")
box = (1120, 280, 1180, 310)  # 获取验证码位置,自动定位不是很明白,就使用了手动定位,代表(左,上,右,下)
ran.crop(box).save("G://test/02.png")

# 4、获取验证码图片,读取验证码
imageCode = Image.open("G://test/02.png") # 图像增强,二值化
# imageCode.load()
sharp_img = ImageEnhance.Contrast(imageCode).enhance(2.0)
sharp_img.save("G://test/03.png")
sharp_img.load()  # 对比度增强
time.sleep(2)
print(sharp_img)
code = pytesseract.image_to_string(sharp_img).strip()
# 5、收到验证码,进行输入验证
print(code)

userElement.send_keys('admin')
passElement.send_keys('admin123')

# time.sleep(3)
codeElement.send_keys(code)
click_login = driver.find_element(By.XPATH, "/html/body/form/table/tbody/tr/td[2]/table/tbody/tr[6]/td[2]/input")
click_login.click()

PS:关于上面的手动定位方法,其实也很简单,我们拿到截取屏幕的图片后,用画图工具打开,用光标分别找到验证码的左、上、右、下的4个点,然后把坐标写到上面代码中就可以了。

3、中途出现的错误:

4、解决:

这个错误就是出现在image_to_string(imageCode)这个方法,没有加载到文件。具体原因,emmm,比较菜,没懂。

我的解决办法,首先是下载tesseract-ocr这个文件,下载链接:https://github.com/UB-Mannheim/tesseract/wiki

如图,所示:

下载好exe文件,安装在特定的文件夹下。

然后,打开pytesseract.py文件,找到tesseract_cmd,将原来的注释掉,然后添加新的:tesseract_cmd="路径/tesseract.exe"。

再执行代码,成功。

还存在问题:

识别的能力不是很强,验证码会识别成错误的字符,还在改进中。。。。

PS:image_to_string这个方法的打开简单的方式:使用pycharm直接按住CTRL+鼠标左键就可进入。CTRL+f,就可以弹出搜索框。

PS:博客写的很菜,请大家多给点建议。