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