许多人工智能和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生成文本"组件批量生成验证码,再用这些验证码,批量测试实在设计器组件。相比于手动测试,效率提高了几百倍。
总结:
对于像验证码这样的测试素材,寻找起来相当费时,而且数量有限。因此,采用使用Python代码生成的方式更为便捷。
通过实在设计器调用"AIGC生成文本"组件,能够轻松生成所需的代码。
使用脚本进行测试相较于手动测试,效率提高了数百倍。由于代码生成的门槛降低,一般用户也能够轻松使用代码进行测试。
实在设计器提供的剩余次数已超过50000次,对于一般使用而言已经十分充裕,若仍不够,可考虑购买额外次数。
对于其他需要进行批量测试的场景,本文的思路同样值得借鉴。
最后,实在RPA设计器下载链接如下,想要尝试的小伙伴可以免费下载社区版试用:
下载实在RPA设计器