大橙子网站建设,新征程启航
为企业提供网站建设、域名注册、服务器等服务
那个验证码地址应该是固定的。可以通过判断src的值返回那个img。
站在用户的角度思考问题,与客户深入沟通,找到额敏网站设计与额敏网站推广的解决方案,凭借多年的经验,让设计与互联网技术结合,创造个性化、用户体验好的作品,建站类型包括:成都网站建设、成都做网站、企业官网、英文网站、手机端网站、网站推广、国际域名空间、雅安服务器托管、企业邮箱。业务覆盖额敏地区。
试试找到name为yzm的元素,它有获得下一个元素的方法。
NextSibling
获取文档树中与此元素位于同一级别的下一个元素。
获得yzm的父,那里有且只有一个img。
建一个YanzhenCard.aspx文件
保留%@ Page Language="VB" AutoEventWireup="false" CodeFile="YanzhenCard.aspx.vb" Inherits="YanzhenCard" %,其余删除
如下是代码:
Imports System.IO
Imports System.Drawing
Partial Class YanzhenCard
Inherits System.Web.UI.Page
Private Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
If Not IsPostBack Then
Dim VNum As String = GenerateRandom(4)
Session("VNum") = VNum
ValidateCode(VNum)
End If
End Sub
Private Sub ValidateCode(ByVal VNum As String)
Dim Gheight As Integer = CType((VNum.Length * 15), Integer)
Dim Img As Bitmap = New Bitmap(Gheight, 20) 'Bitmap是用于处理由像素数据定义的图像
Dim g As Graphics = Graphics.FromImage(Img) 'Graphics.FromImage 从指定的Image创建新的Graphics
g.DrawString(VNum, New Font("Arial", 12), New SolidBrush(Color.Red), 5, 0) 'g.DrawString()在指定位置并且用指定的Brush和Font对象绘制指定的文本字符串。
Dim ms As MemoryStream = New MemoryStream '创建其支持存储区为内存的流。
Img.Save(ms, System.Drawing.Imaging.ImageFormat.Png)
Response.ClearContent()
Response.ContentType = "image/PNG"
Response.BinaryWrite(ms.ToArray)
Response.Write(VNum)
g.Dispose()
Img.Dispose()
Response.End()
End Sub
Private Shared constant As Char() = {"A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z"}
Public Shared Function GenerateRandom(ByVal Length As Integer) As String
Dim newRandom As System.Text.StringBuilder = New System.Text.StringBuilder(26)
Dim rd As Random = New Random
Dim i As Integer = 0
While i Length
newRandom.Append(constant(rd.Next(26)))
System.Math.Min(System.Threading.Interlocked.Increment(i), i - 1)
End While
Return newRandom.ToString
End Function
End Class
调用方法:asp:ImageButton ID="Yanzhengma_Card" runat="server" ImageUrl="YanzhenCard.aspx" Height="20px" Width="75px" BorderColor="#6699cc" BorderStyle="Solid" BorderWidth="1px" /
一般登陆网站时候首先要打开一个网页对吧?
那首先要 GET 一个网址。GetResponse后,得到的流就是这个页面的源码。
源码里肯定会包含这个验证码的提问段(可能是个图片的网址,也可能是个 5+5=? 之类的字符串之类的),可以分析一下这段代码出现的位置,让程序自动寻找。找到这个图片的网址,把这个图片 GET 下来,然后,就是orc识别或你人工识别咯。。。
这个是可以使用api来做的。图像处理之类的函数。
另外,还有一种方法是将所有的字符和数字做成不同的小图片进行拼接而成的一个字符串序列;
小图片要自己去做;效果就可以任意展现了。
Dim CtrlRange As Object
On Error Resume Next
Do
Err.Clear()
CtrlRange = Ie.Document.Body.DomElement.createControlRange()
CtrlRange.Add(Ie.Document.DomDocument.GetElementById("verifypic"))
CtrlRange.execCommand("Copy") '获取验证码
If Clipboard.ContainsData(DataFormats.Bitmap) Then
PictureBox1.Image = Clipboard.GetData(DataFormats.Bitmap) '在Picture1控件上显示
End If
If Err.Number 0 Then WaitingMS(100) ‘延时
Loop While Err.Number 0
以前找的 vbnet里也可以用
实现过程,在需要调用的页面使用image控件调用验证码生成的页面,验证码生成的页面生成验证图片且将验证信息保存至Session中,调用页面中通过Session判断用户是否输入正确。道理是这样,以下看代码:
生成验证码页面:
gif.ASPx
%@importnamespace="System"%
%@importnamespace="System.io"%
%@importnamespace="System.Drawing"%
%@importnamespace="System.Drawing.Imaging"%
scriptlanguage="VB"runat="server"
SubPage_Load(ByValSenderAsObject,ByValeAsEventArgs)
'RndNum为生成随机码的函数,
DimVNumAsString=RndNum(4)'该值为生成验证码的位数
Session("VNum")=VNum'读取Session
ValidateCode(VNum) '根据Session生成图片
EndSub
'--------------------------------------------
'生成图象验证码函数
SubValidateCode(ByValVNum)
DimImgAsSystem.Drawing.Bitmap
DimgAsGraphics
DimmsAsMemoryStream
DimgheightAsInteger=Int(Len(VNum)*14)
'gheight为图片宽度,根据字符长度自动更改图片宽度
Img=NewBitmap(gheight,24)
g=Graphics.FromImage(Img)
g.DrawString(VNum,(NewFont("Arial",12)),(NewSolidBrush(Color.Red)),3,3)'在矩形内绘制字串(字串,字体,画笔颜色,左上x.左上y)
ms=NewMemoryStream()
Img.Save(ms,ImageFormat.Png)
Response.ClearContent()'需要输出图象信息要修改HTTP头
Response.ContentType="image/Png"
Response.BinaryWrite(ms.ToArray())
g.Dispose()
Img.Dispose()
Response.End()
EndSub
'--------------------------------------------
'函数名称:RndNum
'函数参数:VCodeNum--设定返回随机字符串的位数
'函数功能:产生数字和字符混合的随机字符串
FunctionRndNum(ByValVcodeNum)
DimVcharAsString="0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,W,X,Y,Z"'需要使用中文验证,可以修改这里和ValidateCode函数中的字体
DimVcArray()AsString=Split(Vchar,",")'将字符串生成数组
DimVNumAsString=""
DimiAsByte
Fori=1ToVcodeNum
Randomize()
VNum=VNumVcArray(Int(35*Rnd()))'数组一般从0开始读取,所以这里为35*Rnd
Next
ReturnVNum
EndFunction
/script
调用页面:
demo.ASPx
scriptlanguage="VB"Runat="Server"
SubPage_Load(Senderasobject,easeventargs)
dimVNumasstring=Session("VNum")
Session.Abandon()
ViewState("VNum")=VNum
EndSub
'下面的事件代码是用来测试验证码
SubbtnSubmit_click(senderasobject,easeventargs)
'判断输入的验证码与所给是否相同
IftxtValidateCode.Text=CStr(ViewState("VNum"))Then
ensonShow.text="fontcolor='red'提示:验证通过/font"
Else
ensonShow.text="所填写的验证码与所给的不符"
EndIf
EndSub
/script
html
body
formrunat="server"
divalign="center"
tablewidth="750"
tr
tdvalign="middle"验证码:/td
!--调用验证图片生成页---
tdvalign="top"asp:Imageid="Image1"runat="server"ImageUrl="gif.aspx"//td
/tr
tr
tdvalign="top"输入验证码:/td
tdvalign="top"asp:textboxID="txtValidateCode"runat="server"TextMode="SingleLine"/fontcolor="#FF0000"size="2"*区分大小写/font/td
/tr
tr
tdcolspan="2"valign="top"align="center"asp:buttonID="btnSubmit"runat="server"Text="验证"onclick="btnSubmit_click"/
asp:labelID="ensonShow"runat="server"/
/td
/tr
/table
/div
/form
/body
/html