51Testing软件测试论坛

标题: 得出验证码的方法 [打印本页]

作者: netsky_lt    时间: 2006-9-30 10:40
标题: 得出验证码的方法
本人写了一个得出四位(数字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
不错.
但如果是用中文字来做检查点,那就无效了.
以下是其它几方法可以参考一下!
http://www.17testing.com/bbs/vie ... &extra=page%3D1
作者: netsky_lt    时间: 2006-9-30 12:41
如果是中文的也可以使用这种方法,只要清楚图片规则就可以;
有人提到也可以通过object.GetROProperty来更加好,试验中....
作者: walker1020    时间: 2006-10-12 21:56
楼主真厉害! 连验证码的方法都得到了! 不过,楼主用了太多的elseif 语句,建议你使用 Case 语句,把代码优化一下。
作者: cnsong99    时间: 2006-10-18 15:09
标题: 回复 #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
呵呵,你下载附件,就清楚啦,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
顶 好帖 谢谢 学习!·
作者: danmy    时间: 2007-4-20 09:24
只要图片有规律,就可以搞定~~
作者: suifengpiao    时间: 2007-4-20 12:44
验证码一般都带有随机的底色的,这个位图检查回放不了
作者: dandan    时间: 2007-4-20 13:23
顶一下...
作者: rting    时间: 2007-4-23 09:53
也些验证码是字母的哦
作者: 阿哑    时间: 2007-4-23 15:28
标题: 好贴
sdlkfj2 顶!
作者: zhuyuancan    时间: 2007-4-23 17:43
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
是不是作这句命令:q1=.Image("imgcode").Check(CheckPoint("imgcode"))时,当时第一个验证码是8,所以就得出If ( q1 = true )  Then  a=8啊???期待佳音
作者: zhuyuancan    时间: 2007-4-24 11:25
按以上方法我进行了脚本编制,为什么每次读出的num值都是一样的,也没有随验证码的改变而改变啊,,望再指点啊
作者: zhuyuancan    时间: 2007-4-25 17:39
人呢?人都去哪了啊
作者: wgx198302    时间: 2007-4-26 14:36
下来试试
作者: dawee    时间: 2007-4-27 16:07
段念曾经发表过一篇关于关于验证码的文章,可以参考一下
baidu 搜索  关河测试网
作者: skyhen    时间: 2007-4-29 15:31
楼主小弟现在碰到一个问题,用你的这段代码是可以将4位验证码取出,但是像那种验证码的颜色和背景图片会变动的验证码我该怎样录制啊,请楼主给出点建议!!!!!!
小弟现在录制是让开发人员将背景图片和字体的颜色都不变是可以用这段代码的!!!!
小弟先在这里谢谢了
作者: xueqinzhaoqing    时间: 2007-7-30 15:00
请问40个位图验证点是如何添加的
作者: gary198026    时间: 2007-7-30 15:40
好贴 顶
作者: SimonNET    时间: 2007-8-10 12:21
代码的针对性太强,破解验证码技术难度要比这个高许多.在这种情况下,可以考虑用其它的方案实现.
作者: zzy9zzy2    时间: 2007-8-10 17:11
如果出现可以识别所有验证码的技术的话,那问题就大了,涉及到比较复杂的计算机图形技术,不好搞的。

最痛快的办法就是暂时屏蔽验证码,输入什么验证码都可以通过。
作者: gzj_06    时间: 2007-8-10 18:33
的确是好贴啊,哪天试试,另外在坛子上搜到一个链接,有兴趣的不妨去看看:
http://www.51testing.com/?action_viewnews_itemid_9842.html
作者: marco    时间: 2007-8-11 13:56
现在的验证码都没有这么弱智的,不说每次显示的方式一样,而且背景也不一样,靠图片是不能检查的
作者: 小孩    时间: 2007-8-12 16:34
这个是我针对某个网站论坛编写的认证码 可以参考一下
Sub validate()
                 Dim str,a,b,c
                str=Browser("Browser").Page("xxx | xxxx").WebElement("8+2=?").GetROProperty("innertext")
                a=cint(left(str,1))
                b=cint(mid(str,3,1))
                c=mid(str,2,1)
                If c="+" Then
              str=a+b
                  else
                  str=a-b
                End If
                Browser("Browser").Page("xxxx | xxxx").WebEdit("secanswer").Set str
End Sub
作者: huash    时间: 2007-8-12 17:29
真是不错,谢谢了
作者: liucongying    时间: 2007-8-13 10:00
这种办法 很幼稚的,还是写dll比较好
作者: bobile    时间: 2007-8-13 10:26
好帖子,好好学习下
作者: luweijile    时间: 2007-8-24 20:35
没有通用的验证码识别程序!

只能根据验证码的规则去识别.。

我现在能识别有杂点和杂线的验证,,当然还不能所有的都会做出脚本。
特别是旋转或者扭曲的。  其余什么颜色,背景都不是问题

如果大家不相信,可以到我空间看看.当然我是想大家互相学习验证码的自动识别!
作者: luweijile    时间: 2007-8-24 20:37
毕竟大家用的语言不一样,
我不想用我的脚本语言识别所有验证码,那是不可能的,只有大家互相取长补短,才能告别验证时代!
作者: zengfanjin5588    时间: 2007-8-26 00:24
楼上的果然是高手亚
作者: zhmiss    时间: 2007-10-17 13:11
哈哈,我现在是学习阶段,也没有什么经验可谈,也发不了什么贴!这个综合指数可真不好弄呢!
作者: 想飞的猪儿    时间: 2007-10-17 14:29
大概能看懂脚本,新手学习阶段,大概是这样的如果第一个图像检查点为真,那么显示X(0-9之间的数),根据设置的检查点不同而定。不清楚理解的对不对?
作者: 淡茶飘香    时间: 2008-1-18 16:26
我刚刚接触qtp,按照你的方式处理时,提示The "imgcode" Image object was not found in the Object Repository.
Check the Object Repository to confirm that the object exists or to find the correct name for the object.
Line (7): "q1=.Image("imgcode").Check(CheckPoint("imgcode"))".

请问是什么问题,怎么解决
作者: 板砖    时间: 2008-1-18 18:21
你们的系统居然用这么简单的验证码
作者: tiger_86    时间: 2008-1-19 11:23
都好强啊
我只有学习的份了
作者: lf0026    时间: 2008-1-23 12:10
如果验证码有 变形、干扰码、个数变化的 话 那就复杂了啦
作者: xiaoyaoke    时间: 2008-1-23 12:13
研究吗,当然从简单的开始了,相信楼主会继续努力,和大家分享如何解决更复杂的情况
作者: mythxhg    时间: 2008-1-23 12:40
服了,现在的验证码图片名竟然和里面的内容有关联?
现在的验证码图片都是一样的名字按照规则随即生成里面的图片内容再送到客户端的,不知道你的规则怎么来的.
作者: 淡茶飘香    时间: 2008-1-23 15:55
标题: 回复 36# 的帖子
有没有人知道啊,谢谢,刚刚接触不是很懂
作者: mayuping0516    时间: 2008-2-1 09:41
下拉  谢谢分享  好好学习一下
作者: 今天有雾    时间: 2008-2-1 11:16
虽然目前没有碰到,不过还是很感谢楼主,楼主辛苦了,下了学习一下
作者: hellen_ma    时间: 2008-2-15 18:20
试了一天,发现对于验证码的最好方法还是请程序员帮忙了
根本没办法获得
期待其他解决办法
作者: tiger_86    时间: 2008-10-9 14:32
原帖由 xueqinzhaoqing 于 2007-7-30 15:00 发表
请问40个位图验证点是如何添加的

在运用中遇到这样的问题
还望能够给个好的解决办法
作者: shuishixingyu    时间: 2008-10-28 10:46
学习下如何识别验证码,




欢迎光临 51Testing软件测试论坛 (http://bbs.51testing.com/) Powered by Discuz! X3.2