ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 Excel Home精品图文教程库
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
300集Office 2010微视频教程 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
楼主: 蓝天630902

[原创] 验证码识别 第3辑:(XmlHttp)

[复制链接]

TA的精华主题

TA的得分主题

发表于 2013-2-16 12:03 | 显示全部楼层
本帖已被收录到知识树中,索引项:图像处理和GDI
untitled.jpg

蓝天大师,新年快乐!
这个验证码,biwidth是50字节,biheight是18字节,而bisizeimage却是2736字节。根据biSizeImage=biWidth’× biHeight计算,52*18=936,这是怎么回事?谢谢

TA的精华主题

TA的得分主题

发表于 2013-2-17 15:23 | 显示全部楼层
蓝天630902 发表于 2013-2-17 13:22
每像素占3字节,50*18*3=2700

图形每行的字节数是4的倍数,所以图形每行末端填充0的字节数=50/4的 ...

我把bisizeimage平均分成4份,每38个字节为一份(既然每行为152个字节,那么从38处开始分了),希望把验证码平均分割4份,每个字符一份,但是不成功

桌面.zip

35.77 KB, 下载次数: 60

TA的精华主题

TA的得分主题

发表于 2013-2-17 14:52 | 显示全部楼层
蓝天630902 发表于 2013-2-17 13:22
每像素占3字节,50*18*3=2700

图形每行的字节数是4的倍数,所以图形每行末端填充0的字节数=50/4的 ...

那每行有多少个字节数?2736除以18吗?每行有152个字节?

TA的精华主题

TA的得分主题

 楼主| 发表于 2013-2-17 13:22 | 显示全部楼层
本帖最后由 蓝天630902 于 2013-2-17 13:22 编辑
cumulonimbus 发表于 2013-2-16 12:03
蓝天大师,新年快乐!
这个验证码,biwidth是50字节,biheight是18字节,而bisizeimage却是2736字节。 ...


每像素占3字节,50*18*3=2700

图形每行的字节数是4的倍数,所以图形每行末端填充0的字节数=50/4的余数(2),所以2*18=36

2736=2700+36

TA的精华主题

TA的得分主题

 楼主| 发表于 2013-2-17 10:38 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2013-2-17 19:50 | 显示全部楼层
蓝天630902 发表于 2013-2-17 19:03
Sub 分割图片()
    Dim crr() As Byte
    Dim arr()

蓝天大师出神入化,我完全没看懂,大师可否讲解一二。
比如这里,为什么是4到16,3到11?
        For i = 4 To 16
            For j = 3 To 11
                a = a + 1
                drr(a) = Split(brr(i, j), ",")(1)
                a = a + 1
                drr(a) = Split(brr(i, j), ",")(2)
                a = a + 1
                drr(a) = Split(brr(i, j), ",")(3)
            Next j
            a = a + 1
            drr(a) = 0
        Next i


TA的精华主题

TA的得分主题

 楼主| 发表于 2013-2-17 19:03 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
cumulonimbus 发表于 2013-2-17 15:23
我把bisizeimage平均分成4份,每38个字节为一份(既然每行为152个字节,那么从38处开始分了),希望把验证 ...

