独角兽企业重金招聘Python工程师标准>>>
现在许多页面在登陆的时候都需要根据验证码图片输入验证码,你是否经常碰到类似的想法:我能否自动识别该验证码并自动填充到对应的验证码输入框呢?
在后续的描述中,我将一步一步的完成该想法,概要的步骤如下:
1、需要在本机安装开源的Tesseract-OCR,并下载对应的汉子字库,这里我不详述,网上有许多文章;
2、因为需要自动填充,我们这里实现的方式是使用VB做一个外壳,在这个壳里头放一个webbrowser,说白了这个webbrowser就是一个ie的对象,我们可以在这个IE对象里头浏览网页,当然我们也可以对这个ie对象进行各种操作;
3、在上述的webbrowser打开你需要访问的、带验证码的登陆页面;
4、通过以下方法,将登陆页面上的验证码图片,保存到你的本地硬盘:
'保存网页上图片(按图片链接查找)
Public Function SaveWebImgUrlLike(Web1 As WebBrowser, UrlLike As String, Optional SaveToFile As String, Optional url As String) As Boolean
On Error Resume Next
Dim x
Dim CtrlRange
For Each x In Web1.document.All
If x.tagName = "IMG" Then
If InStr(x.src, UrlLike) > 0 Then
url = x.src
Set CtrlRange = Web1.document.body.createControlRange()
CtrlRange.Add (x)
Clipboard.Clear
CtrlRange.execCommand ("Copy")
End If
End If
Next
On Error Resume Next
If SaveToFile <> "" Then
Kill SaveToFile
SavePicture Clipboard.GetData, SaveToFile
End If
SaveWebImgUrlLike = eRR.Number = 0
Exit Function
eRR:
End Function
'以下是调用上述方法,在这个页面上,这个验证码图片的id为frameValidationServlet
SaveWebImgUrlLike ESSWeb, "frameValidationServlet", App.Path + "/Tesseract-OCR/1.jpg", ""
4、调用Tesseract-OCR的方法将图片转成文本文件
ShellExe App.Path + "/Tesseract-OCR/tesseract.exe ", App.Path + "/Tesseract-OCR/1.jpg " + App.Path + "/Tesseract-OCR/1"
5、读取文本文件中的验证码内容:
'获取随机码
Dim randCode As String
Open App.Path + "/Tesseract-OCR/1.txt" For Input As #1
Do
Line Input #1, randCode
Loop Until EOF(1)
Close (1)
'去除回车
randCode = Replace(randCode, "" + Chr(13), "")
randCode = Replace(randCode, "" + Chr(10), "")
6、将文本文字填充到验证码的框里面:
ESSWeb.document.getElementById("txtVerifyCodes").Value = 识别的验证码
7、其它描述:Tesseract-OCR是个开源产品,如果是白底黑字的情况下,识别率还是非常高的,但如果验证码图片混淆的非常厉害,那效果可能不是太理想了。我的测试页面是联通的ess登陆界面,该图片虽然有混淆,但识别率仍可达到90%以上。该测试网址的网址为:/ ,识别的图片如:
如果觉得《WEB页面验证码自动识别并填充》对你有帮助,请点赞、收藏,并留下你的观点哦!