netsky_lt 发表于 2006-9-30 10:40:13

得出验证码的方法

本人写了一个得出四位(数字0-9)验证码的方法;在这里抛砖引玉,望各位能把脚本完善;
大家也可以下载附件运行;

With Browser("Exchange Management System").Page("Exchange Management System")

Dim a,b,c,d,num
‘qX是每一个位图检查点,q1--q10第一位,q11--q20第二位,q21--q30第三位,q31--q40第四位
q1=.Image("imgcode").Check(CheckPoint("imgcode"))
q2=.Image("imgcode").Check(CheckPoint("imgcode_2"))
q3=.Image("imgcode").Check(CheckPoint("imgcode_4"))
q4=.Image("imgcode").Check(CheckPoint("imgcode_5"))
q5=.Image("imgcode").Check(CheckPoint("imgcode_6"))
q6=.Image("imgcode").Check(CheckPoint("imgcode_8"))
q7=.Image("imgcode").Check(CheckPoint("imgcode_9"))
q8=.Image("imgcode").Check(CheckPoint("imgcode_10"))
q9=.Image("imgcode").Check(CheckPoint("imgcode_11"))
q10=.Image("imgcode").Check(CheckPoint("imgcode_12"))
q11=.Image("imgcode").Check(CheckPoint("imgcode_13"))
q12=.Image("imgcode").Check(CheckPoint("imgcode_14"))
q13=.Image("imgcode").Check(CheckPoint("imgcode_15"))
q14=.Image("imgcode").Check(CheckPoint("imgcode_16"))
q15=.Image("imgcode").Check(CheckPoint("imgcode_17"))
q16=.Image("imgcode").Check(CheckPoint("imgcode_18"))
q17=.Image("imgcode").Check(CheckPoint("imgcode_19"))
q18=.Image("imgcode").Check(CheckPoint("imgcode_20"))
q19=.Image("imgcode").Check(CheckPoint("imgcode_21"))
q20=.Image("imgcode").Check(CheckPoint("imgcode_24"))
q21=.Image("imgcode").Check(CheckPoint("imgcode_25"))
q22=.Image("imgcode").Check(CheckPoint("imgcode_26"))
q23=.Image("imgcode").Check(CheckPoint("imgcode_27"))
q24=.Image("imgcode").Check(CheckPoint("imgcode_28"))
q25=.Image("imgcode").Check(CheckPoint("imgcode_29"))
q26=.Image("imgcode").Check(CheckPoint("imgcode_30"))
q27=.Image("imgcode").Check(CheckPoint("imgcode_32"))
q28=.Image("imgcode").Check(CheckPoint("imgcode_33"))
q29=.Image("imgcode").Check(CheckPoint("imgcode_34"))
q30=.Image("imgcode").Check(CheckPoint("imgcode_35"))
q31=.Image("imgcode").Check(CheckPoint("imgcode_36"))
q32=.Image("imgcode").Check(CheckPoint("imgcode_37"))
q33=.Image("imgcode").Check(CheckPoint("imgcode_38"))
q34=.Image("imgcode").Check(CheckPoint("imgcode_39"))
q35=.Image("imgcode").Check(CheckPoint("imgcode_40"))
q36=.Image("imgcode").Check(CheckPoint("imgcode_41"))
q37=.Image("imgcode").Check(CheckPoint("imgcode_42"))
q38=.Image("imgcode").Check(CheckPoint("imgcode_43"))
q39=.Image("imgcode").Check(CheckPoint("imgcode_44"))
q40=.Image("imgcode").Check(CheckPoint("imgcode_45"))
'one check 得出第一位验证码
        If ( q1 = true )Then
          a=8
          elseif(q2=true) then
          a=9
          elseif(q3=true) then
          a=7
          elseif(q4=true) then
          a=4
          elseif( q5 = true ) then
          a=0
          elseif(q6=true) then
          a=3
          elseif(q7=true) then
          a=6
          elseif(q8=true) then
          a=1
          elseif(q9=true) then
          a=5
          elseif(q10=true) then
          a=2
End If
'two check 得出第二位验证码
If(q11=true)Then
          b=2
          elseif(q12=true) then
          b=3
          elseif(q13=true) then
          b=4
          elseif(q14=true) then
          b=9
          elseif(q15=true) then
          b=5
          elseif(q16=true) then
          b=6
          elseif(q17=true) then
          b=0
          elseif(q18=true) then
          b=8
          elseif(q19=true) then
          b=1
          elseif(q20=true) then
          b=7
End If

'three check 得出第三位验证码
If ( q21 = true )Then
          c=0
          elseif(q22=true) then
          c=7
          elseif(q23=true) then
          c=4
          elseif(q24=true) then
          c=8
          elseif(q25=true) then
          c=1
          elseif(q26=true) then
          c=6
          elseif(q27=true) then
          c=2
          elseif(q28=true) then
          c=9
          elseif(q29=true) then
          c=3
          elseif(q30=true) then
          c=5
End If


