首页 > 其他分享 >使用 Wren 语言处理登录图片验证码的自动化方法

使用 Wren 语言处理登录图片验证码的自动化方法

时间:2024-11-14 10:57:03浏览次数:1  
标签:截图 登录 Wren driver 验证码 var import

在自动化测试中,处理验证码图像通常是一个挑战,尤其是在登录过程中。验证码是每次都会发生变化的图片,自动化工具需要能够读取这些图像并通过图像识别技术来解码图像内容。本文将介绍如何使用 Wren 语言来处理登录中的图片验证码。

Wren 是一种轻量级、高效的编程语言,适合嵌入式系统和自动化脚本。虽然它不像 Python 那样拥有成熟的自动化测试库,但它提供了足够的功能来实现基本的截图、图像处理和文本识别。

解决方案概述
我们将实现以下步骤:

获取验证码的图片 URL,然后下载图片。
截取验证码区域,保存并进行图像处理。
使用图像识别 技术提取验证码中的文本。
方法一:获取验证码图片 URL 并下载
wren
更多内容访问ttocr.com或联系1436423940
import "http" for HttpClient
import "os" for File

// 获取验证码图片的 URL
fun getCaptchaUrl(driver) {
var captchaUrl = driver.findElementById("imgvercodeLogin").getAttribute("src")
return captchaUrl + ".png"
}

// 下载验证码图片
fun saveImage(url, filePath) {
var client = HttpClient.new()
client.get(url) {
|response|
if response.status == 200 {
var file = File.new(filePath)
file.write(response.body)
System.print("验证码图片保存成功: " + filePath)
} else {
System.print("图片下载失败,状态码: " + response.status.toString())
}
}
}
这个方法通过访问网页上的验证码元素来获取图片的 URL,然后使用 HttpClient 下载并保存验证码图片。

方法二:截图并裁剪验证码区域
wren

import "image" for Image
import "os" for File
import "random" for Random

// 截图并裁剪验证码区域
fun cropCaptchaImage(driver, savePath, captchaId) {
var fileName = Random.nextInt(100000, 999999).toString() + ".png"
var filePath = savePath + "/" + fileName

driver.takeScreenshot(filePath)  // 获取截图
var captchaElem = driver.findElementById(captchaId)
var captchaX = captchaElem.location().x
var captchaY = captchaElem.location().y
var captchaWidth = captchaElem.size().width
var captchaHeight = captchaElem.size().height

// 裁剪验证码区域
var img = Image.load(filePath)
var captchaImage = img.crop(captchaX, captchaY, captchaX + captchaWidth, captchaY + captchaHeight)
var croppedImagePath = savePath + "/" + fileName + "_captcha.png"
captchaImage.save(croppedImagePath)

return croppedImagePath

}
这里,我们通过调用 driver.takeScreenshot 方法获取整个页面的截图,然后通过指定验证码元素的位置裁剪出验证码图像。

获取并识别验证码
wren

import "image" for Image
import "ocr" for OCR // 假设存在一个 OCR 库

// 识别验证码中的文本
fun recognizeCaptchaText(imagePath) {
var img = Image.load(imagePath)
var text = OCR.recognizeText(img) // 假设OCR模块用于提取文本
System.print("识别到的验证码: " + text)
return text
}
在这部分代码中,我们使用一个假设的 ocr 模块来识别图像中的文本。它会将验证码图像转化为可识别的文本。

自动填写验证码
wren

import "time" for Time

// 自动截图、裁剪、识别并填写验证码
fun solveCaptchaAndLogin(driver, savePath, captchaId, inputId) {
var captchaImagePath = cropCaptchaImage(driver, savePath, captchaId) // 获取裁剪后的验证码
var captchaText = recognizeCaptchaText(captchaImagePath) // 识别验证码

var captchaInput = driver.findElementById(inputId)
captchaInput.sendKeys(captchaText)  // 输入识别到的验证码
Time.sleep(2)  // 等待验证码输入完成

}
这个函数整合了前面的方法,完成了从截图、裁剪到识别验证码并填写的全过程。

登录流程
wren

// 启动浏览器并打开登录页面
var driver = WebDriver.new("chrome")
driver.get("http://www.cncaq.com/")

// 填写用户名和密码
var loginNameField = driver.findElementById("loginNameText")
loginNameField.sendKeys("188XXXXXXXX")
var passwordField = driver.findElementById("passwordText")
passwordField.sendKeys("111111")
Time.sleep(2)

// 处理验证码并进行登录
solveCaptchaAndLogin(driver, "img/login/", "imgvercodeLogin", "verfieldUserText")
driver.findElementByXpath("//*[@id='loginForm']/div[6]/button").click() // 点击登录按钮

