问题描述
我很努力在网页上设置一些非常尴尬的字段的值(我不控制它),请评价一个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的目标字段的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!