aardio 自动识别验证码输入

自动化表单填充与验证码识别

(应网友提议整理的实操记录)

缘起:网友提问催生的技术尝试

上周在发学习日志时有网友提议"在网页上识别验证码",于是尝试整合图像识别与网页自动化技术,完成了这套模拟登录流程。核心思路是:截图验证码→OCR识别→自动填充表单→提交并验证结果。

代码在这里

ini 复制代码
import soImage;
import web.view;
import string.html;
import string.ocrLite;
import string.ocrLite.defaultModels;

// 创建窗口并显示
var winform = win.form(text="找图代码生成器";right=800;bottom=600)
var wb = web.view(winform); 
winform.show();
//wb.fullscreen()

// 截图并保存处理
var img = soImage(); 
response = wb.go("http://127.0.0.1:5500/public/aaa.html")
thread.delay(1000)
img.captureWindow()
img.crop(1052,620,1140,675)
img.setJpegQuality(100)
img.save("./验证码.jpg")
var thumbnail = gdip.image("./验证码.jpg").getThumbnail(400,180);
thumbnail.save("./验证码1.jpg")

// 图像文字识别
var imgpath = "./验证码1.jpg"; 
var ocr = string.ocrLite();
var bit = gdip.bitmap(imgpath);
var text = ocr.detectBitmap(bit);  

// 自动填充表单并点击登录
for(i, value in table.eachIndex(text.blocks)){
    //输入用户名
    var username = wb.cdpWaitQuery("body > div > form > div.mb-4 > input")
    wb.cdp("DOM.focus",{nodeId = username.nodeId;})
    wb.cdp("Input.insertText",{text='admin'})
    //输入密码
    var password =wb.cdpWaitQuery("#password") ; 
    wb.cdp("DOM.focus",{nodeId = password.nodeId;})
    wb.cdp("Input.insertText",{text='123456'})
    //输入验证码
    var captcha = wb.cdpWaitQuery("#captchaInput");
    wb.cdp("DOM.focus",{nodeId = captcha.nodeId;}) 
    wb.cdp("Input.insertText",{text=value.text})
    //点击登录
    wb.waitEle("#loginForm > div.flex.items-center.justify-between > button","this.click()");
    thread.delay(1000)
    
    var successPage  = wb.cdpWaitQuery("#successPage"); 
    if(successPage){
        var html = wb.cdp('DOM.getOuterHTML',{nodeId = successPage.nodeId;})
        for(k,value in html){
            var save = string.save("./data.html",value)
            if(save){
                win.msgbox('保存html成功','提示')
                }    
            }        
    }else {
            win.msgbox('获取html失败')
        }    
    }
win.loopMessage();

因为个人技术问题,没有实现自动找验证码的位置的功能,只能设置验证码的位置截图进行图像识别,到时候需要自己更改位置,有大佬会的话可以改进一下☺

相关推荐
HyperAI超神经20 小时前
【Triton 教程】triton_language.load
人工智能·学习·大语言模型·cpu·gpu·编程语言·triton
法欧特斯卡雷特2 天前
如何解决 Kotlin/Native 在 Windows 下 main 函数的 args 乱码?
后端·操作系统·编程语言
HyperAI超神经2 天前
【TVM 教程】交叉编译与 RPC
网络·人工智能·网络协议·rpc·gpu·编程语言·tvm
RustCoder4 天前
Rust 1.92.0 发布:为 Never 类型铺路,强化调试与安全性
程序员·rust·编程语言
大熊猫侯佩5 天前
Swift 6.2 列传(第十二篇):杨不悔的“临终”不悔与 Isolated Deinit
swift·编程语言·apple
大熊猫侯佩5 天前
深夜的代码惊魂:一个你绝对不能再犯的 Swift 错误
swift·编程语言·apple
大熊猫侯佩6 天前
Swift 6.2 列传(第十一篇):梅若华的执念与“浪子回头”的异步函数
swift·编程语言·apple
HyperAI超神经7 天前
活动回顾丨 北大/清华/Zilliz/MoonBit共话开源,覆盖视频生成/视觉理解/向量数据库/AI原生编程语言
人工智能·ai·开源·编程语言·向量数据库·视频生成·视觉理解
图形学爱好者_Wu8 天前
每日一个C++知识点|原子操作
c++·编程语言
大腾鱼9 天前
Web3 学习:Solidity中的结构体、数组和映射
编程语言