方法1
使用python模块处理,pytesseract和PIL模块解决不太复杂的验证码的问题。
tesseract 随便选择一个并在代码中指定
import pytesseract
pytesseract.pytesseract.tesseract_cmd = "D:\Software\Tesseract-OCR/tesseract.exe"
# # 使用pytesseract对英文进行识别,lang参数可省略
# code = pytesseract.image_to_string(Image.open(r'shijian.png'),lang="eng")
# print(code)
# # 使用pytesseract对中文(含英文,但识别率降低)进行识别
# code = pytesseract.image_to_string(Image.open(r'shuzi.jpg'),lang='chi_sim')
# print(code)
def test2(imgaddress="F:\python\protect\自动化测试\my_selemium_project\img_1.png"):
image1 = Image.open(imgaddress)
text = pytesseract.image_to_string(image1, lang="eng")
print(text)
方法2
据AI图形识别的算法来实现的,直接通过使用第三方的API来实现,可使用的是名为:万维易源的API来解决验证码问题
网址是:https://www.showapi.com/
方法3
通过ddddocr实现验证码识别,这个效果不错,开源的,五行代码解决
def t2():
ocr = ddddocr.DdddOcr()
with open(r'F:\python\protect\自动化测试\my_selemium_project\2.jpg', 'rb') as f:
img_bytes = f.read()
res = ocr.classification(img_bytes)
print(res)
注意事项
- 如果遇到一直获取不到验证码区域,则可以考虑下面的方法
ce = driver.find_element_by_id(id)
# x,y 左顶点的坐标 w,h 高宽
left = ce.location["x"]
top = ce.location["y"]
right = ce.size["width"] + left
height = ce.size["height"] + top
dpr = driver.execute_script("return window.devicePixelRatio")
img = im.crop((left * dpr, top * dpr, right * dpr, height * dpr))