我试图找到要在线填写一些数据的字段。首先我在IE中写了它,有什么用,但是播种和丑陋。
IE代码
'For Internet Explorer
With IE
.Navigate URL
.Visible = True
End With
'Wait till IE is ready
Do While (IE.Busy Or IE.READYSTATE <> 4)
Sleep 3000
Loop
'Login
Set DZ = IE.Document.GetElementsByName("ctl00$ContentPlaceHolderMainNoAjax$txtClubID")
If Not DZ Is Nothing Then
DZ(0).Value = DropZone1
End If
Set UN = IE.Document.GetElementsByName("ctl00$ContentPlaceHolderMainNoAjax$txtUsername")
If Not UN Is Nothing Then
UN(0).Value = UserName
End If
Set PW = IE.Document.GetElementsByName("ctl00$ContentPlaceHolderMainNoAjax$txtPassword")
If Not PW Is Nothing Then
PW(0).Value = PassWord
End If
Set LogIn = IE.Document.GetElementsByName("ctl00$ContentPlaceHolderMainNoAjax$btnLogin")
For Each btn In LogIn
If btn.Value = "Login" Then
btn.Click
Exit For
End If
Next btn
我无法找到类似于MSXML2.XMLHTTP对象的任何内容 所以我坚持
s = s & "Dim oXL, oXML" & vbCrLf
s = s & "Set oXL = GetObject(, ""Excel.Application"")" & vbCrLf
s = s & "Set oXML = WScript.CreateObject(""MSXML2.XMLHTTP"")" & vbCrLf
s = s & vbCrLf
s = s & "' Navigate to APF website" & vbCrLf
s = s & "oXML.Open ""GET"", ""http://www.apf.asn.au/club/login.aspx"", False" & vbCrLf
s = s & "Wscript.Sleep 50" & vbCrLf
s = s & "oXML.send" & vbCrLf
s = s & "Wscript.Sleep 50" & vbCrLf
VBA正在生成此代码,因此我可以多次执行它,并模拟这样的多线程。这个想法来自:Daniel Ferry,http://excelhero.com/blog
答案 0 :(得分:2)
我不确定你在问什么。当您使用GET
通过XMLHTTP
检索网页时,您只需下载HTML / XML的静态副本。没有举办活动的主持人。您无法单击按钮或使用DOM方法查找元素。你所拥有的只是一个字符串。
如果您需要它像真正的网页一样,您需要将字符串加载到DOM文档中。您可以将XML响应字符串保存为HTML文件,然后使用IE:
加载它Set IE = CreateObject("InternetExplorer.Application")
IE.Visible = True
IE.Navigate "c:\test.htm"
Set DZ = IE.Document.GetElementsByName("ctl00$ContentPlaceHolderMainNoAjax$txtClubID")
或者,如果您只需要搜索DOM元素,则可以通过将XML响应字符串写入HTMLFILE
对象来伪造文档。
Set doc = CreateObject("HTMLFILE")
doc.Write strResponse
Set DZ = doc.GetElementsByName("ctl00$ContentPlaceHolderMainNoAjax$txtClubID")