注册 登录
编程论坛 VB6论坛

VB获取网页验证码失败,请高手指点

wyf_andy 发布于 2017-06-03 00:39, 4761 次点击
Private Sub Command1_Click()
    Dim X
    Dim CtrlRange
    For Each X In webAuto.Document.All
        If X.tagName = "IMG" Then
             Set CtrlRange = webAuto.Document.body.createControlRange()
             CtrlRange.Add (X)    '此处提示出错  对象不支持该属性或方法
             CtrlRange.execCommand ("Copy")
             Set Image1.Picture = Clipboard.GetData
         End If
    Next
End Sub

Private Sub Form_Load()
    webAuto.Navigate "http://www.
End Sub

有的网页可以成功获取,可这个网页提示出错请高手指点,感谢!

[此贴子已经被作者于2017-6-3 00:43编辑过]

14 回复
#2
xzlxzlxzl2017-06-03 21:21
webbrowser控件的Document.All并不能获取所有元素,因为有的元素是通过js代码产生的,下述代码可能可以得到全部源代码:
Dim XmlHttp,a
Set XmlHttp = CreateObject("Microsoft.XMLHTTP")
XmlHttp.Open "GET", "http://www., True
XmlHttp.send
While XmlHttp.readyState <> 4
DoEvents
Wend
a=XmlHttp.Text
'接下来通过分析源代码得到验证图片地址
#3
wyf_andy2017-06-07 13:31
webbrowser控件的Document.All并不能获取所有元素,因为有的元素是通过js代码产生的,下述代码可能可以得到全部源代码:
Dim XmlHttp,a
Set XmlHttp = CreateObject("Microsoft.XMLHTTP")
XmlHttp.Open "GET", "http://www., True
XmlHttp.send
While XmlHttp.readyState <> 4
DoEvents
Wend
a=XmlHttp.Text   '此处提示出错,提示此对对象不支持该属性或方法
还有一个问题就是,这个验证图片需要点一下输入验证码文本框才能显示出来
#4
wyf_andy2017-06-07 13:32
回复 2楼 xzlxzlxzl
webbrowser控件的Document.All并不能获取所有元素,因为有的元素是通过js代码产生的,下述代码可能可以得到全部源代码:
Dim XmlHttp,a
Set XmlHttp = CreateObject("Microsoft.XMLHTTP")
XmlHttp.Open "GET", "http://www., True
XmlHttp.send
While XmlHttp.readyState <> 4
DoEvents
Wend
a=XmlHttp.Text   '此处提示出错,提示此对对象不支持该属性或方法
还有一个问题就是,这个验证图片需要点一下输入验证码文本框才能显示出来
#5
风吹过b2017-06-07 16:59
抓包结果:

