VBA研究操作InternetExplorer控件取数据

Posted 宋哥

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了VBA研究操作InternetExplorer控件取数据相关的知识,希望对你有一定的参考价值。

作者:iamlaosong

因业务需要需要从SF网站上查询快件轨迹。虽然可以一次查询多个快件,但每个快件数据要逐个复制下来,还是很麻烦的。查询是需要图片验证的,我没有什么办法绕过这个验证(也许有人有办法),只能手工完成。那么如何实现手工和自动的配合呢?

InternetExplorer控件可以解决这个问题,因为这个控件打开一个连接时,会自动启动默认浏览器并打开这个网页,只需要在浏览器上做完验证,然后利用这个控件的属性,将网页上的数据取出来,然后进行内容分拣,保存到Excel工作表中即可。

需要等这个验证通过后,才能得到所需的内容,所以在此之前,VBA程序需要等待:

另外,还需要对网页内容进行判断,因为验证前后网页内容是不同的,查找图片验证通过后出现的特征字符,如果没有,提示用户继续验证,或者退出。

 官网查询快件轨迹的地址是一个固定地址,后面跟上运单号,多个号码用“,”分隔,创建和打开连接的代码如下:

其中http变量保存的是固定网址,http1变量中保存的则是用逗号分隔的运单号。网页的内容可以用下面两个属性提取:

rspText = ie1.Document.body.innertext

rsphtml = ie1.Document.body.innerhtml

因为我们只需抓取快件轨迹数据,所以只需要用innertext属性即可。如果需要对网页进一步操作,可以分析innerhtml,然后进行自动化提交,如以前曾做过打开网页自动提交用户名和密码,然后抓取数据,这需要对网页元素比较熟才行,代码如下(这个代码与本文关系不大):

提取内容前,还需要判断一下,网页内容是否通过验证并更新内容:

 要提取内容,需要对内容进行分析,找出固定的特征字符进行定位分拣。如找到运单轨迹开始处,轨迹信息如何排列等等。对轨迹内容的分拣,用下面自定义函数完成:

保存轨迹数据到工作表中:

以上是关于VBA研究操作InternetExplorer控件取数据的主要内容,如果未能解决你的问题,请参考以下文章

VBA研究64位系统下无法用ScriptControl控件解析JSon数据

VBA研究显示GIF动态图片

非 IE WebBrowser ActiveX 控件

excel vba 能多线程同时操作吗?

如何使用 VBA(没有 Internet Explorer)下载文件

VBA 自动化的 Internet Explorer 替代方案