我们正在创建一个HTA文件,以便用户输入的信息,我们可以自动执行记录故障单的过程。用户将在HTA表单中输入信息,然后单击“提交”。然后,这将在IE中打开一个链接,将数据从HTA输入到相关字段,然后自动单击页面末尾的“提交”按钮。
目前大部分都有效,但我无法自动执行提交操作。我已经检查了各种论坛,但到目前为止还没有能够使用任何建议。我正在寻找一种方法来自动点击IE窗口中的提交按钮。
IE页面上有3个按钮,我不知道如何指定我想点击提交。
VBScript新手所以非常感谢任何帮助。
<input value="Reset" onclick="return myReset();" class="secondary" type="button">
<input value="Add to a Bundle" onclick="return myAddRequisition();" class="secondary" name="submitorderform" type="submit">
<input value="Submit " onclick="return myOrderNow();" class="primary" name="submitorderform" type="submit">
答案 0 :(得分:0)
我认为您发布的代码有点奇怪,因为它有两个同名的按钮
我假设IE中要发送信息的网页只包含一个表格
我还假设IE自动化对象的实例存储在IE
变量中。
以编程方式通过HTA填写表单后,如果要模拟“添加到包”按钮的单击,请使用以下代码:
var frm = IE.document.forms[0];
for (var i = 0;i < frm.elements.length;i++)
if (frm.elements[i].type == "submit" && frm.elements[i].value == "Add to a Bundle")
frm.elements[i].click();
或者,如果您想点击“提交”按钮,您可以使用上面的代码,但请务必将“添加到捆绑”替换为“提交”。
编辑:在VBScript中,您可以使用以下代码:
Dim frm, i
Set frm = IE.document.forms.item(0)
For i = 0 to frm.elements.length - 1
If frm.elements.item(i).value = "Add to a Bundle" And frm.elements.item(i).type = "submit" Then
frm.elements.item(i).click
End If
Next
编辑2:根据您的评论,我猜您不会等到您的网页完全加载。因此,您会收到未指定的错误。要解决此问题,您应设置一个间隔,以反复检查IE.ReadyState
是否等于4
。为此,请在调用IE
的导航方法后使用以下代码:
Dim interval
interval = window.setInterval(GetRef("fillOutForm"), 1000)
Sub fillOutForm()
If IE.ReadyState = 4 Then
window.clearInterval interval
'Here place code that fills out the form in the webpage and submits it.
End If
End Sub
如您所见,您应该调用setInterval
方法并将第一个参数设置为函数指针。使用GetRef
函数获取函数指针。在我发送的代码中,我传递了一个指向子例程fillOutForm
的指针。所以这个子程序将每1秒调用一次。在此子例程中,您检查IE.ReadyState
是否等于4,然后填写表单并提交。