找回密码
 立即注册

微信登录

只需一步,快速开始

QQ登录

只需一步,快速开始

查看: 80|回复: 0

[心得] aardio 自动识别验证码输入

[复制链接]
  • TA的每日心情
    开心
    11 小时前
  • 签到天数: 74 天

    连续签到: 5 天

    [LV.6]常住居民II

    39

    主题

    79

    回帖

    1030

    积分

    钻石会员

    积分
    1030
    来自: 中国贵州贵阳
    发表于 2025-6-9 18:22:04 | 显示全部楼层 |阅读模式 来自: 中国贵州贵阳
    非业余 - aardio 编程语言 - 非官方问答社区
    风行者三期培训:Aardio+Python+Flutter,1000集课程让你成为全栈开发高手!https://mp.weixin.qq.com/s/_WOoHFtITUyLk2k7BXYGkg
    Aardio培训大揭秘,轻松上手打造个人项目!https://mp.weixin.qq.com/s/cr47qhp_Cpz0p57lbbPwug
    aardio风行者第二期培训班https://mp.weixin.qq.com/s/uB6XHUDnGSk0JlWuiBE9AA
    aardio风行者第三期培训班https://mp.weixin.qq.com/s/cdZcvFiAWhlYTaSrQGCPvA
    本帖最后由 XWCXF 于 2025-6-9 22:14 编辑

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

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

    代码在这里
    [AAuto] 纯文本查看 复制代码
    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();




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




    非业余 - aardio 编程语言 - 非官方问答社区
    风行者三期培训:Aardio+Python+Flutter,1000集课程让你成为全栈开发高手!https://mp.weixin.qq.com/s/_WOoHFtITUyLk2k7BXYGkg
    Aardio培训大揭秘,轻松上手打造个人项目!https://mp.weixin.qq.com/s/cr47qhp_Cpz0p57lbbPwug
    aardio风行者第二期培训班https://mp.weixin.qq.com/s/uB6XHUDnGSk0JlWuiBE9AA
    aardio风行者第三期培训班https://mp.weixin.qq.com/s/cdZcvFiAWhlYTaSrQGCPvA
    回复

    使用道具 举报

    *滑块验证:
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    Archiver|手机版|小黑屋|非业余 - aardio 编程语言 - 非官方问答社区 知道创宇云防御

    GMT+8, 2025-6-27 21:18 , Processed in 0.118206 second(s), 31 queries .

    Powered by Discuz! X3.5

    © 2001-2025 Discuz! Team.

    快速回复 返回顶部 返回列表