【视频教程】【验证码识别插件】附带验证码制作工具

瞌睡蟲子 8月前 11466

说明:

该插件为《完美验证码识别系统》的python封装,附件带验证码制作工具《完美验证码识别系统V3.2.1.rar》。


插件安装:

将附件《插件.rar》解压缩到UB的安装目录即可注意不是UB根目录下面

使用方法:

说明文档:

https://lcsan.tk/html/vcode.html


实例:

demo:

注意:先把附件《demo.rar》解压到d盘根目录,两个task的源码如下。

Import wmcode
// 附件demo解压到D盘根目录
// 识别库路径
Dim datPath="d:\\demo\\辽宁1-11111.dat"
// 识别库密码
Dim password="11111"
// 待识别验证码图片路径
dim imgPath="d:\\demo\\nl.bmp"
dim flag,vcode
// 加载识别库
flag = wmcode.LoadDat(datPath,password)
If flag
    // 识别图片
    vcode = wmcode.getCodeFormFile(imgPath)
    TracePrint(vcode)
else
    TracePrint("识别库加载失败")
end if

运行效果:

_【视频教程】【验证码识别插件】附带验证码制作工具


实例:

https://forum.uibot.com.cn/thread-449.htm

上传的附件:
最新回复 (61)
  • 8月前
    2
    感谢提供解决方案!
  • liuxk 8月前
    3
    感谢
  • 哒哒 8月前
    4
    1024
  • 绍兴何 8月前
    5
    插件中WmCode.dll检测有木马,这个安全吗?
  • 绍兴何 8月前
    6
    我没有恶意,看到杀毒软件跳出提示,就来问一下,别介意呀。
  • 瞌睡蟲子 8月前
    7
    应该是没过检测,没有挂马
  • 丰哥 8月前
    8
    大神,膜拜一下
  • yogai 8月前
    9
    生成识别库的时候报错,缺了sqlite3.dll文件。
  • 瞌睡蟲子 8月前
    10

    已更新附件,增加sqlite3.dll文件

  • 哒哒 8月前
    11
    顶楼上
  • 脚本大叔 8月前
    12
    虫子你好  我已经下载插件了  也解压至安装包了  我不懂得怎么使用  我是代码小白  能给个详细步骤吗?
  • 瞌睡蟲子 8月前
    13
    我发视频教程了,先制作字库,再用插件加载字库识别。
  • 陈陈陈 5月前
    14

    虫子大大,完美验证码系统有没有支持1920*1080分辨率的啊,我按照教程方法一步步完成的,但是最终的结果和验证码不一样,不知道是不是这个分辨率的问题导致的

    上传的附件:
  • 瞌睡蟲子 5月前
    15
    陈陈陈 虫子大大,完美验证码系统有没有支持1920*1080分辨率的啊,我按照教程方法一步步完成的,但是最终的结果和验证码不一样,不知道是不是这个分辨率的问题导致的
    你这工程不能导入,看看你原网站。和分辨率应该没关系
  • 哒哒 5月前
    16
    瞌睡蟲子 你这工程不能导入,看看你原网站。和分辨率应该没关系
    你咋没跟他说获取验证码图像的时候像素和尺寸的坑啊。。
  • 陈陈陈 5月前
    17
    我已找到原因,是因为不同的截图获取方式导致的,虽然都是同样的格式!不知道这个是不是 哒哒 你说的像素和尺寸问题
  • 哒哒 5月前
    18
    陈陈陈 我已找到原因,是因为不同的截图获取方式导致的,虽然都是同样的格式!不知道这个是不是 哒哒 你说的像素和尺寸问题

    你是不是用的元素截图?是的话肯定无法匹配。因为你下载的是网页中实际显示的图案样式,而用字库工具下载的验证码是原图,这两种会有细微的差别。就是这个细微差别导致做出的字典无法正确识别你实际截图的验证码。你需要按照虫子大佬的 https://forum.uibot.com.cn/thread-449.htm 这篇教程用JS手段完成原图的复制才行。
    感受大佬的照拂吧~~~

  • 陈陈陈 5月前
    19


    确实是你说的这个情况,之前没意识到这个,之前排查了大半天的问题还以为是做到识别库有问题~o(╥﹏╥)o~

  • 吴_32975 4月前
    20

    像这种软件的验证码怎么获取验证码下载地址?是不是只能自己截图下来做一个图库?

    上传的附件:
  • 瞌睡蟲子 4月前
    21
    吴_32975 像这种软件的验证码怎么获取验证码下载地址?是不是只能自己截图下来做一个图库?
    chrome,按12打开开发者工具,点击network,点击all,点击清除,再点击刷新一下验证码。这个时候抓到的地址就是验证码图片地址。
  • 标枪 3月前
    22
    uibot3744b7707f4da8.task,第42行:WMCODE.getCodeFormFile 的参数个数不匹配
    之前用的挺好的,好像是升级后出现了这个问题,请教大神怎么解决。
  • 吴_32975 3月前
    23

    是软件的不是浏览器   有办法吗

    上传的附件:
  • 胡伟_65030 3月前
    24
    哈喽,抓取数据的时候数字出现乱码怎么解决呢?
  • 瞌睡蟲子 3月前
    25
    标枪 uibot3744b7707f4da8.task,第42行:WMCODE.getCodeFormFile 的参数个数不匹配 之前用的挺好的,好像是升级后出现了这个问题,请教大神怎么解决。
    去掉了一个参数,不需要填验证码个数了。
  • 瞌睡蟲子 3月前
    26
    吴_32975 是软件的不是浏览器   有办法吗
    验证码截图保存,再识别。
  • 瞌睡蟲子 3月前
    27
    胡伟_65030 哈喽,抓取数据的时候数字出现乱码怎么解决呢?
    数据抓取?给个例子看下。
  • 梁帅哥 3月前
    28

    请教大神,我按贴子里的代码执行为何会出错,像视频教程转变一下才成功。这2个代码看起来应该是一样的,不理解为什么会出错。


    出错代码:

    Import wmcode

    // 附件demo解压到D盘根目录

    // 识别库路径

    Dim datPath="d:\\隧道系统验证码.dat"

    // 识别库密码

    Dim password="1234

    // 待识别验证码图片路径

    dim imgPath="d:\\码1.bmp"

    dim flag,vcode

    // 加载识别库

    flag = wmcode.LoadDat(datPath,password)

    If flag

        // 识别图片

        vcode = wmcode.getCodeFormFile(imgPath)

        TracePrint(vcode)

    else

        TracePrint("识别库加载失败")

    end if


    成功代码:

    Import wmcode

    // 附件demo解压到D盘根目录

    // 识别库路径

    // 加载识别库

    dim flag = wmcode.LoadDat("d:\\隧道系统验证码.dat","1234")

    If flag

        // 识别图片

        dim code = wmcode.getCodeFormFile("d:\\码1.bmp")

        TracePrint(code)

    else

        TracePrint("识别库加载失败")

    end if


    上传的附件:
  • 瞌睡蟲子 3月前
    29
    梁帅哥 请教大神,我按贴子里的代码执行为何会出错,像视频教程转变一下才成功。这2个代码看起来应该是一样的,不理解为什么会出错。出错代码:Import wmcode// 附件demo解压到D盘根目录// 识别库 ...
    密码少了一个引号
  • 良子 3月前
    30
    回复才能下载吗?
  • 瞌睡蟲子 3月前
    31
    良子 回复才能下载吗?
    下载无需回复呀
  • andy_76031 3月前
    32
    mark
  • 2月前
    33


    为什么我获取的值是个空值啊


  • 瞌睡蟲子 2月前
    34
    为什么我获取的值是个空值啊
    你用的截图方式,图片精度有误。用图片下载或者httpget方式。https://forum.uibot.com.cn/thread-449.htm
  • 梁帅哥 2月前
    35
    瞌睡蟲子 密码少了一个引号
    谢谢
  • 欧阳如果 1月前
    36



    重新整理一遍案例,方便参考学习!!!

  • Coony 1月前
    37
    请教!我在制作识别库的时候,准确率已经非常高了95%以上;但在uibot里调用识别的时候,准确率明显差了好多好多,不知道是不是我哪里搞错了;
    另一个问题就是图片是gif的,我只能直接改文件名为jpg才可以识别;
  • 瞌睡蟲子 1月前
    38
    Coony 请教!我在制作识别库的时候,准确率已经非常高了95%以上;但在uibot里调用识别的时候,准确率明显差了好多好多,不知道是不是我哪里搞错了; 另一个问题就是图片是gif的,我只能直接改文件名为jpg ...
    1、在UB里面是以什么方式识别的,截图还是原始图片,图片是否有压缩或变形;
    2、gif格式是可以直接识别的,直接改后缀为jpg,但实际上还是gif格式图片。
  • Coony 1月前
    39
    瞌睡蟲子 1、在UB里面是以什么方式识别的,截图还是原始图片,图片是否有压缩或变形; 2、gif格式是可以直接识别的,直接改后缀为jpg,但实际上还是gif格式图片。
    通过UB的下载文件,将文件下载到本地,后缀名改为jpg;
  • Coony 1月前
    40
    瞌睡蟲子 1、在UB里面是以什么方式识别的,截图还是原始图片,图片是否有压缩或变形; 2、gif格式是可以直接识别的,直接改后缀为jpg,但实际上还是gif格式图片。


  • 瞌睡蟲子 1月前
    41
    Coony
    图片网站看下,不知道是什么格式。另外你这里的jpg变量是什么
  • Coony 1月前
    42

    Jpg,就是imagePath,谢谢

    上传的附件:
    • 0.jpg (大小:1.55K,下载次数:0)
    • 1.jpg (大小:1.58K,下载次数:0)
    • 2.jpg (大小:1.54K,下载次数:0)
    • 3.jpg (大小:1.54K,下载次数:0)
    • 4.jpg (大小:1.56K,下载次数:0)
    • 5.jpg (大小:1.57K,下载次数:0)
    • 6.jpg (大小:1.55K,下载次数:0)
    • 7.jpg (大小:1.54K,下载次数:0)
    • 8.jpg (大小:1.53K,下载次数:0)
    • 9.jpg (大小:1.56K,下载次数:0)
    • 10.jpg (大小:1.54K,下载次数:0)
  • 瞌睡蟲子 1月前
    43
    Coony Jpg,就是imagePath,谢谢
    你就不能给下下载地址么,我要看下原始格式- -|
  • 阳先生 1月前
    44
    我怎么感觉视频还没录完啊
  • 瞌睡蟲子 1月前
    45
    阳先生 我怎么感觉视频还没录完啊
    视频有3部分:https://forum.uibot.com.cn/thread-449.htm
  • Coony 1月前
    46
    瞌睡蟲子 你就不能给下下载地址么,我要看下原始格式- -|
    不好意思哦,是内网地址。。。。
  • Lind 1月前
    47

    大神,vcode = wmcode.getCodeFormFile(imgPath) 这个可以识别计算表达式吗?如果不行的话应该用哪种?比如“0+4=”,谢谢大神

    上传的附件:
  • 瞌睡蟲子 1月前
    48
    Lind 大神,vcode = wmcode.getCodeFormFile(imgPath) 这个可以识别计算表达式吗?如果不行的话应该用哪种?比如“0+4=”,谢谢大神

    可以计算表达式的

  • 独家记忆 1月前
    49
    强大 赞个
  • 刘吕 1月前
    50
    大佬,现在设置全局变量是几个参数了呀,有木有哪儿可以看到说明呢?
  • 瞌睡蟲子 1月前
    51
    刘吕 大佬,现在设置全局变量是几个参数了呀,有木有哪儿可以看到说明呢?
    https://lcsan.tk/html/vcode.html
    附件也有说明文档
  • 佘松 23天前
    52

    运行帖子发的代码报错  插件也安装了

    uibot37d862e0b25bb8.task 第21行:第12个字符:应该出现以下内容 '{<EOF>, '\r', ':', '\n'}'

    [09:31:51]uibot37d862e0b25bb8.task 第26行:第19个字符:无法识别的语句 ''(' at '",imgType = "''

    [09:31:51]uibot37d862e0b25bb8.task 第26行:第32个字符:应该出现以下内容 '{')', ','}'

    [09:31:51]uibot37d862e0b25bb8.task 第26行:第52个字符:应该出现以下内容 '{<EOF>, '\r', ':', '\n'}'

    [09:31:51]uibot37d862e0b25bb8.task 第30行:第38个字符:应该出现以下内容 '{<EOF>, '\r', ':', '\n'}'

    [09:31:51]uibot37d862e0b25bb8.task 第36行:第30个字符:应该出现以下内容 '{<EOF>, '\r', ':', '\n'}'

    [09:31:51]uibot37d862e0b25bb8.task 第55行:第26个字符:应该出现以下内容 '{<EOF>, '\r', ':', '\n'}'

    [09:31:51]uibot37d862e0b25bb8.task 第55行:第35个字符:出现非预期的内容 'http'


  • 瞌睡蟲子 23天前
    53
    佘松 运行帖子发的代码报错&nbsp; 插件也安装了uibot37d862e0b25bb8.task 第21行:第12个字符:应该出现以下内容 &#39;{&lt;EOF&g ...
    代码贴出来,这种EOF一般是隐藏字符
  • 佘松 23天前
    54


    import App
    import WebBrowser
    import UiElement
    Import wmcode
    dim iPID = ""
    dim objJson = ""
    dim dictRet = ""
    dim sRet = ""
    // 附件demo解压到D盘根目录
    // 识别库路径
    Dim datPath="d:\\demo\\辽宁1-11111.dat"
    // 识别库密码
    Dim password="11111"
    // 识别库路径
    Dim datPath1="d:\\demo\\辽宁-12345606.dat"
    // 识别库密码
    Dim password1="12345606
    // 待识别验证码图片路径
    dim imgPath
    dim flag,vcode
    dim bRet = ""
    dim hWeb = ""
    dim fun = '''
    function(){
           // 参数设置
        var css = "#valimg",imgType = "image/png",postfix=".png";
        // 获取验证码图片的元素
        var img = document.querySelector(css);
        // 创建画布
        var canvas = document.createElement("canvas");
        // 验证码图片,原始宽度
        canvas.width = img.naturalWidth;
        // 验证码图片,原始高度
        canvas.height = img.naturalHeight;
        // 2D模式
        var ctx = canvas.getContext("2d");
        // 渲染图片
        ctx.drawImage(img, 0, 0, img.naturalWidth, img.naturalHeight);
        // 转为base64,用于给a做文件下载
        var dataURL = canvas.toDataURL(imgType);
           // 生成一个a元素
        var a = document.createElement('a');
        // 创建一个单击事件,模拟下载
        var event = new MouseEvent('click');
        // 设置图片名称
        a.download = new Date().getTime() + postfix
        // 将生成的URL设置为a.href属性
        a.href = dataURL;
        // 触发a的单击事件
        a.dispatchEvent(event);
        return a.download;
    }
    '''
    // 打开网站
    hWeb = WebBrowser.Create("chrome","http://train.lnsafety.com/mnzxlogin.asp",10000,{"bContinueOnError":false,"iDelayAfter":1000,"iDelayBefore":200,"sBrowserPath":"","bChromeUnsafe":false})
    #icon("@res:c1j8qhon-seh4-9nf2-rc8f-u4a97bfnf082.png")
    // 判断验证码是否存在
    bRet = UiElement.Exists({"wnd":[{"cls":"Chrome_WidgetWin_1","title":"*","app":"chrome"},{"cls":"Chrome_RenderWidgetHostHWND","title":"Chrome Legacy Window"}],"html":{"url":"http://train.lnsafety.com/mnzxlogin.asp","title":"模拟在线考试登录","tagName":"IMG","attrMap":{"tag":"IMG","id":"valimg"},"index":0}},{"bContinueOnError":false,"iDelayAfter":300,"iDelayBefore":200})
    // 如果验证码存在
    If bRet = True
    sRet = WebBrowser.RunJS(hWeb,fun,true,{"bContinueOnError":false,"iDelayAfter":1000,"iDelayBefore":200})
    TracePrint(sRet)
    imgPath = "C:\\Users\\Administrator\\Downloads\\" & sRet
    iPID = App.Start(imgPath, "0", "1")
    // 加载识别库
    flag = wmcode.LoadDat(datPath1,password1)
    If flag
    // 识别图片
    vcode = wmcode.getCodeFormFile(imgPath)
    TracePrint(vcode)
    #icon("@res:7rus4nui-cajr-0bu2-h6rk-itm4fi82kik3.png")
    // 设置验证码
    UiElement.SetValue({"wnd":[{"cls":"Chrome_WidgetWin_1","title":"*","app":"chrome"},{"cls":"Chrome_RenderWidgetHostHWND","title":"Chrome Legacy Window"}],"html":{"url":"http://train.lnsafety.com/mnzxlogin.asp","title":"模拟在线考试登录","tagName":"INPUT","attrMap":{"tag":"INPUT","id":"vold"},"index":0}},vcode,{"bContinueOnError":false,"iDelayAfter":300,"iDelayBefore":200})
    TracePrint(vcode)
    // 设置身份证
    #icon("@res:9pcilhhc-sis8-c6sk-c48t-3pfcneq18i5i.png")
    UiElement.SetValue({"wnd":[{"cls":"Chrome_WidgetWin_1","title":"*","app":"chrome"},{"cls":"Chrome_RenderWidgetHostHWND","title":"Chrome Legacy Window"}],"html":{"url":"http://train.lnsafety.com/mnzxlogin.asp","title":"模拟在线考试登录","tagName":"INPUT","attrMap":{"tag":"INPUT","id":"username"},"index":0}},"430724198612182817",{"bContinueOnError":false,"iDelayAfter":300,"iDelayBefore":200})
    // 设置选择框的值
    #icon("@res:aijmr1nd-guh0-ulnr-l8bo-kdnr6t21j8mp.png")
    UiElement.SetSelect({"wnd":[{"cls":"Chrome_WidgetWin_1","title":"*","app":"chrome"},{"cls":"Chrome_RenderWidgetHostHWND","title":"Chrome Legacy Window"}],"html":{"url":"http://train.lnsafety.com/mnzxlogin.asp","title":"模拟在线考试登录","tagName":"SELECT","attrMap":{"tag":"SELECT"},"index":0}},["主要负责人"],"text",{"bContinueOnError":false,"iDelayAfter":300,"iDelayBefore":200})
    // 以js方法点击按钮
    sRet = WebBrowser.RunJS(hWeb,"function(){\ndocument.querySelector(\"#aabb\").click();\nreturn 123\n}",true,{"bContinueOnError":false,"iDelayAfter":300,"iDelayBefore":200})
    // 以鼠标点击按钮
    #icon("@res:k2bbgaji-aoso-ecpg-p3s9-45ao6gl23uko.png")
    //Mouse.Action({"wnd":[{"cls":"Chrome_WidgetWin_1","title":"*","app":"chrome"},{"cls":"Chrome_RenderWidgetHostHWND","title":"Chrome Legacy Window"}],"html":{"url":"http://train.lnsafety.com/mnzxlogin.asp","title":"模拟在线考试登录","tagName":"IMG","attrMap":{"tag":"IMG","id":"aabb"},"index":0}},"left","click",10000,{"bContinueOnError":false,"iDelayAfter":300,"iDelayBefore":200,"bSetForeground":true,"sCursorPosition":"Center","iCursorOffsetX":0,"iCursorOffsetY":0,"sKeyModifiers":[],"sSimulate":"simulate"})
    else
    TracePrint("识别库加载失败")
    end if
    End If



  • 瞌睡蟲子 21天前
    55
    佘松 import Appimport WebBrowserimport UiElementImport wmcodedim iPID = &quot;&quot;dim objJson = ...


    密码少了个引号

  • 陈丽平 20天前
    56
    模块 wmcode 没有加载成功  是什么原因呢?
  • 瞌睡蟲子 19天前
    57
    陈丽平 模块 wmcode 没有加载成功 是什么原因呢?
    插件没有正确安装,看下安装步骤。
  • 林城一滴水 17天前
    58
    瞌睡蟲子 我发视频教程了,先制作字库,再用插件加载字库识别。
    你好,谢谢你的教程,非常好,请问下,这个可以离线识别么?在内网网页去完成这个,期待你的回复,谢谢
  • 瞌睡蟲子 17天前
    59
    林城一滴水 你好,谢谢你的教程,非常好,请问下,这个可以离线识别么?在内网网页去完成这个,期待你的回复,谢谢
    字库本身是本地的(离线),你是内网验证码,是可以的。
  • 飘落的信 15天前
    60
    请问这个网址的验证码的获取地址是什么 http://220.168.30.69:9797/,按F12后查看到地址是http://220.168.30.69:9797/dnaserver?serviceId=image&imageId=CF92E7B4B5A39787E75C553BA16AD250,放到验证码制作软件里,根本不能获取到不同的验证码
  • 瞌睡蟲子 13天前
    61
    飘落的信 请问这个网址的验证码的获取地址是什么 http://220.168.30.69:9797/,按F12后查看到地址是http://220.168.30.69:9797/dnaserver?service ...

    那是因为,一个imageId对应一张图片。你可以分析下消息,每点击一次图片,更换一个图片地址。这种你得用本地图片制作字库方式。

  • 林城一滴水 10天前
    62

    感谢你们做的工具,非常好用,但是我有一个比较难的验证码,他每个验证码之间有粘连,而且还带有旋转,而且还不是固定间距切割,导致切割有困难,无法完成,希望大佬能指导一下,感谢,希望你能百忙之中抽空回复下

    附件是几张示例图,您可以下载试下

    上传的附件:
返回
发新帖