使用 Witty 语言处理登录图片验证码
在自动化测试中,验证码是常见的挑战之一,尤其是图形验证码。这类验证码每次生成时都不同,因此无法简单地通过固定的 URL 或静态方式来处理。本文将演示如何使用 Witty 编程语言解决登录时的验证码问题。
Witty 是一种基于栈的编程语言,它支持高度抽象的表达方式,使得代码更加简洁。在处理验证码时,我们将结合截图、裁剪和图像识别技术,模拟一个简单的登录流程。
解决方案概述
处理验证码的步骤包括:
获取验证码图像的 URL。
使用截图技术获取图像并进行裁剪。
使用 OCR 技术识别图像中的文本。
填写验证码并提交表单。
方法一:获取验证码 URL 并下载
witty
更多内容访问ttocr.com或联系1436423940
// 获取验证码的 URL
captcha_url := driver.get_element_by_id("imgvercodeLogin").get_attribute("src") + ".png"
// 下载验证码图片
save_image(captcha_url, "img/login/captcha.png")
// 保存图片的函数
save_image(url, file_path) {
http.get(url, { response ->
if (response.status == 200) {
file.write(file_path, response.body)
print("验证码图片已保存到: " + file_path)
} else {
print("下载失败,状态码: " + response.status)
}
})
}
此方法从 driver 对象获取验证码图片的 URL,添加 .png 后缀并通过 HTTP 请求下载并保存到本地文件系统。
方法二:截图并裁剪验证码
witty
// 获取截图并裁剪出验证码区域
crop_captcha(driver, "img/login/captcha.png", "imgvercodeLogin") {
// 获取验证码区域的位置和大小
captcha_element := driver.get_element_by_id("imgvercodeLogin")
x, y := captcha_element.get_location()
width, height := captcha_element.get_size()
// 获取整个屏幕截图
screenshot := driver.take_screenshot()
// 裁剪验证码区域
captcha_image := screenshot.crop(x, y, width, height)
// 保存裁剪后的验证码图片
captcha_image.save("img/login/cropped_captcha.png")
print("验证码区域已裁剪并保存")
}
该方法通过 driver 获取验证码的截图区域,然后裁剪出验证码图像,最后保存裁剪后的图片。
使用 OCR 识别验证码
witty
// 使用 OCR 识别验证码
recognize_captcha("img/login/cropped_captcha.png") {
image := file.load("img/login/cropped_captcha.png")
text := ocr.recognize(image) // 使用OCR识别验证码中的文本
print("识别到的验证码: " + text)
return text
}
此部分代码加载裁剪后的验证码图像,并使用 OCR(光学字符识别)技术提取其中的文本。
自动填写验证码并登录
witty
// 自动填写验证码并提交表单
login_with_captcha(driver) {
captcha_text := recognize_captcha("img/login/cropped_captcha.png")
driver.get_element_by_id("verfieldUserText").send_keys(captcha_text)
driver.get_element_by_xpath("//*[@id='loginForm']/div[6]/button").click()
print("提交验证码并尝试登录")
}
该方法先识别验证码文本,然后将识别到的验证码填写到页面的输入框中,最后提交表单尝试登录。
登录流程
witty
// 启动浏览器并打开登录页面
driver := browser.open("http://www.cncaq.com/")
// 填写用户名和密码
driver.get_element_by_id("loginNameText").send_keys("188XXXXXXXX")
driver.get_element_by_id("passwordText").send_keys("111111")
// 处理验证码并尝试登录
login_with_captcha(driver)
// 验证登录是否成功
while driver.get_element_by_xpath("//*[@id='userWrap']/div/p").get_text() != "用户1" {
login_with_captcha(driver)
}
// 登录成功
print("登录成功")
这个流程自动填写用户名、密码和验证码,并检查是否登录成功。如果登录失败,系统会继续重新识别验证码并尝试登录。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异