Тема: Jscript:Доступ к логин странице
Все чаще программы для аунтификации используют НТМЛ страницы.
К большому сожалению Логины в программе не совпадают с системными именами. Пришлось писать скрипты для заполнения логина пользователя.
Доступ к странице может осуществляется следующими способами:
 Страница загружается сразу
 Страница перегружается
 Станица загружается во фрейме
Страница загружается сразу
var ie = WScript.createObject('InternetExplorer.Application');
ie.visible = 1;
ie.navigate('http://Super_program1/login')
while (ie.Busy || (ie.READYSTATE != 4))
WScript.Sleep(100)
ie.document.all.userName.value = "Super_" + WScript.CreateObject("WScript.Network").UserName.toUpperCase()
while (ie.Busy || (ie.READYSTATE != 4))
WScript.Sleep(100)
ie.document.all.password.focus()
while (ie.Busy || (ie.READYSTATE != 4))
WScript.Sleep(100)Страница http://Super_program2/start перегружается. По этому будем использовать событие DocumentComplete ожидая загрузки нужной страницы http://Super_program2/login
var ie = WScript.createObject('InternetExplorer.Application', "ie_");
ie.visible = 1;
ie.navigate('http://Super_program2/start')
while (ie.Busy || (ie.READYSTATE != 4))
WScript.Sleep(100)
var li = true
while (li) {
if (!ie) {
break;
}
WScript.Sleep(1000);
}
ie.document.all.usernameField.value = "Super2_" + WScript.CreateObject("WScript.Network").UserName.toUpperCase()
while (ie.Busy || (ie.READYSTATE != 4))
WScript.Sleep(100)
ie.document.all.passwordField.focus()
while (ie.Busy || (ie.READYSTATE != 4))
WScript.Sleep(100)
function ie_DocumentComplete(ie, url) {
if (url.indexOf("http://Super_program2/login") == 0) {
li = false
}
}Станица загружается во фрейме. Перехват страницы осуществляем также как и в предыдущем случаи. Сохраняя ссылки на элементы диалога. Имена полей ввода разработчики выбрали оригинальные
var xL
var xP
var ie = WScript.createObject('InternetExplorer.Application', "ie_");
ie.visible = 1;
ie.navigate('http://Super_program3/index')
while (ie.Busy || (ie.READYSTATE != 4))
WScript.Sleep(100)
var li = true
while (li) {
if (!ie) {
break;
}
WScript.Sleep(1000);
}
xL.value = WScript.CreateObject("WScript.Network").UserName.toLowerCase()
while (ie.Busy || (ie.READYSTATE != 4))
WScript.Sleep(100)
xP.focus()
while (ie.Busy || (ie.READYSTATE != 4))
WScript.Sleep(100)
function ie_DocumentComplete(ie, url) {
if (url.indexOf("http://Super_program3/login") == 0) {
var elements = ie.Document.getElementsByTagName('input')
for (var i = 0; i < elements.length; i++) {
var element = elements[i];
if (element.name == 'var/user.id') {
xL = element
}
if (element.name == 'var/old.password') {
xP = element
}
}
li = false
}
}Имена полей ввода удобно искать с помощью следующего скрипта являющегося хорошим примером использования событий InternetExplorer.Application
var ie = WScript.CreateObject("InternetExplorer.Application", "ie_");
//----------------------------------------------------------
var console = {
log: function(msg) {
WScript.StdErr.Write(msg + "\n");
},
event: function(operation, xpath, value)
{
var s = operation + "," + xpath + "," + value;
WScript.StdErr.Write(s + "\n");
}
};
//----------------------------------------------------------
function ie_BeforeNavigate2(browser, url, flags, target, postdata, headers, cancel) {
console.log("[event] BeforeNavigate2");
console.log("document -> " + typeof ie.Document);
with({ window: ie.Document.parentWindow }) {
console.log("window -> " + typeof window);
}
}
//----------------------------------------------------------
function ie_NavigateComplete2(ie, url) {
console.log("[event] NavigateComplete2");
console.log("document -> " + typeof ie.Document);
with({ window: ie.Document.parentWindow }) {
console.log("window -> " + typeof window);
}
}
//----------------------------------------------------------
function ie_DocumentComplete(ie, url) {
console.log("\n");
console.log("[event] DocumentComplete = " + url);
console.log("TITLE = " + ie.Document.title);
console.log("\n");
ie.Document.attachEvent('onclick', function() {
console.log('onclick');
});
setEventHandler(ie.Document.getElementsByTagName('a'));
setEventHandler(ie.Document.getElementsByTagName('input'));
setEventHandler(ie.Document.getElementsByTagName('select'));
setEventHandler(ie.Document.getElementsByTagName('textarea'));
}
//----------------------------------------------------------
function ie_NewWindow2()
{
console.log("[event] NewWindow2");
}
//----------------------------------------------------------
function ie_NewWindow3()
{
console.log("[event] NewWindow3");
}
//----------------------------------------------------------
function ie_OnQuit() {
console.log("[event] OnQuit");
ie = null;
}
//----------------------------------------------------------
function setEventHandler(elements)
{
for (var i=0; i<elements.length; i++) {
var element = elements[i];
element.attachEvent('onclick', eventHandler);
// element.attachEvent('onfocus', eventHandler);
element.attachEvent('onblur', eventHandler);
element.attachEvent('onchange', eventHandler);
}
}
//----------------------------------------------------------
function eventHandler(evt)
{
console.event(
evt.type,
getElementLocation(evt.srcElement),
getElementValue(evt.srcElement)
);
}
//----------------------------------------------------------
function getElementLocation(element)
{
var s = '';
var tagName = element.tagName.toLowerCase();
if (element.id) {
// return '#' + element.id;
}
switch (tagName) {
case 'a':
var t = element.innerText;
if (t) {
return tagName + "[@href='" + t + "']";
} else {
var imgs = a.getElementsByTagName('img');
if (0 < imgs.length) {
t = imgs[0].alt;
return tagName + ".img.alt='" + t + "']";
}
}
break;
case 'input':
switch (element.type) {
case 'radio':
case 'checkbox':
return tagName + "[@name='" + element.name + "' and @value='" + element.value + "']";
break;
default:
return tagName + "[@name='" + element.name + "']";
break;
}
}
}
//----------------------------------------------------------
function getElementValue(element)
{
var tagName = element.tagName.toLowerCase();
switch (tagName) {
case 'input':
switch (element.type) {
case 'radio':
case 'checkbox':
return element.checked;
break;
default:
return element.value;
}
break;
case 'textarea':
return element.value;
break;
case 'select':
break;
case 'a':
return element.href;
break;
}
}
//----------------------------------------------------------
function getElementBySelector(tagName, name)
{
var elements = ie.Document.getElementsByTagName(tagName);
}
//----------------------------------------------------------
ie.Visible = true;
ie.Navigate2("http://ya.ru");
ie.width = 800;
ie.height = 1000;
while (ie.Busy || (ie.READYSTATE != 4))
WScript.Sleep(100)
//ie.visible=1;
while (true) {
if (!ie) {
break;
}
WScript.Sleep(1000);
}