Sub 分割图片()
    Dim crr() As Byte
    Dim arr()
    Dim brr()
    Dim drr()
    On Error Resume Next
    With CreateObject("Msxml2.XMLHTTP.6.0")
        .Open "GET", "http://club.excelhome.net/forum.php?mod=attachment&aid=MTM0ODMyM3xiZTg0ZjEyM3wxMzYxMDg3MjM5fDE2NjY1MTV8OTgwMzAz&noupdate=yes", False
        .send
        If "c:\2.bmp" <> "" Then Kill "c:\2.bmp"    '如果存在2.bmp,就删除
        crr = .responseBody    '把.responseBody放到二进制数组crr里面
        kuandu = Val(crr(18)) + 256 * Val(crr(19))
        gaodu = Val(crr(22)) + 256 * Val(crr(23))
        'Range(Cells(1, 1), Cells(gaodu, kuandu)).Clear
        cangdu = crr(10) + 256 * crr(11)  '位图数据位的字节偏移量
        sewei = crr(28) + 256 * crr(29)   '每一个像素的位(1,4,8,16,24,32),第29~30字节
        If sewei = 32 Then zijie = 4      '每一个像素的字节数,32位图,每像素占4字节
        If sewei = 24 Then zijie = 3      '每一个像素的字节数,24位图,每像素占3字节
        'Debug.Print sewei
        ReDim arr(1 To kuandu * gaodu)
        ReDim brr(1 To gaodu, 1 To kuandu)
        a1 = cangdu
        senyu = (kuandu * zijie) Mod 4    '图形每行末端填充0的字节数
        'Debug.Print senyu
        For i = 1 To kuandu * gaodu
            ts = ""
            arr(i) = ""
            For j = 0 To 2
                ts = ts & "," & Val(crr((i - 1) * zijie + a1 + j))
            Next j
            If i / kuandu = Int(i / kuandu) Then a1 = a1 + senyu
            arr(i) = ts
        Next i
        For i = 1 To gaodu
            For j = 1 To kuandu
                brr(gaodu + 1 - i, j) = arr((i - 1) * kuandu + j)
            Next j
        Next i
        ReDim drr(0 To 417)
        For j = 0 To 53
            drr(j) = crr(j)
        Next j
        drr(18) = 9
        drr(22) = 13
        drr(2) = 162
        drr(3) = 1
        drr(34) = 108
        drr(35) = 1
        a = 53
        For i = 4 To 16
            For j = 3 To 11
                a = a + 1
                drr(a) = Split(brr(i, j), ",")(1)
                a = a + 1
                drr(a) = Split(brr(i, j), ",")(2)
                a = a + 1
                drr(a) = Split(brr(i, j), ",")(3)
            Next j
            a = a + 1
            drr(a) = 0
        Next i

        If "c:\2.bmp" <> "" Then Kill "c:\2.bmp"
        Open "c:\2.bmp" For Binary As #1
        For i = 0 To UBound(drr)
            crr(i) = drr(i)
            Put #1, i + 1, crr(i)
        Next i
        Close #1
    End With
End Sub

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2013-2-21 03:35 | 显示全部楼层
先谢过蓝天神人,能帮写个http://www.qd-n-tax.gov.cn/sst/自动登陆吗 包括验证码和点击登陆按钮的。
下面这个是我粘别人的,不好用,在你指导下可以填用户名密码了,但发现需要在IE属性设置默认浏览器
不改成默认就要先开个网页才执行,可以改吗?是否要重写个?
Sub Goto163()
With CreateObject("InternetExplorer.Application")
.Visible = True
.navigate "http://www.qd-n-tax.gov.cn/sst/"
Do Until .readyState = 4
DoEvents
Loop
.Document.frames(5)all("username").Value = Range("A1") '这里你帮我改的
.Document.frames(5)all("pwd").Value = Range("B1")
'能在这里加上验证部分吗
'能在这里加上登陆吗
End With
MsgBox "Ok"
End Sub

TA的精华主题

TA的得分主题

 楼主| 发表于 2013-2-21 04:56 | 显示全部楼层
zastwy 发表于 2013-2-21 03:35
先谢过蓝天神人,能帮写个http://www.qd-n-tax.gov.cn/sst/自动登陆吗 包括验证码和点击登陆按钮的。
下面 ...


发票查询,验证码不再是障碍!

http://club.excelhome.net/thread-983923-1-1.html

TA的精华主题

TA的得分主题

发表于 2013-3-12 09:35 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
感谢蓝天大哥的分享,努力拜读中……
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-5-7 01:03 , Processed in 0.046142 second(s), 14 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表