// 检查是否登录成功
var userName = driver.findElementByXpath("//*[@id='userWrap']/div/p").getText()
var expectedUserName = "用户1"

while userName != expectedUserName {
solveCaptchaAndLogin(driver, "img/login/", "imgvercodeLogin", "verfieldUserText")
driver.findElementByXpath("//[@id='loginForm']/div[6]/button").click() // 点击登录按钮
userName = driver.findElementByXpath("//
[@id='userWrap']/div/p").getText()
}

System.print("登录成功")

标签:截图,登录,Wren,driver,验证码,var,import
From: https://www.cnblogs.com/ocr12/p/18545567

相关文章

  • vue2的uniapp添加用户登录校验
    在uni-app中实现全局路由守卫的确切方法可能会根据框架的版本和具体的实现方式有所不同。在Vue2和uni-app的结合使用中,全局路由守卫并不是原生支持的功能,因此我们需要采用一些替代方案。对于Vue2和uni-app,你可以通过封装uni-app的页面跳转方法来实现类似全局......
  • 使用 Nim 语言处理登录图片验证码的自动化方法
    在自动化测试中,处理验证码通常是一个难题,尤其是在登录流程中。验证码图像每次刷新时都会发生变化,因此需要一种方式来自动化识别这些验证码。常见的处理方法有两种:获取验证码图片URL并下载:抓取验证码的URL地址来直接下载图片。然而,由于验证码每次都会刷新,直接访问URL获取的......
  • 使用 Turing 破解滑块验证码
    滑块验证码是互联网中常见的一种防机器人机制,它要求用户通过拖动滑块来将其与背景图像对齐,从而验证用户的身份。本文将演示如何使用Turing编程语言模拟破解滑块验证码。滑块验证码原理滑块验证码通常由两部分组成:背景图像:展示了一个不完整的图像。滑块图像:包含了缺失的部......
  • App中第三方登录和分享模块的实现
    @目录1流程2设计与实现3优化本文目的:“实现一套易于使用、维护的第三方登录和分享模块”我们开发App有时为了吸引用户,会引入三方的授权登录降低用户的注册和登录操作,同时会根据业务需求引入三方的分享服务。目前可用的第三方授权登录和分享有很多,国内比较常用的有微信、QQ、......
  • 通过微信测试公众号实现扫码登录
    目录通过微信测试公众号实现扫码登录一:效果展示:二:功能实现1:流程分析:2:准备工作:1:申请微信测试公众号2:内网穿透3:代码实现:通过微信测试公众号实现扫码登录一:效果展示:我们在扫描完二维码之后会自动跳转到公众号中,然后可以看到:二:功能实现1:流程分析:具体的流程就是......
  • 通过爬虫方式获取小红书授权登录的cookie的代码
    1、代码里的normal_sign.js代码是某书签名算法xs,xt的实现-CSDN博客里的;2、CookieUtil工具代码见抖音最新bd-ticket-guard-client-data逆向方法(2024年11月)-CSDN博客里的CookieUtil.py;importjsonimporttimeimportzlibfromurllib.parseimporturlparseimportexecj......
  • 实战:Mailivery 模拟登录
    问题情景混淆群内的小伙伴遇到这么个问题,Mailivery这个网站登录后,明明提交的表单(邮箱和密码也正确)、请求头等等都没问题,为啥一直重定向到登录页面呢?唉,该出手时就出手啊,我也看看咋回事吧!url:https://app.mailivery.io/login登录参数分析显而易见,需要:邮箱(有邮箱校验)、密码......
  • 华为路由器/交换机配置Console口AAA认证以及Telnet登录
    一、Console口登录 Console口是路由器/交换机的本地管理接口,通常用于设备初始配置和管理。本文将介绍console登录的两种配置方式1、密码模式配置成这种模式后Console登录只需要输入密码。配置方法一[Huawei]user-interfaceconsole0 [Huawei-ui-console0]authentica......
  • 基于Angular的动画展示网站+登录注册(cognito)
    项目介绍本项目为本人angular练习练手项目,是基于Angular的Web应用,用于展示和搜索Bangumi上的动画,使用API来自BangumiAPI。本项目使用GitHubActions自动部署到GitHubPages。项目名称my-angular-project-test地址:https://dreaife.github.io/my-angular-project-......
  • Winform在主窗体加载前弹出登录窗体
    1:主窗体代码点击查看代码//实例化登录窗体FrmLoginfrmLogin=newFrmLogin();//读取登录窗体的返回结果DialogResultdialogResult=frmLogin.ShowDialog();//判断登录窗体的返回结果if(dialogResult!=DialogResult.OK){//返回结果不是OK就结束应用程序......