如何使用VBScript更改帧内输入的值

时间:2016-10-14 07:34:44

标签: input vbscript frame getelementbyid frameset

我想创建一个脚本,它将打开IE并自动填写外部网站表单中的输入。我想要填充的输入放在框架内。所以getElementByID不会在这里工作。

我已经建立了自己的测试网站来使用该脚本。稍后我将把它实现到另一个但我想从简单开始。这是脚本将打开的网站:

<!DOCTYPE html>
<html>

<frameset cols="25%,*,25%">
  <frame name="menu" src="menu.html">
  <frame name="form" src="form.html">
  <frame name="application" src="application.html">
</frameset>

</html>

这是form.html的一个示例(它不需要提交任何内容,但它只是一个测试):

<!DOCTYPE html>
<html>
  <head>
    <title>Login</title>
  </head>        
  <body>
    <div class="login">
     <form action='' method='POST' id='nameform'>
       Username: <input type='text' name='user' id='user' value=""><br>   
       Password: <input type='password' name='pswrd' id='pswrd' value=""><br>    
      <input name='submit' type='submit' value='submit' id='submit'><br>
     </form>
    </div>
  </body>
</html>

最后但并非最不重要的是我的VBScript:

Call Main

Function Main
    Set IE = WScript.CreateObject("InternetExplorer.Application", "IE_")

    IE.Visible = True

    IE.Navigate "http://example.com"
    Wait IE
    With IE.Document 
        .getElementByID("user").value = "CoolUsername123"
        .getElementByID("pswrd").value = "BestPasswordEver321"
    End With
End Function

Sub Wait(IE)
    Do
        WScript.Sleep 500
    Loop While IE.ReadyState < 4 And IE.Busy
End Sub

此代码在其他网站上运行正常,我之前在trello.com上使用过它。但是这个网站没有使用框架,我认为这可能是问题所在。

我也尝试过使用此代码:

Call Main

Function Main
    Set IE = WScript.CreateObject("InternetExplorer.Application", "IE_")

    IE.Visible = True

    IE.Navigate "http://example.com"
    Wait IE
    With IE.Document 
    set frame = IE.document.getElementsByName("form")(0)
        frame.contentwindow.document.getElementByID("user").value = "CoolUsername123"
        frame.contentwindow.document.getElementByID("pswrd").value = "BestPasswordEver321"
    End With
End Function

Sub Wait(IE)
    Do
        WScript.Sleep 500
    Loop While IE.ReadyState < 4 And IE.Busy
End Sub

我也尝试过:

IE.Document.Frames("form").Document.All("user").Value = "CoolUsername123"

我不再收到错误,但输入中也没有值

1 个答案:

答案 0 :(得分:1)

首先从页面获取名为“form”的框架。由于它只有名称,我们可以使用getElementsByName方法获取返回集合的第一个元素:

set frame = IE.document.getElementsByName("form")(0)

现在使用contentWindow property访问表单字段。

 frame.contentwindow.document.getElementByID("user").value = "CoolUsername123"
 frame.contentwindow.document.getElementByID("pswrd").value = "BestPasswordEver321"