Как изменить значение входа внутри фрейма с помощью 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"