Вы можете цикл через все входные теги и идентифицировать соответствующий, проверяя атрибут «наиболее идентифицирующий» (id, name, type, innerHTML, ... независимо). Вот Sub() Я использую в листе 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
Функция принимает следующие параметры:
- Doc .... объект HTML DOM
- Тег .... тег, над которым вы хотите работать (обычно ввод, изображение, a, ...)
- Attrib .... атрибут, значение которого вы хотите совместить
- Матч .... совпадение значение для атрибута
- Действия ..... если «/ 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
К сожалению, это говорит о том, что это не поддерживаемый метод или свойство. Он также помещает код как таковой "ie.Window.exportData (ie.Document.forms.workOrderSearchForm)", как только я его вставляю. – Michael
Попробуйте 'ie.window.exportData ie.window.workOrderSearchForm' или' ie.window.eval "exportData (workOrderSearchForm)" ' – SLaks
Ни один из них, похоже, не делает этого. Они дают ту же ошибку. – Michael