验证码字库制作教程,传送门:
https://forum.uibot.com.cn/thread-254.htm
https://forum.uibot.com.cn/thread-350.htm
https://forum.uibot.com.cn/thread-409.htm
2019-4-23更新,取验证码原图终级解决方案:runjs下载浏览器原图。
1、解决浏览器截图,图片缩放导致字体变形,字库识别不准问题;
2、解决http cookie模式,浏览器获取不到cookie,下载的验证码图片验证失败问题;
3、注意跨域问题,验证码域名更网站域名必须一致。否则设置浏览器允许跨域。
源码如下,重点是js部分:
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