可以循环通所有输入标签,并通过检查“最具识别性”属性(id,name,type,innerHTML,... whatever)来识别相关标签。这里的一个小组()我在Excel工作表可以自动登录到网站使用
Sub FormAction(Doc As MSHTML.HTMLDocument, ByVal Tag As String, ByVal Attrib As String, ByVal Match As String, ByVal Action As String)
Dim ECol As MSHTML.IHTMLElementCollection
Dim IFld As MSHTML.IHTMLElement
Dim Tmp As String
Set ECol = Doc.getElementsByTagName(Tag)
For Each IFld In ECol ' cycle thru all <[tag]> elements
If VarType(IFld.getAttribute(Attrib)) <> vbNull Then ' does it contain the attribute
If Left(IFld.getAttribute(Attrib), Len(Match)) = Match Then
If Action = "/C/" Then
IFld.Click
Else
IFld.setAttribute "value", Action
End If
Exit Sub
End If
End If
Next
End Sub
该函数采用以下参数:
- 文件....的HTML DOM对象
- 标签....你想要处理的标签(通常是输入,图像,a,...)
- 属性....你想要匹配的值的属性
- 匹配....匹配值为属性
- 行动.....如果在匹配标签进行“/ C /”的。点击()动作,其他动作值放入变量的值属性
如果你想勾上包含的JavaScript代码(如“点击”)不要忘记,你的HTML源看到代码在一个匿名函数内嵌任何属性,就像
function anonymous()
{
onclick="exportData(workOrderSearchForm)";
}
您需要使用的可以考虑一下Instr()函数或类似的,如果你想挂钩例如“exportData(workOrder)”。
也非常重要:给页面足够的时间导航到DOM对象并加载。我注意到我的公司,一旦页面被更改,加载时间有时会大幅增加。
我有这个良好的成功:
Sub MyMainSub()
Dim Browser As SHDocVw.InternetExplorer
Dim HTMLDoc As MSHTML.HTMLDocument
' my other Dim's
' start browser
Set Browser = New SHDocVw.InternetExplorer
Browser.navigate "http://www.whatever.com"
WaitForBrowser Browser, 5 ' wait for browser, but not more than 5 sec
' gain control over DOM object
Set HTMLDoc = Browser.document
WaitForBrowser Browser, 5 ' wait for browser, but not more than 5 sec
' do actions
' FormAction HTMLDoc, w, x, y, z
End Sub
Sub WaitForBrowser(Browser As SHDocVw.InternetExplorer, Optional TimeOut As Single = 10)
Dim MyTime As Single
MyTime = Timer ' seconds since midnight
Do While Browser.Busy Or (Timer <= MyTime + TimeOut)
DoEvents ' go do something else
Loop
If Browser.Busy Then
MsgBox "I waited for " & Timer - MyTime & " seconds, but browser still busy" & vbCrLf & _
"exititing Login sequence now"
End
End If
End Sub
希望这是鼓舞人心的足够为您打造您的解决方案。
祝你好运MikeD
不幸的是,它说这不是一个支持的方法或属性。 “if.window.exportData(ie.Document.forms.workOrderSearchForm)”一旦放入,它也将代码间隔为空。 – Michael 2010-07-14 15:24:29
尝试'ie.window.exportData ie.window.workOrderSearchForm'或'ie.window.eval “exportData(workOrderSearchForm)”' – SLaks 2010-07-14 15:25:27
这两者似乎都无法做到这一点。他们产生相同的错误。 – Michael 2010-07-14 15:31:59