本次采用的OCR(光学字符识别)工具为Tesseract OCR,在MAC电脑实现,目前为止,识别的效率不高,测试网站https://www.qb5.ch ,本想在实际项目中应用,但因效果太差只能拜托开发设置万能验证码😂。
requirements.txtpackaging==24.1 pillow==10.3.0 pytesseract==0.3.10
python"""
@File:parse_captcha.py
@time:2024/6/24 10:13
Author:Qi.Zhang
@Software:PyCharm
"""
import sys
from PIL import Image
import pytesseract
# 设置 Tesseract OCR 的路径
pytesseract.pytesseract.tesseract_cmd = '/usr/local/bin/tesseract'
def preprocess_image(image_path):
try:
# 尝试打开并加载图片
image = Image.open(image_path)
# print("Image opened successfully")
# 转换为灰度图像
image = image.convert('L')
# 应用自适应阈值二值化
image = image.point(lambda x: 0 if x < 140 else 255)
# 保存处理后的图像以供调试,保存在当前脚本目录下
output_path = "/Library/PyLearning/Range/OCR/processed_captcha.png"
image.save(output_path)
# print(f"Processed image saved as {output_path}")
return image
except IOError as e:
print(f"Error: Unable to open image file {image_path}")
print(f"IOError: {str(e)}")
return None
def recognize_captcha(image):
try:
# 使用 Tesseract 进行 OCR 识别,提取图片中的文本
captcha_text = pytesseract.image_to_string(image,
config='--psm 10 --oem 3 -c tessedit_char_whitelist=0123456789 -l '
'eng')
# print("OCR processed successfully")
return captcha_text.strip()
except pytesseract.TesseractError as e:
print(f"Error: Tesseract OCR processing failed: {str(e)}")
return None
def main():
# 检查命令行参数是否正确传入
if len(sys.argv) < 2:
print("Usage: python parse_captcha.py <image_path>")
sys.exit(1)
# 从命令行参数获取图片路径
image_path = sys.argv[1]
# print(f"Image path: {image_path}")
# 预处理图像
processed_image = preprocess_image(image_path)
if processed_image is None:
sys.exit(1)
# 识别验证码
captcha_text = recognize_captcha(processed_image)
if captcha_text:
print(captcha_text)
if __name__ == "__main__":
main()

3. 保存验证码图片:
Groovyimport org.apache.commons.io.FileUtils; // 导入 FileUtils 工具类,用于文件操作 import java.io.File; // 导入 File 类,用于表示文件对象 // 获取 HTTP 请求的响应数据(即验证码图片的字节数据) byte[] image = prev.getResponseData(); // 定义要保存验证码图片的文件路径 File file = new File("/Library/PyLearning/Range/OCR/captcha.png"); // 将字节数据写入到指定文件中 FileUtils.writeByteArrayToFile(file, image);
4. 调用外部 Python 脚本解析验证码:
在 Thread Group 下,添加一个 OS Process Sampler。
配置 OS Process Sampler 如下:
5. 保存解析到的验证码文本:
Groovy// 获取外部脚本执行后的输出结果(即解析到的验证码文本) String captchaText = prev.getResponseDataAsString().trim(); // 将解析到的验证码文本保存为 JMeter 变量,以便后续请求使用 vars.put("captchaText", captchaText);

本文作者:精卫
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!