验证码登录实战,http cookie,css-selector,runjs例子

验证码字库制作教程,传送门:

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

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章