POST /Home/GetCaptchaForRegister HTTP/1.1
X-Requested-With: XMLHttpRequest
Accept: application/json, text/plain, */*
c02b5: 1NosPtSB3EkeXXXjHjoQJnI7EvxJeXntxb3ZqbTycDJDfqMZk2cpHIUtTQx3w09gBsVk15WY2XN66ksJSF_L0MjCwt01
Referer: http://www.
Accept-Language: zh-CN
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; WOW64; Trident/6.0)
Host: www.
Content-Length: 0
DNT: 1
Connection: Keep-Alive
Cache-Control: no-cache
Cookie: ClientID=12308235013744023413; language=zh-CN; __RequestVerificationToken=asXzX0LVRhwEIhdIoa4rVh0-9tC19XXIO0pGnHicYMfFBwr7biL-iB4tB8Xoeu2kpDNXNOJapHQPlHFCqocQztXKJ-01; DeviceCheck=1


直接返回
data:image/png;base64,/9j/4AAQSkZJRgABAQEAYABgAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRofHh0aHBwgJC4nICIsIxwcKDcpLDAxNDQ0Hyc5PTgyPC4zNDL/2wBDAQkJCQwLDBgNDRgyIRwhMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjL/wAARCAASACgDASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwDY1/xDqmp6w2j6FDZR2tpaG8kN4zRrNGrYwNuMDj2HrjtVu/FureJktrbQbK0ggSx+3TJdswQqpxsBXHcEDoOO3abxhpl34ju7W6s/Dtrf6baoyI7zi3cEfxEkjMY/u49enbLj8Oa3YQWlzpNgt/axaf8AYp/9JEAdgzOXBfHyBj04PHY9MYKlyJ6X/wCH319N7GUnJy73/Hb8N/6tfU1zxm9x4QttStrQRwyx5gszk+ayjL524/doAckY6DoTxX8T+NrtPD9rJbWBK/Z45nQRMIewJYgjCZyAM5z+lF/Aur3egs1lqgSG2077MsTRLtnIJZwrMRtUsTycdBnpxpX+ka/rHwzXTUfzzBCgBYJD5pVgcddoVAMZzztz16NRoKSs0/e/AlOcrXvqvv2/Bf1c7FSdaUE/6PpEI5/h87H8lH+eehSIDrCKD+40iAc/w+dt/kox/k9CuE2S5leyfm/08h3in91o0UcfyJ5qrtXgYAPGPTgflR4p/daNFHH8ieaq7V4GADxj04H5UUULoOp9v/Cv1DxT+60aKOP5E81V2rwMAHjHpwPyo8U/utGijj+RPNVdq8DAB4x6cD8qKKF0Cp9v/Cv1DxT+60aKOP5E81V2rwMAHjHpwPyoooqobHJjP4i9D//Z


你看着办吧!
反正这个函数,我稍微找了一下,没找到在哪里写的,怎么运行的,都没找到。你慢慢找,找到后,用VB重写一个就OK了。
#6
xzlxzlxzl2017-06-09 05:33
哦,记错了,应该是“a=XmlHttp.Responsetext”
#7
wyf_andy2017-06-09 14:28
回复 6楼 xzlxzlxzl
多谢,这样是可以获取源码了,可是还有一个问题想请教您,这个验证图片需要点一下验证码文本框才能显示出来验证码,这样应该如何操作?
#8
wyf_andy2017-06-09 14:30
回复 5楼 风吹过b
这是什么函数没找到相关资料,不知道应该如何操作,还得请您帮我找点这方面的资料,多谢!
#9
风吹过b2017-06-09 18:14
POST /Home/GetCaptchaForRegister HTTP/1.1           验证码的页面,使用POST方式请求
X-Requested-With: XMLHttpRequest   
Accept: application/json, text/plain, */*
c02b5: 1NosPtSB3EkeXXXjHjoQJnI7EvxJeXntxb3ZqbTycDJDfqMZk2cpHIUtTQx3w09gBsVk15WY2XN66ksJSF_L0MjCwt01
Referer: http://www.          来源页面        
Accept-Language: zh-CN
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; WOW64; Trident/6.0)
Host: www.                             主机名
Content-Length: 0                                  提示数据为空
DNT: 1
Connection: Keep-Alive
Cache-Control: no-cache
Cookie: ClientID=12308235013744023413; language=zh-CN; __RequestVerificationToken=asXzX0LVRhwEIhdIoa4rVh0-9tC19XXIO0pGnHicYMfFBwr7biL-iB4tB8Xoeu2kpDNXNOJapHQPlHFCqocQztXKJ-01; DeviceCheck=1         Cookie

这是 HTTP 协议的封包内容。
不管是 直接使用 webbrows 还是 XmlHttp ,都是使用这个协议。
没时间仔细测试了,我没找到对应的函数是在那里的。

