许多人工智能和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 = 40font = 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]) // 2y = (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 = 40font = 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]) // 2y = (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设计器