VBS:div和targetIndex来自外部.vbs的目标字段 [英] VBS: target fields by div and tabIndex from external .vbs

查看:114
本文介绍了VBS:div和targetIndex来自外部.vbs的目标字段的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我很努力在网页上设置一些非常尴尬的字段的值(我不控制它),请评价一个boffin的输入。我做了一个模拟网页,展示了这个问题。这里有:

I am struggling to set the values of some very awkward fields on a webpage (one that I do not control), would value a boffin's input, please. I have made a mock up of the webpage, demonstrating the issue. Here goes:

<html>
<body>

<div id="mydiv1" style="position: none; display: block; z-index: 1; width: 800px;">
<p>First div (mydiv1) starts here.</p>
<br />
<div id="mydiv2" style="position: none; display: block; z-index: 6; width: 800px;">
<p>Second div (mydiv2) starts here. The following field in blue is arranged thusly: <i>div>div>table>form>table</i>; and its tabIndex is 1.</p>

<table border="0" cellspacing="1" cellpadding="0" width="410">
<tbody>
<tr>
<td colspan="3" style="width: 410px; background-color: #5698eb;">

<form id="entryform" name="entryform">

<table border="0" cellspacing="1" cellpadding="0">
<tbody>
<tr>
<td width="100" valign="center" class=text1">
<br /><b>Project: </b>
</td>
<td width="5"></td>
<td valign="centre">
<input class="formclass_input1" type="text" tabIndex="1" name="entryform_field">
</td>
</tr>
</tbody>
</table>
</form>
</td>
</tr>
</tbody>
</table>

<br />
<div id="mydiv3" style="position: none; display: block; z-index: 16; width: 850px;">
<p>Third div (mydiv3) starts here. The following fields are arranged thusly: <i>div>div>div>form>table</i> and the tabIndexes go 1,2,3,4.<br />The field names change randomly from record to record, but their tabIndexes are always the same.</p>

<form id="myform" name="myform">

<table border="0" cellspacing="1" cellpadding="0">
<tbody>
<tr>
<td width="100" valign="center" class=text1">
<b>Name: </b>
</td>
<td width="5"></td>
<td valign="centre">
<input class="formclass_input1" type="text" tabIndex="1" name="changeable_field_name1">
</td>
</tr>
</tbody>
</table>

<table border="0" cellspacing="1" cellpadding="0">
<tbody>
<tr>
<td width="100" valign="center" class=text1">
<b>Date: </b>
</td>
<td width="5"></td>
<td valign="centre">
<input class="formclass_input1" type="text" tabIndex="2" name="changeable_field_name2">
</td>
</tr>
</tbody>
</table>

<table border="0" cellspacing="1" cellpadding="0">
<tbody>
<tr>
<td width="100" valign="center" class=text1">
<b>Company: </b>
</td>
<td width="5"></td>
<td valign="centre">
<input class="formclass_input1" type="text" tabIndex="3" name="changeable_field_name3">
</td>
</tr>
</tbody>
</table>

<table border="0" cellspacing="1" cellpadding="0">
<tbody>
<tr>
<td width="100" valign="center" class=text1">
<b>Address: </b>
</td>
<td width="5"></td>
<td valign="centre">
<input class="formclass_input1" type="text" tabIndex="4" name="changeable_field_name4">
</td>
</tr>
</tbody>
</table>
</form>
</div></div></div>

</body>
</html>

这里的关键问题是字段名称随机变化,我在堆栈中提出了我的问题,但我简化了问题!一个名叫Panayot的人帮助我完美地解决了这个问题,但是当我把我修改后的脚本介绍给现场时,它失败了,因此使得这个模型更加准确,它比我第一次提出的要复杂得多使用Panayot的代码,我的脚本目前看起来像这样:

The critical thing here is the field names change, randomly. I have presented my problem previosuly on stack, but I oversimplified the problem! A fellow named Panayot helped and solved it for me perfectly, but when I introduced my revised script to the live site, it failed. Hence making this more accurate mock-up. It is more complicated than I first presented. Using Panayot's code, my script currently looks like this:

surl ="http://[website.com]"
set ie = nothing
set shapp=createobject("shell.application")
on error resume next
For Each owin In shapp.Windows
     if left(owin.document.location.href,len(surl))=surl then
        if err.number = 0 then
        set ie = owin
          end if
       end if
err.clear
Next
on error goto 0
if ie is nothing then
    wscript.echo "Window Not Open"
else

Set myDiv = IE.Document.All.mydiv3

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
            nodes(i).Value = "ta-da!"
            'nodes(i).Value = nodes(i).tabIndex
            Exit For
        End If
    Next
End If

End If

我用它做了很多实验,但我无法用有限的理解去理解它。基本上最终的IF语句不会让我进入tabIndex1。如果这是可以解决的,我会成为一个非常快乐的人。任何输入赞赏。谢谢。

I've experimented a lot with it, but I just can't figure it out with my limited understanding. Basically the final IF statement is not getting me into the tabIndex "1". If this is solvable I'll be a very happy guy. Any input is appreciated. Thank you.

推荐答案

很高兴看到我的代码很有帮助。需要注意的是 .childNodes 属性返回元素的直接子元素。您寻找的元素嵌套更深。

Glad to see my code was helpful. Need to note that .childNodes property return immediate children of an element. The element you looking for is more deeply nested. I'll copy your example code with space formating to see more clearly your actual hierarchy.

<div id="mydiv1">
  <div id="mydiv2">
    <table>
      <tbody>
        <tr>
          <td>
            <form id="entryform" name="entryform">
              <table>
                <tbody>
                  <tr>
                    <td></td>
                    <td></td>
                    <td valign="centre">
                      <input tabIndex="1" name="entryform_field">
                    </td>
                  </tr>
                </tbody>
              </table>
            </form>
          </td>
        </tr>
      </tbody>
    </table>
  </div> <!-- end of mydiv2 -->
</div>  <!-- end of mydiv1 -->

我没有看到 DIV ID mydiv3,也许这是一个错字?无论如何,您可以结合 .childNodes .firstChild 属性来浏览层次结构树,但那会很痛苦编码。您可以使用 getElementsByTagName 函数简化该过程。

I not see a DIV with ID "mydiv3", maybe it's a typo? Anyway, you can combine .childNodes and .firstChild properties to browse into hierarchy tree, but that w'd be painful coding. You can simplify that process with getElementsByTagName function.

Set elm1 = IE.Document.All.mydiv1
MsgBox "Tables " & elm1.getElementsByTagName("table").Length '2
MsgBox "Forms  " & elm1.getElementsByTagName("form" ).Length '1
MsgBox "Inputs " & elm1.getElementsByTagName("input").Length '1

这样您就可以从一个级别开始搜索更接近实际元素。

This way you can start searching from a level more closer to the actual element.

Set myInput = Nothing
For Each elm In IE.Document.All.mydiv1.getElementsByTagName("input")
    If elm.tabIndex = "1" Then
        Set myInput = elm
        Exit For
    End If
Next

If Not myInput Is Nothing Then
    myInput.Value = "ta-da!"
End If

这篇关于VBS:div和targetIndex来自外部.vbs的目标字段的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