你可以不是,找到 输入验证码的那个框,然后 给焦点,或者 单击 。
感觉可以。
#10
xzlxzlxzl2017-06-09 19:58
回复 8楼 wyf_andy
可以通过遍历docment.element,然后使用click方法,可实现自动点击功能。你自己百度吧,好多这方面的代码。
#11
wyf_andy2017-06-10 08:49
回复 10楼 xzlxzlxzl
好的,多谢,我自己先找找这方面的资料试试看,到时候如果有什么不懂的再向你请教了。
#12
wyf_andy2017-06-10 08:51
回复 9楼 风吹过b
好的,多谢,我自己先找找这方面的资料试试看,到时候如果有什么不懂的再向你请教了。
#13
wyf_andy2017-06-10 10:40
回复 2楼 xzlxzlxzl
<img ng-show="scope.checkCode.image" ng-src="data:image/png;base64,/9j/4AAQSkZJRgABAQEAYABgAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRofHh0aHBwgJC4nICIsIxwcKDcpLDAxNDQ0Hyc5PTgyPC4zNDL/2wBDAQkJCQwLDBgNDRgyIRwhMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjL/wAARCAASACgDASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwDt9d8S2lpLb2zGLFwf3Ucs6wpKB1Znb7sY9gS3YEUzV/E0NsLO3uBbrJcj5IWuRHG+MZJkYDEYPtluy4rK8R6JqOq6ve3lnaNc2V3pps1KyImxw2Qx3EfJk5yMn5emOtS/8M6nMT9nhe+tZNHXTvMEiJh0xhzuI/d554yeOmOuUYwSV9Lfhv8Aj/WnTpbld2/rb/gmxqviuVbh7ZLBJorSz+2XiJOVBQEAhDt+cdTghcgds8rr3iuW306DULbSJ7vRyqPLIJFjyrEAYB5bk9B17kDrmX/hW91P7HBZGaAJp6WNxqRkQRzRDGRs5Y9DjhQc/e9b2uaXJrVgNGh0V306CAJZ3wljG2QDAY5IZVGASVB3enq7U4teX4f8F9BJyf8AXp/wTqFP9pIGwUsgM4PBl/8Asf5/TqVHaRSXNnBDLKZLaKNVeQ8G4IGCf93+f06lYOXK+VNryX67a/15Gi1WpLq3FkqjhWljUjsQWGR9KNW4slUcK0sakdiCwyPpRRSpfY/xf5DDVuLJVHCtLGpHYgsMj6UatxZKo4VpY1I7EFhkfSiiil9j/F/kAatxZKo4VpY1I7EFhkfSiiiu3A/w36ks/9k=" class="" src="data:image/png;base64,/9j/4AAQSkZJRgABAQEAYABgAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRofHh0aHBwgJC4nICIsIxwcKDcpLDAxNDQ0Hyc5PTgyPC4zNDL/2wBDAQkJCQwLDBgNDRgyIRwhMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjL/wAARCAASACgDASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwDt9d8S2lpLb2zGLFwf3Ucs6wpKB1Znb7sY9gS3YEUzV/E0NsLO3uBbrJcj5IWuRHG+MZJkYDEYPtluy4rK8R6JqOq6ve3lnaNc2V3pps1KyImxw2Qx3EfJk5yMn5emOtS/8M6nMT9nhe+tZNHXTvMEiJh0xhzuI/d554yeOmOuUYwSV9Lfhv8Aj/WnTpbld2/rb/gmxqviuVbh7ZLBJorSz+2XiJOVBQEAhDt+cdTghcgds8rr3iuW306DULbSJ7vRyqPLIJFjyrEAYB5bk9B17kDrmX/hW91P7HBZGaAJp6WNxqRkQRzRDGRs5Y9DjhQc/e9b2uaXJrVgNGh0V306CAJZ3wljG2QDAY5IZVGASVB3enq7U4teX4f8F9BJyf8AXp/wTqFP9pIGwUsgM4PBl/8Asf5/TqVHaRSXNnBDLKZLaKNVeQ8G4IGCf93+f06lYOXK+VNryX67a/15Gi1WpLq3FkqjhWljUjsQWGR9KNW4slUcK0sakdiCwyPpRRSpfY/xf5DDVuLJVHCtLGpHYgsMj6UatxZKo4VpY1I7EFhkfSiiil9j/F/kAatxZKo4VpY1I7EFhkfSiiiu3A/w36ks/9k=">
现在验证码的地址已经获取到了,可是这样的地址不知道怎么显示到image里。
#14
风吹过b2017-06-10 12:41
data:image/png;base64,
看到数据头吗?

data   表示直接是数据
image  表示数据是图片
png   表示图片格式是 png
base64  表示数据编码格式上 base64

你要做的,把后面的数据 解码,然后写一个临时文件,然后再显示

如果 vb 不支持png ,那直接不解码,写 html 文件,另一个 webbrows 打开html 文件来自动显示这个图像
仿这个图像的标志来写
#15
wyf_andy2017-06-11 09:22
以下是引用风吹过b在2017-6-10 12:41:57的发言:

data:image/png;base64,
看到数据头吗?

data   表示直接是数据
image  表示数据是图片
png   表示图片格式是 png
base64  表示数据编码格式上 base64

你要做的,把后面的数据 解码,然后写一个临时文件,然后再显示

如果 vb 不支持png ,那直接不解码,写 html 文件,另一个 webbrows 打开html 文件来自动显示这个图像
仿这个图像的标志来写

已经通过你说的写 html 文件,另一个 webbrows 打开html 文件来自动显示这个图像解决了,这些天非常感谢你的热心帮助!
1