python selenium 获取验证码图片,实现自动登录

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()
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:博客写的很菜,请大家多给点建议。

猜你喜欢

转载自blog.csdn.net/weixin_38374974/article/details/80152899