Как изменить значение входа внутри фрейма с помощью VBScript

Я хочу сделать скрипт, который будет открывать 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 ответ

Сначала получите фрейм с именем "form" со страницы. Поскольку он имеет только имя, мы можем использовать метод getElementsByName и получить первый элемент возвращаемой коллекции:

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

Теперь получите доступ к полям формы, используя свойство contentWindow.

 frame.contentwindow.document.getElementByID("user").value = "CoolUsername123"
 frame.contentwindow.document.getElementByID("pswrd").value = "BestPasswordEver321"
Другие вопросы по тегам