'four check 得出第四位验证码
If(q31=true)Then
          d=4
          elseif(q32=true) then
          d=0
          elseif(q33=true) then
          d=5
          elseif(q34=true) then
          d=1
          elseif(q35=true) then
          d=2
          elseif(q36=true) then
          d=3
          elseif(q37=true) then
          d=6
          elseif(q38=true) then
          d=9
          elseif(q39=true) then
          d=7
          elseif(q40=true) then
          d=8
End If

num=(cstr(a)+cstr(b)+cstr(c)+cstr(d))
msgbox" 验证码是:"&num
        .WebEdit("imgcode").Set ""&num
        .WebButton("登 录").Click
        .Sync
End With

[ 本帖最后由 netsky_lt 于 2006-9-30 10:44 编辑 ]

QA_BAY 发表于 2006-9-30 11:29:32

不错.
但如果是用中文字来做检查点,那就无效了.
以下是其它几方法可以参考一下!
http://www.17testing.com/bbs/viewthread.php?tid=3851&extra=page%3D1

netsky_lt 发表于 2006-9-30 12:41:55

如果是中文的也可以使用这种方法,只要清楚图片规则就可以;
有人提到也可以通过object.GetROProperty来更加好,试验中....

walker1020 发表于 2006-10-12 21:56:57

楼主真厉害! 连验证码的方法都得到了! 不过,楼主用了太多的elseif 语句,建议你使用 Case 语句,把代码优化一下。

cnsong99 发表于 2006-10-18 15:09:19

回复 #1 netsky_lt 的帖子

你的随机码是怎么产生的.你怎么知道If ( q1 = true )Then
          a=1
          elseif(q2=true) then
          a=2
          elseif(q3=true) then
          a=4
          elseif(q4=true) then
          a=5
          elseif( q5 = true ) then
          a=0
          elseif(q6=true) then
          a=6
          elseif(q7=true) then
          a=7
a一定等于这些数我可以写成别的数啊.如果那样好象执行的时候随机码错误.你能告诉我你怎样知道a等于这些数的吗?可能我苯点看不懂谢谢指教.

netsky_lt 发表于 2006-10-20 15:07:29

呵呵,你下载附件,就清楚啦,qX是每一个位图检查点,也只能对应一个数字,不是随机的啊。
你看一下对应的位图检查点吧。
q1=.Image("imgcode").Check(CheckPoint("imgcode"))
q2=.Image("imgcode").Check(CheckPoint("imgcode_2"))
q3=.Image("imgcode").Check(CheckPoint("imgcode_4"))


关于中文验证码破解,有空再贴上来共大家分享!

[ 本帖最后由 netsky_lt 于 2006-11-20 22:16 编辑 ]

godmap 发表于 2007-4-20 01:23:30

顶 好帖 谢谢 学习!·

danmy 发表于 2007-4-20 09:24:26

只要图片有规律,就可以搞定~~

suifengpiao 发表于 2007-4-20 12:44:30

验证码一般都带有随机的底色的,这个位图检查回放不了

dandan 发表于 2007-4-20 13:23:24

顶一下...

rting 发表于 2007-4-23 09:53:16

也些验证码是字母的哦

阿哑 发表于 2007-4-23 15:28:51

好贴

sdlkfj2 顶!

zhuyuancan 发表于 2007-4-23 17:43:02

If ( q1 = true )Then
          a=8
          elseif(q2=true) then
          a=9
          elseif(q3=true) then
          a=7
          elseif(q4=true) then
          a=4
          elseif( q5 = true ) then
          a=0
          elseif(q6=true) then
          a=3
          elseif(q7=true) then
          a=6
          elseif(q8=true) then
          a=1
          elseif(q9=true) then
          a=5
          elseif(q10=true) then
          a=2

请问这些对应值(q与a)是怎么出来的?能描述一下吗,正碰到此问题?郁闷啊

zhuyuancan 发表于 2007-4-23 17:47:58

是不是作这句命令:q1=.Image("imgcode").Check(CheckPoint("imgcode"))时,当时第一个验证码是8,所以就得出If ( q1 = true )Thena=8啊???期待佳音

zhuyuancan 发表于 2007-4-24 11:25:53

按以上方法我进行了脚本编制,为什么每次读出的num值都是一样的,也没有随验证码的改变而改变啊,,望再指点啊

zhuyuancan 发表于 2007-4-25 17:39:15

人呢?人都去哪了啊

wgx198302 发表于 2007-4-26 14:36:29

下来试试

dawee 发表于 2007-4-27 16:07:02

段念曾经发表过一篇关于关于验证码的文章,可以参考一下
baidu 搜索关河测试网

skyhen 发表于 2007-4-29 15:31:09

楼主小弟现在碰到一个问题,用你的这段代码是可以将4位验证码取出,但是像那种验证码的颜色和背景图片会变动的验证码我该怎样录制啊,请楼主给出点建议!!!!!!
小弟现在录制是让开发人员将背景图片和字体的颜色都不变是可以用这段代码的!!!!
小弟先在这里谢谢了

xueqinzhaoqing 发表于 2007-7-30 15:00:25

请问40个位图验证点是如何添加的
页: [1] 2 3
查看完整版本: 得出验证码的方法