Итак, вот моя проблема, в нашей интрасети есть веб-страница, на которую я должен войти, чтобы получить доступ через один из наших брандмауэров. Мне нужен этот доступ все время, пока я работаю, но он автоматически выходит из системы каждые 60 минут, поэтому мне нужно остановить то, что я делаю, вернуться на страницу, ввести свое имя пользователя & пароль & войдите снова. Это повторяется около 9 часов или пока я не ухожу с работы.
Я работал над VBScript, который я мог бы планировать запускать каждые 60 минут для себя. В настоящее время я могу сделать это через это основной скрипт …
Const strID = "username"Const strPswd = "password"
Set oShell = CreateObject("WScript.Shell")
oShell.Run("""https://00.0.00.00:0000/php/uid.phpvsys=1&url=http://www.yyy.net%2f""")
WScript.Sleep 3000
oShell.SendKeys strID
oShell.SendKeys "{TAB}"wScript.Sleep 1000
oShell.SendKeys strPswd
WScript.Sleep 1000
OShell.SendKeys "{TAB}"OShell.SendKeys "{ENTER}"WScript.Sleep 1500
Set IE = CreateObject("Shell.Application")
Set windows = IE.Windows()
For Each window In IE.windows
If left(window.LocationUrl, 5) <> "file:" Then
If InStr(window.locationUrl, "http://www.yyy.net/") Then window.Quit()
If UCase(window.locationUrl) = UCase("about:tabs") Then window.Quit()
End If
Next
Вышеприведенный скрипт работает конечно & Я в настоящее время использую это; однако проблема в том, что если / когда скрипт запускается до выхода из системы, вы получаете сообщение об ошибке & очевидно, он не будет работать еще час. Это вдохновило меня погрузиться глубже в сценарии. Я начал искать похожие темы / методы, изучать другие коды и т. Д., Чтобы получить некоторые идеи. Моей первой попыткой было выполнить то же самое, что и вышеописанный скрипт, за исключением полностью скрытого & без использования «SendKeys». Моей целью было собрать сценарий, подобный этому …
Перейдите на страницу & затем проверьте строку «заголовок» … если это = ‘xxxx’, то вы вышли из системы, поэтому установите значения для имени пользователя & элементы пароля & отправить их … в противном случае, если это = ‘гггг’, то вы все еще вошли в систему, так что спать в течение 10 секунд, перезагрузите & Проверьте еще раз. Я был почти уверен, что это будет работать, но с этим сценарием, независимо от того, что я искал с document.getElementById("zzz")
Я ВСЕГДА получаю «нулевую» ошибку. Как будто никаких элементов не существует & Я использовал каждый Name=
& ID=
Я могу найти в источнике. (Если интересно, я также могу опубликовать этот скрипт, но в итоге я перешел к совершенно другому подходу)
После вышеупомянутых проблем я начал читать о XMLHttp & отправив данные таким образом, вместо этого. Используя Fiddler, я зашел на сайт как обычно & удалось найти строку с именем пользователя и паролем, которые были отправлены на сервер & попытался написать скрипт для этого. Это то, что у меня сейчас есть …
Call Main
Function Main ()
User = "myusername"Pass = "mypassword"
'This is the string Fiddler revealed is being sent to server at login...
'"inputStr=&escapeUser=user&user=user&passwd=passwd&ok=Login"
'So I create this string with my information instead of elements values...
Credentials = ("inputStr=&escapeUser=" & User & "&user=" & User & "&passwd=" & Pass & "&ok=Login")
Set objXML = CreateObject("Msxml2.XMLHttp.6.0")
objXML.Open "POST", "https://00.0.00.00:0000/php/uid.php?vsys=1&url=http://www.yyy.net%2f", False
objXML.SetRequestHeader "Content-Type", "application/x-www-form-urlencoded"objXML.Send Credentials
End Function
Используя вышеуказанный метод, не должно иметь значения, если я был или не вошел в систему, данные все равно будут отправлены & ошибок не возникнет. Но этот скрипт ничего не делает, он работает, я не получаю никаких ошибок, я все еще не вошел в систему & Fiddler даже не показывает никаких запросов, отправленных или полученных после того, как я запустил его. Однако, если я введу соответствующую информацию в Fiddler & затем выполните его, бум, я вошел в систему. Это информация, которую я ввел & выполненный & успешно входит в систему через Fiddlers Composer на вкладке Parsed …
С «СООБЩЕНИЕ» выбранный / URL страниц входа / «HTTP / 1.1» выбран …
Referer: https://00.0.00.00:0000/php/uid.php?vsys=1&url=http://www.yyy.net%2f
Content-Type: application/x-www-form-urlencoded
Host: 00.0.00.00:0000
Content-Length: 68
Затем в разделе «Запрошенное тело» я введите …
inputStr=&escapeUser=myusername&user=myusername&passwd=mypassword&ok=Login
Когда я нажимаю «выполнить», вы видите, что запрос проходит & ответ вернуться & когда я проверяю свой конец, я вошел в систему.
Надеюсь, мне не хватает чего-то простого, что один из вас, гуру, может легко указать, или, может быть, у кого-то есть лучший подход, я открыт для всех идей & предложения, потому что после 2 полных дней я не получил ни где.
Кстати, в случае, если кому-то просто любопытно, или это нужно, или что-то еще, соответствующая часть источника со страниц входа ниже …
<body onload="loadPage();">
<table id="formtable">
<tr><td>
<div id="activearea">
<div id="logo"><img src="http://xxxxx.xxxx.net/xxx.png" data alt="Logo" width="100"/></div>
<div id="heading">Firewall Access</div>
<div id="desc">Please enter your credentials.</div>
<div id="formdiv">
<script>
function loadPage() {
if (document.login.user.value == '')
document.login.user.focus();
var errMsg = "";
var respStatus = "Success";
var respMsg = "";
if (respStatus == "Error") {
if (errMsg != "")
errMsg += "<br><br>";
errMsg += "<li>"+respMsg;
} else if (respStatus == "Challenge") {
var divUserName = document.getElementById("dUserName");
divUserName.style.display = "none";
var passwdTitle = document.getElementById("passwdTitle");
passwdTitle.innerHTML = "";
var divInputStr = document.getElementById("dInputStr");
divInputStr.style.display = "block";
divInputStr.innerHTML = respMsg;
}
if (errMsg != "") {
var divObj = document.getElementById("dError");
divObj.style.display = "block";
divObj.innerHTML = errMsg;
}
}
function submitClicked() {
var thisForm = document.getElementById("login_form");
// hide the error div, just incase it was showing.
var divObj = document.getElementById("dError");
divObj.style.display = "none";
divObj.innerHTML = "";
var divTaLogin = document.getElementById("taLogin");
divTaLogin.style.display = "none";
thisForm.inputStr.value = "";
thisForm.escapeUser.value = thisForm.user.value.replace(/\\/g, "\\\\");
}
function onClickHandler() {
submitClicked();
}
</script>
<form name="login" id="login_form" method="post">
<input type='hidden' name="inputStr" value="">
<input type='hidden' name="escapeUser" value="">
<div id="taLogin">
<table>
<tr id="dUserName">
<td><span id="userTitle">User</span></td>
<td><input type="text" id="user" name="user" size="19"></td>
</tr>
<tr>
<td><span id="passwdTitle">Password</span></td>
<td>
<div id="dInputStr" style="display:none"><br></div>
<input type="password" maxlength="40" size="19" name="passwd">
</td>
</tr>
<tr>
<td> </td>
<td><input class="buttonFixed" type="submit" id="submit"name="ok" value="Login" onClick="submitClicked()"></td>
</tr>
</table>
</div>
</form>
<div id="dError" class="msg" style="display:none"></div>
</div>
</div>
</td></tr>
</table>
</body>
</html>
Задача ещё не решена.
Других решений пока нет …