用VBA程序来读取网页数据

随着互联网的web网页应用越来越普及,人机交互也越来越频,为高效的从网页批量获取数据或者录入数据,用程序实现这些功能,更为快捷,实现这一系列的功能,你需要做几个简单的准备。
1,OS环境:Windows
2,IE浏览器
3,工具:Excel或者Visual Studio
先来看看如何用Excel来控制一个网页。
新建一个Excel并且进入VBA,标准模式,首先需要引入两个插件
HTML Object Library
Microsoft Internet Controls
如图

打开IE,你只需要下面几行代码

Sub Main()
    Dim ie As Object
    Set ie = CreateObject("InternetExplorer.Application")
    ie.Visible = True
End Sub

比如我要打开百度,那就这样

ie.Navigate "http://www.baidu.com"

接着你需要等待页面加载

While ie.ReadyState <> 4 Or ie.Busy = True
	DoEvents
Wend

那我们就可以通过这个id来对网页元素进行赋值,如下

ie.Document.getElementById("kw1").value = "hellow world"

VBA模拟单击按键

ie.Document.getElementById("su1").click

IE网页元素通过名称获取

ie.document.all
ie.document.body
ie.document.getElementsByName
ie.document.getElementsByTagName

子页面对象的获取

Dim objFRAME As FramesCollection
Set objFRAME = ie.document.frames
Dim HW As HTMLWindow2
Set HW = objFRAME(1)
HW.document.all
...


活动页面对象的获取。

Dim objShell  As Object
Dim objIE     As Object
Dim n         As Integer
Set objShell = CreateObject("Shell.Application")
For n = objShell.Windows.Count To 1 Step -1
	Set objIE = objShell.Windows(n - 1)
	If objIE Is Nothing Then
		Exit For
	End If
	If Right(UCase(objIE.FullName), 12) = "IEXPLORE.EXE" Then
		Debug.Print objIE.document.URL '测试,输入URL
		If objIE.document.URL = "http://www.baidu.com" Then '看看是不是你要的页面
			'找到你要操作的页面了,开始处理
		End If
	End If
Next
Set objShell = Nothing

ps:现主要问题是模态窗口的控制还未找到方法,期待python的调试功能。