0

这里是新手,使用 VBS 帮助将数据输入到 Web 输入表单。将不胜感激任何建议。我经常使用这样的行来根据其名称设置字段的值:

IE.Document.All.Item("field1").Value = "test"

但是,我有一组非常尴尬的字段,其名称随每条记录而变化。他们的物理位置保持不变(视觉上);他们的 tabIndexes 保持不变(1,2,3,4),所以我想知道是否有可能做这样的事情:

IE.Document.All.getElementByTabIndex(1).Value = "test"

...但我不确定是吗?此外,即使这确实有效,tabIndex1 也会用于同一网页上的另一个字段。然而,我感兴趣的字段都位于一个 div 上。div 的 ID 是“form_div”。所以我试图定位一个位于 div "form_div" 上的字段,它的 tabIndex 是 1 ......你认为这可能吗?

提前非常感谢。

4

1 回答 1

2

所以你有一个设置为 1 的DIV元素,tabIndex但你不知道它NameID对吗?然后做这样的事情:

Set oDivs = IE.Document.getElementsByTagName("div")
Set myDiv = Nothing
For Each od In oDivs
    If od.tabIndex = "1" Then
        Set myDiv = od
        Exit For
    End If
Next
If Not myDiv Is Nothing Then
    'do what needs here...
    MsgBox myDiv.Name
End If

PS好吧,我在您的设计中看到了 2 个缺点。

  1. tabIndex应该是唯一的。
  2. 在 IE 中按名称搜索元素并不是那么完美。如果您的元素只有Name而没有,ID那么getElementsByName将失败。更好地使用ID,它甚至可以简化编码:

    Set myDiv = IE.Document.All.form_div
    

按名称查找它是:

Set oDivs = IE.Document.getElementsByTagName("div")
Set myDiv = Nothing
For Each od In oDivs
    If od.Name = "form_div" Then
        Set myDiv = od
        Exit For
    End If
Next

一旦你拥有了元素......

If Not myDiv Is Nothing Then
    Set nodes = myDiv.childNodes
    For i = 0 To nodes.Length-1 Step 2
        If nodes(i).tabIndex = "1" Then
            'do what need here...
            nodes(i).Value = nodes(i).tabIndex
            Exit For
        End If
    Next
End If
于 2013-04-08T14:44:49.497 回答