自动生成批量验证码用于RPA组件测试的方法

发布时间:2024年01月15日

许多人工智能和RPA公司致力于开发能够识别验证码的组件,以便在自动化操作中处理通过网页和App弹出的验证码验证,从而完成后续的自动化流程。作为从事人工智能行业的专业人士,在测试过程中通常需要搜集大量验证码素材,以评估验证码组件的功能和通过率。

这一过程需要获取大量验证码图片,而在网络上搜集到的素材往往并不充足。作者花费了半小时的时间仅找到了约7张验证码图片,因此决定放弃这种方式,转而使用Python代码进行批量生成。

通过实在设计器中的"AIGC"目录下的"AI生成文本"组件,输入提示语

生成50张数字验证码, 验证码的值显示在文件名里面, 要有一些干扰元素 

数字是4位的  

保存到 C:\Users\EDY\Downloads\generated_codes

验证码占满图片 

数字加大  加粗  加颜色  

????实在设计器“AI生成文本”组件如下:(剩余次数50000多次,对于普通使用已经不少了,如果不够可以再购买次数)

代码很快就生成了

from PIL import Image, ImageDraw, ImageFont
import os
import random

# 生成验证码的数量
num_codes = 50

# 验证码位数
code_length = 4

# 保存路径
save_path = r'C:\Users\EDY\Downloads\generated_codes'

# 创建保存路径
if not os.path.exists(save_path):
    os.makedirs(save_path)

# 随机生成数字验证码
def generate_code(length):
    return ''.join(random.choices('0123456789', k=length))

# 创建验证码图片
def create_code_image(code):
    image_size = (150, 60)  # 图片大小增加
    background_color = (255, 255, 255)  # 背景颜色

    image = Image.new('RGB', image_size, background_color)
    draw = ImageDraw.Draw(image)

    # 使用TrueType字体文件,设置字体大小、颜色和粗细
    font_size = 40
    font = ImageFont.truetype("arial.ttf", font_size)
    font_color = (random.randint(0, 255), random.randint(0, 255), random.randint(0, 255))
    font_bold = "arialbd.ttf"  # 替换成你喜欢的粗体字体文件路径

    # 计算文字位置居中
    text_bbox = draw.textbbox((0, 0), code, font=font)
    x = (image_size[0] - text_bbox[2]) // 2
    y = (image_size[1] - text_bbox[3]) // 2

    # 添加文字到图片
    draw.text((x, y), code, font=font, fill=font_color)

    return image

# 生成并保存验证码图片
for i in range(num_codes):
    code = generate_code(code_length)
    image = create_code_image(code)

    # 添加一些干扰元素,可以根据需求修改
    # 例如,添加随机直线(减少了添加直线的次数)
    for _ in range(2):
        draw = ImageDraw.Draw(image)
        x1, y1 = random.randint(0, 150), random.randint(0, 60)
        x2, y2 = random.randint(0, 150), random.randint(0, 60)
        draw.line([(x1, y1), (x2, y2)], fill=(0, 0, 0), width=1)

    # 保存图片
    file_name = f"{code}.png"
    file_path = os.path.join(save_path, file_name)
    image.save(file_path)

print(f"{num_codes} 个验证码已生成并保存到 {save_path}")
from PIL import Image, ImageDraw, ImageFont
import os
import random

# 生成验证码的数量
num_codes = 50

# 验证码位数
code_length = 4

# 保存路径
save_path = r'C:\Users\EDY\Downloads\generated_codes'

# 创建保存路径
if not os.path.exists(save_path):
    os.makedirs(save_path)

# 随机生成数字验证码
def generate_code(length):
    return ''.join(random.choices('0123456789', k=length))

# 创建验证码图片
def create_code_image(code):
    image_size = (150, 60)  # 图片大小增加
    background_color = (255, 255, 255)  # 背景颜色

    image = Image.new('RGB', image_size, background_color)
    draw = ImageDraw.Draw(image)

    # 使用TrueType字体文件,设置字体大小、颜色和粗细
    font_size = 40
    font = ImageFont.truetype("arial.ttf", font_size)
    font_color = (random.randint(0, 255), random.randint(0, 255), random.randint(0, 255))
    font_bold = "arialbd.ttf"  # 替换成你喜欢的粗体字体文件路径

    # 计算文字位置居中
    text_bbox = draw.textbbox((0, 0), code, font=font)
    x = (image_size[0] - text_bbox[2]) // 2
    y = (image_size[1] - text_bbox[3]) // 2

    # 添加文字到图片
    draw.text((x, y), code, font=font, fill=font_color)

    return image

