ddddocr识别正确率不高,这里提供两种代码方法解决这个问题

本文讨论了两种方法来使用Selenium自动化处理网页验证码:一种是持续循环直到正确识别,另一种设定最大尝试次数。第一种方法代码较多但保证最终成功,第二种方法简洁但不确保每次都成功,选择取决于开发者偏好。
摘要由CSDN通过智能技术生成

一个是使用循环,直至输入正确为止;一个是提供最大尝试次数,这个方法的代码少,不过仍不能保证最后成功,选哪个看个人爱好吧:

方法一:

```python
import time

ocr = ddddocr.DdddOcr()

while True:
    # 读取验证码图片
    with open("code.png", 'rb') as f:
        image = f.read()
    
    # 使用ddddocr识别验证码
    res = ocr.classification(image)

    # 清除已输入的验证码(如果存在)
    ipcode_element = web.find_element(By.XPATH, '//*[@id="ValidCode"]')
    ipcode_element.clear()

    # 输入新的验证码
    ipcode_element.send_keys(res)

    # 提交表单或点击登录按钮尝试登录
    login_button = web.find_element(By.XPATH, '//*[@id="your_login_button_id"]')
    login_button.click()

    # 判断是否出现验证码错误提示
    error_message = "验证码错误"  # 替换为实际错误提示文本
    captcha_error_message_element = web.find_element(By.XPATH, f'//*[text()="{error_message}"]')

    # 如果找到错误提示,则说明验证码识别错误,清除已输入的验证码,并等待一段时间后重试
    if captcha_error_message_element.is_displayed():
        print(f"{error_message},将在2秒后重新识别验证码...")
        ipcode_element.clear()
        time.sleep(2)
        continue
    else:
        # 如果没有找到错误提示,则认为登录成功,跳出循环
        print("登录成功")
        break
```

请注意替换上述代码中的`"your_login_button_id"`和错误提示文本`"验证码错误"`为实际网页中的对应内容。同时,XPath表达式`f'//*[text()="{error_message}"]'`用于查找包含特定文本的元素,可能需要根据实际HTML结构进行调整。

方法二:

 

python

from selenium import webdriver
from selenium.webdriver.common.by import By
import ddddocr
# 假设web是一个已经初始化的webdriver对象
# 截取验证码图片(注意:这里的方法可能需要根据实际情况调整)
element = web.find_element(By.XPATH, '//*[@id="verifyCanvas"]')
location = element.location
size = element.size
web.save_screenshot("screenshot.png") # 保存整个页面的截图
# 这里需要添加裁剪截图的代码(根据location和size信息)
# ...
# 假设裁剪后的验证码图片保存为"code.png"
ocr = ddddocr.DdddOcr()
attempts = 0
max_attempts = 5 # 设置最大尝试次数
while attempts < max_attempts:
try:
with open("code.png", 'rb') as f:
image = f.read()
res = ocr.classification(image) # 假设这是正确的OCR方法调用
print(f"Recognized code: {res}")
# 退出循环,因为验证码已经识别成功
break
except Exception as e:
print(f"Failed to recognize captcha: {e}")
attempts += 1
# 如果达到最大尝试次数还没有成功,给出提示
if attempts == max_attempts:
print("Failed to recognize captcha after multiple attempts.")

请注意,上面的代码仍然是不完整的,特别是在裁剪截图的部分。你可能需要使用像PIL这样的图像处理库来帮助你裁剪截图中的验证码部分。而且,ocr.classification(image)这个调用也可能需要调整,具体取决于ddddocr库的API。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值