Сценарий управления окном Internet Explorer


Автор: Рэймонд Чен
Оригинал статьи: Scripting an Internet Explorer window.

Сегодняшняя программка гуляет по сайту MSDN, случайным образом переходя по ссылкам со страницы CreateProcess. Важно не столько само упражнение, сколько демонстрируемая технология.

function randomwalk(ie, steps) {
 for (var count = 0; count < steps; count++) {

  WScript.StdOut.WriteLine(ie.document.title);

  var links = ie.document.querySelectorAll("#mainSection a");
  do {
   var randomLink = links[Math.floor(Math.random() * links.length)];
  } while (randomLink.protocol != "http:");

  WScript.StdOut.WriteLine("Clicking on " + randomLink.innerText);
  randomLink.click();

  while (ie.busy) WScript.Sleep(100);
 }
}

Полагаю, что читатель догадается, на каком языке написан сценарий. Иначе вы можете не понять, о чём эта статья. Также я не беспокоился о качестве случайных чисел, потому что это маленькая программка.

Для случайных переходов по сайту MSDN, мы запрашиваем список всех ссылок в элементе main­Section. Учтите, что я использую недокументированную зависимость в структуре веб-страниц MSDN. Эта структура менялась, поэтому сценарий может перестать работать в любой момент, если коллектив MSDN решить реорганизовать свои страницы. Не страшно, поскольку это демонстрация, а не рабочий код. В реальной жизни вы, скорее всего, будете работать с веб-страницей, разработанной вашей командой (в рамках автоматического тестирования), поэтому о зависимости от DOM тестировщики могут договориться с разработчиками. (Если вам действительно нужно обрабатывать содержимое сайта MSDN, то следует использовать MSDN content APIВот пример кода.)

Мы берём случайным образом только ссылки http:, отбрасывая всё остальные. Так мы исключаем, к примеру, переход по ссылке mailto:.

Затем вызывается метод click() для симуляции действия пользователя. Можно было переходить по randomLink.href, но я использую более общий метод click(). Для вашего сценария может понадобиться отметить несколько флажков и нажать кнопку, а эти действия нельзя выполнить посредством навигации.

Далее мы ожидаем загрузки веб-страницы. Я ленив и просто использую цикл с опросом. Лучше ожидать события on­ready­state­change, но в маленькой программке мне хватает простого опроса.

Как только загрузится новая страница, мы повторяем всё снова.

Теперь надо воспользоваться функцией.

var ie = new ActiveXObject("InternetExplorer.Application");
ie.visible = true;
ie.navigate("http://msdn.microsoft.com/ms682425");

// Дожидаемся загрузки
while (ie.busy) WScript.Sleep(100);

randomwalk(ie, 10);

ie.Quit();

Мы создаём собственный экземпляр Internet Explorer, чтобы никого не беспокоить своими изменениями, открываем веб-страницу Create­Process и ожидаем загрузки страницы. Затем используем нашу функцию random­walk для перехода по десяти последовательным ссылкам и по окончании работы вызываем демонтажную компанию для уничтожения созданного браузера.

Для пущего злодейства можно вместо создания своего окна захватить уже открытое окно Internet Explorer. (Теперь вы ворвались в чужой дом и переставляете мебель.)

var shellWindows = new ActiveXObject("Shell.Application").Windows();
for (var i = 0; i < shellWindows.Count; i++) {
 var w = shellWindows.Item(i);
 if (w.name == "Windows Internet Explorer") {
  randomwalk(w, 10);
  break;
 }
}

Отредактируйте функцию random­walk чтобы она не была привязана к сайту MSDN.

Реклама
Запись опубликована в рубрике перевод с метками , , . Добавьте в закладки постоянную ссылку.

Добавить комментарий

Заполните поля или щелкните по значку, чтобы оставить свой комментарий:

Логотип WordPress.com

Для комментария используется ваша учётная запись WordPress.com. Выход / Изменить )

Фотография Twitter

Для комментария используется ваша учётная запись Twitter. Выход / Изменить )

Фотография Facebook

Для комментария используется ваша учётная запись Facebook. Выход / Изменить )

Google+ photo

Для комментария используется ваша учётная запись Google+. Выход / Изменить )

Connecting to %s