# 生成并保存验证码图片
for i in range(num_codes):
    code = generate_code(code_length)
    image = create_code_image(code)

    # 添加一些干扰元素,可以根据需求修改
    # 例如,添加随机直线(减少了添加直线的次数)
    for _ in range(2):
        draw = ImageDraw.Draw(image)
        x1, y1 = random.randint(0, 150), random.randint(0, 60)
        x2, y2 = random.randint(0, 150), random.randint(0, 60)
        draw.line([(x1, y1), (x2, y2)], fill=(0, 0, 0), width=1)

    # 保存图片
    file_name = f"{code}.png"
    file_path = os.path.join(save_path, file_name)
    image.save(file_path)

print(f"{num_codes} 个验证码已生成并保存到 {save_path}")

查看输出结果,测试用的验证码已生成成功

附件下载:

接着生成批量测试组件的代码,通过查看源代码获取验证码组件源代码:

源代码(等会用到):

改造脚本:

import os

# 文件夹路径
folder_path = r'C:\path\to\your\image\folder'
save_path = r'C:\Users\EDY\Downloads\generated_codes'

# 确保保存路径存在
if not os.path.exists(save_path):
    os.makedirs(save_path)

# 遍历文件夹
for filename in os.listdir(folder_path):
    # 构建完整的文件路径
    pic_path = os.path.join(folder_path, filename)
    
    # 检查是否为图片文件
    if os.path.isfile(pic_path) and pic_path.lower().endswith(('.png', '.jpg', '.jpeg')):
        # 使用OCR进行识别
        captcha = OCR.SourceCommonEnglishNumbersCodeV1(SZEnv['rpa'], "纯数字", 1, "", pic_path, None, 2, var_ret=0, skip_err=0, delay_before_new=0, delay_after_new=0, timeout_new=30)
        
        # 打印图片文件路径和识别结果
        print(f"图片文件路径: {pic_path} 识别结果: {captcha}")

?运行脚本:

样本与测试结果

测试结论

文件名:?0014.png,?验证码:?0014

通过

文件名:?0160.png,?验证码:?0160

通过

文件名:?0232.png,?验证码:?0232

通过

文件名:?0300.png,?验证码:?0300

通过

文件名:?0476.png,?验证码:?0476

通过

文件名:?0495.png,?验证码:?0495

通过

文件名:?3353.png,?验证码:?3353

通过

文件名:?3397.png,?验证码:?3397

通过

文件名:?3501.png,?验证码:?3501

通过

文件名:?3563.png,?验证码:?3563

通过

文件名:?3571.png,?验证码:?3571

通过

文件名:?3630.png,?验证码:?3630

通过

文件名:?3858.png,?验证码:?3858

通过

文件名:?3881.png,?验证码:?3881

通过

文件名:?3894.png,?验证码:?3894

通过

文件名:?3963.png,?验证码:?3963

通过

文件名:?4308.png,?验证码:?4308

通过

文件名:?4342.png,?验证码:?4342

通过

文件名:?4432.png,?验证码:?4432

通过

实际测试了500多条,测试完成。?

这个例子展示了如何用实在设计器调用"AIGC生成文本"组件批量生成验证码,再用这些验证码,批量测试实在设计器组件。相比于手动测试,效率提高了几百倍。

总结:

  1. 对于像验证码这样的测试素材,寻找起来相当费时,而且数量有限。因此,采用使用Python代码生成的方式更为便捷。

  2. 通过实在设计器调用"AIGC生成文本"组件,能够轻松生成所需的代码。

  3. 使用脚本进行测试相较于手动测试,效率提高了数百倍。由于代码生成的门槛降低,一般用户也能够轻松使用代码进行测试。

  4. 实在设计器提供的剩余次数已超过50000次,对于一般使用而言已经十分充裕,若仍不够,可考虑购买额外次数。

  5. 对于其他需要进行批量测试的场景,本文的思路同样值得借鉴。

最后,实在RPA设计器下载链接如下,想要尝试的小伙伴可以免费下载社区版试用:

下载实在RPA设计器

文章来源:https://blog.csdn.net/SHIZAIZHINENG/article/details/135593896
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。