Режим динамической презентации

Содержание



Режим динамической презентации

Режим динамической презентации предоставляет механизм управления программой-браузером с помощью программного кода на языке JavaScript непосредственно во время показа сайта. Динамическая презентация позволяет создавать индивидуальные алгоритмы показа для каждого посетителя, принимать те или иные решения в зависимости от открывшейся страницы сайта, создавать скриншоты страниц или их частей, а так же проверять успешность выполнения тех или иных команд и при необходимости повторять их выполнение. Таким образом, использование динамической презентации открывает практически неограниченные возможности.

Скрипт динамической презентации выполняется в отдельном контексте, поэтому скрипт сохраняет свое состояние при переходах и перезагрузках страниц во вкладках.



Функция продолжения

Большинству команд (функций) управления презентацией требуется некоторое время, чтобы выполнить необходимые действия. Состояние активной вкладки сразу же после исполнения команды может быть неопределенным. Например, после выполнения перехода в текущей вкладке непродолжительное время может оставаться старая страница, и нужно подождать пока новая страница загрузится браузером. Клики по объектам на странице также выполняются асинхронно. На выполнения клика может потребоваться до 5-6 секунд, поэтому оценивать успешность клика желательно не менее, чем через 5 секунд после вызова функции, отвечающей за выполнение клика.

В связи с этим, большинство функций управления презентацией принимает в качестве последних двух параметров функцию, которая будет заниматься дальнейшим управлением презентацией, и время, через которое должна быть вызвана эта функция после начала исполнения команды. Если время опущено функция будет вызвана сразу же после выполнения команды. Указание времени без передачи функции продолжения не имеет смысла.

Функция продолжения function FuncName(window) { ... } может принимать один параметр - window, которому передается контекст активной вкладки (объект Window). Используя объект Window вы можете получать доступ к объектам страницы, загруженной в активную вкладку, например, к документу страницы (window.document).

// 1. Передача анонимной (без названия) функции продолжения
activateTab(0, function(aWindow) {
	// тут, внутри функции продолжения,
	// вы можете писать код своего скрипта
	print('Внутри функции продолжения');
}, 10);

// 2. Передача функции продолжения
activateTab(0, step1, 10);
function step1(aWindow) {
	// тут, внутри функции продолжения,
	// вы можете писать код своего скрипта
	print('Внутри функции продолжения');
};


Объект CallChain

Объект CallChain предоставляет поддержку цепочечного вызова. Каждый вызов метода next объекта CallChain помещает переданную ему функцию в цепочку вызовов, за обслуживание которой отвечает текущий экземпляр объекта CallChain, и возвращает этот экземпляр для дальнейших действий. Выполнение цепочки начинается после ее полного построения и выхода из контекста синхронизации, в котором она была создана (проще говоря, не стоит ждать завершения выполнения любой функции в цепочке сразу же после ее создания, используя цикл и/или метод wait(t) и проверку переменной, которую должна установить функция, находящаяся в цепочке, так как эта функция даже не начнет выполняться). После выполнения переданной в цепочку функции, объект ожидает установленное время, а затем исполняет следующую функцию в цепочке. И так далее. Если функций в цепочке более не осталось, объект CallChain завершает работу по обработке функций и, если на него не осталось ссылок, самоуничтожается. Несмотря на то, что можно сохранить ссылку на объект CallChain, повторное его использование недопустимо.

Необработанные исключения в процессе исполнения цепочки функций игнорируются.

Функции, доступные при работе с объектом, имеющим тип CallChain:

  • Функция next(timeout, callback) добавляет функцию, переданную в параметре callback в цепочку вызовов.
    • timeout - время в секундах, отведенное на выполнение функции, переданной в параметре callback.
    • callback - функция продолжения, которую требуется выполнить.
// 1. Переход на Яндекс, Google, Рамблер
// На загрузку каждого сайта по 5 секунд
run().next(5, function(aWindow) {
	navigate('http://ya.ru');
}).next(5, function(aWindow) {
	navigate('http://google.com');
}).next(5, function() {
	navigate('http://rambler.ru');
}).next(0, function() {
	print('Все!!!');
});



Управление динамической презентацией

Для скриптов динамической презентации доступны стандартные объекты JavaScript, а также нижеперечисленные свойства и функции.

  • Свойство window содержит объект Window для текущего выбранного фрейма в активной вкладке. Может быть переопределено.

    Примеры использования:

    // 1. Вывод в журнал адреса открытой страницы
    print('Адрес страницы: ' + window.location);
    
    // 2. Внимание!!! Не называйте свои переменные window и document.
    var window = 12345; // не делайте так
    print('12345 = ' + window);
    
  • Свойство document содержит объект Document для текущего выбранного фрейма в активной вкладке. Может быть переопределено.

    Примеры использования:

    // 1. Вывод в журнал названия открытого сайта
    navigate('http://example.com');
    wait(5000);
    print('Название сайта: ' + document.domain);
    
    // 2. Внимание!!! Не называйте свои переменные window и document.
    var document = 12345; // не делайте так
    print('12345 = ' + document);
    
  • Функция activateTab(tabIndex, callback, timeout) устанавливает активную вкладку. Если вкладка еще не создана, создает ее и все вкладки, индекс которых меньше, чем tabIndex.
    • tabIndex - номер вкладки. Может принимать значения 0, 1, 2 или 3.
    • callback (необязательный) - функция продолжения, которая будет вызвана после активации указанной вкладки.
    • timeout (необязательный) - время в секундах, по прошествии которого будет вызвана функция, переданная в параметре callback.
    Возвращаемое значение: объект Window для активированной вкладки, если не задан параметр callback, либо undefined, если параметр callback задан.

    Примеры вызова:

    // 1. Активирует основную вкладку и возвращает ее контекст (объект Window)
    var aWindow = activateTab(0);
    aWindow.document.body.innerHTML = 'Основная вкладка';
    
    // 2. Создает 2 дополнительных вкладки, активирует 2-ю вкладку
    // и средствами JavaScript DOM API загружает в нее Википедию.
    var aWindow = activateTab(2);
    aWindow.location = 'http://wikipedia.org/';
    
  • Функция loadHTML(html, documentUrl, referringUrl, callback, timeout) загружает в активную вкладку HTML-документ, созданный из переданной строки.
    • html - строка, содержащая контент для загрузки.
    • documentUrl - URL-адрес, который требуется установить для загруженного документа.
    • referringUrl (необязательный) - адрес страницы-реферера.
    • callback (необязательный) - функция продолжения.
    • timeout (необязательный) - время в секундах, по прошествии которого будет вызвана функция, переданная в параметре callback.
    Возвращаемое значение: undefined.

    Примеры вызова:

    // 1. Загружает в активную вкладку HTML-документ из строки,
    //    выполняя подмену адреса страницы на адрес Яндекса
    //    с подстановкой реферера - главной страницы Google
    loadHTML('Hello, World!', 'http://ya.ru', 'http://google.com');
    
    // 2. Загружает в активную вкладку HTML-документ из строки,
    //    выполняя подмену адреса страницы на адрес Яндекса
    var yandexLogo = '//yastatic.net/www/1.930/yaru/i/logo.png';
    var googleLogo = '//www.google.com/images/srpr/logo11w.png';
    var content = http.getSync('http://ya.ru') + '';
    content = content.replace(yandexLogo, googleLogo);
    loadHTML(content, 'http://ya.ru');
    
    // 3. Выполняет загрузку страницы из строки
    loadHTML('Hello, World!');
    
  • Функция navigate(url, referrer, callback, timeout) загружает страницу по адресу url в активную вкладку. Аналог команды "Переход" в статической презентации.
    • url - адрес страницы сайта, которую требуется загрузить в активную вкладку.
    • referrer (необязательный) - адрес страницы-реферера. Чтобы передать в качестве реферера адрес текущей страницы, укажите ключевое слово CURRENT. Если значение отсутствует, то будет выполнен прямой переход.
    • callback (необязательный) - функция продолжения.
    • timeout (необязательный) - время в секундах, по прошествии которого будет вызвана функция, переданная в параметре callback.
    Возвращаемое значение: undefined.

    Примеры вызова:

    // 1. Выполняет перехода на Яндекс с подстановкой реферера - главной страницы Google
    navigate('http://ya.ru', 'http://google.com');
    
    // 2. Прямой переход на Яндекс (без реферера)
    navigate('http://ya.ru');
    
    // 3. Прямой переход на Яндекс, затем через 10 сек. переход на Google
    // с подстановкой в качестве реферера URL открытой страницы (http://ya.ru).
    navigate('http://ya.ru');
    wait(10000);
    navigate('http://google.com', 'CURRENT');
    
  • Функции loadLink находят ссылку на странице, загруженной в активную вкладку, и осуществляют переход по найденной ссылке.
    loadLink(searchKey, data, index, canSendEvents, callback, timeout)
    loadLink(linkElement, canSendEvents, callback, timeout)
    В качестве реферера всегда передается адрес страницы, на которой производился поиск. Аналог команды "Поиск ссылки" в статической презентации.
    • searchKey - ключ поиска, строка, принимающая одно из следующих значений:
      • id – поиск ссылки по ID, тогда параметр data - искомый идентификатор или его часть, в зависимости от текущего вида поиска.
      • link – поиск ссылки по её части, тогда параметр data - часть искомой ссылки. Доступны все виды поиска.
      • number – поиск ссылки по её порядковому номеру в документе, data - порядковый номер, начиная с нуля. Внимание: параметр data должен быть задан как строка, содержащая число. Например, вызов функции loadLink('number', '2'); заставит программу пропустить 2 первые найденные ссылки и перейти по третьей. При этом, вызов функции loadLink('number', 2); создаст исключение с сообщением о недопустимом параметре data.
      • text – поиск ссылки по её тексту, data – часть текста ссылки. Поиск производится в свойстве innerHTML. Доступны все виды поиска.
      • name – поиск ссылки по её имени, data – часть имени ссылки. Доступны все виды поиска.
      • last – выбор последней ссылки, найденной ранее функциями text, check или sendEvents, параметр data игнорируется, но его ввод обязателен.
      • selector – поиск ссылки по CSS-селектору, параметр data должен быть допустимым CSS-селектором. Например, при вызове loadLink('selector','.mylink[href*=example]') будет найдена ссылка, имеющая класс mylink и содержащая в адресе слово example, например такая: <a href="http://example.com" class="mylink">пример сайта</a>.
      • custom – поиск ссылки по атрибутам, для которых не создано отдельных команд (например title, class и т.п.), параметр data вводится в виде строки в формате name=value, где name – имя атрибута, value – часть значения этого параметра. Возможен поиск по нескольким атрибутам, в этом случае параметр data задается в виде name1=value1!!name2=value2!!name3=value3... (разделен !! двумя восклицательными знаками). Например, при вызове loadLink('custom','class=mylink!!href=http://mysite.ru') будет найдена такая ссылка: <a href="http://mysite.ru" class="mylink">Мой сайт</a>. Доступны все виды поиска.
    • data - строковое значение: данные по которым производится поиск. Зависят от параметра searchKey.
    • index (необязательный) - числовое значение: определяет индекс ссылки начиная с нуля (среди соответствующих условиям поиска), по которой будет осуществлен переход. При отсутствии данного параметра переход осуществляется по первой найденной ссылке. Если значение этого параметра задать отрицательным значением, переход будет осуществлен по случайной ссылке.
    • canSendEvents (необязательный) - логическое значение: true - отправлять ссылке события мыши перед переходом, false - запрет отправки событий. По умолчанию события отправляются. Также может быть задан строковым значением NoEvents, например, loadLink('link','http',0,'NoEvents'), что запретит отправку событий mousedown, click и т.п.
    • linkElement – предварительно найденная ссылка (HTML-элемент с тегом A), по которой нужно перейти.
    • callback (необязательный) - функция продолжения.
    • timeout (необязательный) - время в секундах, по прошествии которого будет вызвана функция, переданная в параметре callback.
    Возвращаемое значение: undefined.

    Примеры вызова:

    // 1. Переход по ссылке форума
    navigate('http://forum.webisida.com');
    wait(10000);
    // переход по случайной ссылке содержащей viewtopic
    loadLink('link','viewtopic', -1);
    
    // 2. Переход по 20 ссылке форума
    navigate('http://forum.webisida.com');
    wait(10000);
    // переходим по 20 ссылке, затем вызываем 2 функции
    loadLink('number','20');
    
    // 3. Переход по выбранной скриптом ссылке (ссылке Инструкции)
    navigate('http://forum.webisida.com');
    wait(10000);
    var links = document.getElementsByTagName('a');
    for (var i = links.length - 1; i >= 0; i--) {
    	var a = links[i];
    	if (a.innerHTML == 'Инструкции') {
    		loadLink(a); // переход по ссылке
    	}
    }
    
  • Функция loadSiteLink(searchKey, data, index, events, callback, timeout) находит внутреннюю ссылку на странице, загруженной в активную вкладку, и осуществляет переход по найденной ссылке. В качестве реферера всегда передается адрес страницы, на которой производился поиск. Аналог команды "Внутренний переход" в статической презентации.
    • searchKey - ключ поиска, строка, принимающая одно из следующих значений:
      • id – поиск ссылки по ID, тогда параметр data - искомый идентификатор или его часть, в зависимости от текущего вида поиска.
      • link – поиск ссылки по её части, тогда параметр data - часть искомой ссылки. Доступны все виды поиска.
      • text – поиск ссылки по её тексту, data – часть текста ссылки. Поиск производится в свойстве innerHTML. Доступны все виды поиска.
      • name – поиск ссылки по её имени, data – часть имени ссылки. Доступны все виды поиска.
      • selector – поиск ссылки по CSS-селектору, параметр data должен быть допустимым CSS-селектором. Например, при вызове loadLink('selector','.mylink[href*=example]') будет найдена ссылка, имеющая класс mylink и содержащая в адресе слово example, например такая: <a href="http://example.com" class="mylink">пример сайта</a>.
      • custom – поиск ссылки по атрибутам, для которых не создано отдельных команд (например title, class и т.п.), параметр data вводится в виде строки в формате name=value, где name – имя атрибута, value – часть значения этого параметра. Возможен поиск по нескольким атрибутам, в этом случае параметр data задается в виде name1=value1!!name2=value2!!name3=value3... (разделен !! двумя восклицательными знаками). Например, при вызове loadLink('custom','class=mylink!!href=http://mysite.ru') будет найдена такая ссылка: <a href="http://mysite.ru" class="mylink">Мой сайт</a>. Доступны все виды поиска.
    • data - строковое значение: данные по которым производится поиск. Зависят от параметра searchKey.
    • index (необязательный) - числовое значение: определяет индекс ссылки начиная с нуля (среди соответствующих условиям поиска), по которой будет осуществлен переход. При отсутствии данного параметра переход осуществляется по первой найденной ссылке. Если значение этого параметра задать отрицательным значением, переход будет осуществлен по случайной ссылке.
    • events (необязательный) - логическое значение: true - отправлять ссылке события мыши перед переходом, false - запрет отправки событий. По умолчанию события отправляются. Также может быть задан строковым значением NoEvents, например, loadSiteLink('link','http',0,'NoEvents'), что запретит отправку событий mousedown, click и т.п.
    • callback (необязательный) - функция продолжения.
    • timeout (необязательный) - время в секундах, по прошествии которого будет вызвана функция, переданная в параметре callback.
    Возвращаемое значение: undefined.

    Примеры вызова:

    // 1. Переход по внутренней ссылке форума
    navigate('http://forum.webisida.com');
    wait(10000);
    loadSiteLink('link','viewtopic', -1);
    
  • Функции setText вставляют текст, заданный в параметре text, в элементы INPUT или TEXTAREA на странице в активной вкладке, либо выбирают указанное в параметре text значение из выпадающего списка SELECT.
    setText(formName, elementName, text, callback, timeout)
    setText(tag, searchInfo, text, index, callback, timeout)
    setText(element, text, callback, timeout)
    setText(selector, selectorData, text, callback, timeout)
    Аналог команды "Ввод текста" в статической презентации.
    • form - имя (атрибут name) или индекс формы, в которой находится элемент. Допустимо строковое или числовое значение.
    • element - имя (атрибут name) или индекс элемента в форме, в который требуется вставить текст. Допустимо строковое или числовое значение.
    • text - строка, содержащая текст, который необходимо вставить.
    • selector - строка, содержащая ключевое слово selector, определяющее поиск элемента по селектору.
    • selectorData - строка, содержащая один или более CSS—селекторов, разделённых запятой, необходимых для поиска текстового поля по селектору.
    • tag - тег элемента, в который требуется вставить текст. Допустимы значения input, textarea и select. Строковое значение.
    • searchInfo - строковое значение, содержащее данные для поиска элемента по его атрибутам в формате атрибут=значение_атрибута. Возможен поиск по нескольким атрибутам, в этом случае пары атрибут-значение должны быть разделены двумя восклицательными знаками (!!): атрибут_А=значение_атрибута_А!!атрибут_Б=значение_атрибута_Б.
    • index (необязательный) - порядковый номер элемента среди найденных (если не указан, выбирается элемент с индексом 0). Числовое значение.
    • callback (необязательный) - функция продолжения.
    • timeout (необязательный) - время в секундах, по прошествии которого будет вызвана функция, переданная в параметре callback.
    Возвращаемое значение: undefined.

    Примеры вызова:

    // 1. Поиск в Яндексе
    navigate('http://ya.ru/');
    wait(30000);
    setText(0, 'text', 'forum.webisida.com');
    wait(5000);
    submit(0);
    
    // 2. Поиск в Google
    navigate('https://www.google.ru/');
    wait(30000);
    setText(0, 'q', 'forum.webisida.com');
    submit();
    
    // 3. Поиск в Google
    activateTab(0);
    navigate('https://www.google.ru/');
    wait(30000);
    var q = document.getElementsByName('q').item(0);
    if(q) {
    	// вставка текста в строку поиска q
    	setText(q, 'forum.webisida.com');
    	submit();
    }
    
  • Функции typeIn выполняют посимвольный ввод текста, заданного в параметре text, в элементы с тегами INPUT или TEXTAREA, а также выбирают указанное в параметре text значение из выпадающего списка SELECT.
    Функция typeIn(text) предназначена для работы с текущим активным элементом на странице. Например, с текстовым полем, по которому предварительно был клик.
    Функция typeIn(formName, elementName, text, callback, timeout) предназначена для работы с любыми допустимыми элементами элементами, расположенными в формах.
    Функция typeIn(tag, searchInfo, text, index, callback, timeout) предназначена для работы с любыми допустимыми элементами.
    Функция typeIn(element, text, callback, timeout) предназначена для работы с допустимым переданным элементом.
    Функция typeIn(selector, selectorData, text, callback, timeout) предназначена для работы с любыми допустимыми элементами, найденными по селектору.

    • formName - имя (атрибут name) или индекс формы, в которой находится элемент. Допустимо строковое или числовое значение.
    • elementName - имя (атрибут name) или индекс элемента в форме, в который требуется ввести текст. Допустимо строковое или числовое значение.
    • text - текст, который необходимо ввести.
    • selector - строка, содержащая ключевое слово selector, определяющее поиск элемента по селектору.
    • selectorData - строка, содержащая один или более CSS—селекторов, разделённых запятой, необходимых для поиска текстового поля по селектору.
    • tag - тег элемента, в который требуется ввести текст. Допустимы значения input, textarea и select. Строковое значение.
    • searchInfo - cтроковое значение, содержащее данные для поиска элемента по его атрибутам в формате атрибут=значение_атрибута. Возможен поиск по нескольким атрибутам, в этом случае пары атрибут-значение должны быть разделены двумя восклицательными знаками (!!): атрибут_А=значение_атрибута_А!!атрибут_Б=значение_атрибута_Б.
    • index (необязательный) - порядковый номер элемента среди найденных (если не указан, выбирается элемент с индексом 0). Числовое значение.
    • callback (необязательный) - функция продолжения.
    • timeout (необязательный) - время в секундах, по прошествии которого будет вызвана функция, переданная в параметре callback.
    Возвращаемое значение: undefined.

    Примеры вызова:

    // 1. Поиск в Яндексе
    navigate('http://ya.ru/');
    wait(30000);
    // ввод текста в строку поиска
    typeIn(0, 'text', 'forum.webisida.com');
    wait(5000);
    submit(0);
    
    // 2. Поиск в Google
    navigate('https://www.google.ru/')
    wait(30000);	
    // ввод текста в строку поиска
    typeIn('input', 'name=q', 'forum.webisida.com');
    submit();
    
    // 3. Поиск в Google, ввод в выбранный скриптом элемент
    activateTab(0);
    navigate('https://www.google.ru/');
    wait(30000);
    var q = document.getElementsByName('q').item(0);
    if(q) {
    	// ввод текста в строку поиска q
    	typeIn(q, 'forum.webisida.com');
    	submit();
    }
    
    // 4. Поиск в Google, ввод текста в активный элемент
    navigate('https://www.google.ru/');
    wait(30000);
    // клик делает строку поиска активной
    click('input', 'name', 'q');
    wait(5000);
    // ввод текста в строку поиска
    typeIn('forum.webisida.com');
    wait(1000);
    click('button', 'number', '0');
    
    
  • Функции setFile выполняют выбор файла для элемента input[type=file].
    setFile(searchInfo, [index], fileUrl, extension)
    setFile(element, fileUrl, extension)
    • searchInfo - cтроковое значение, содержащее данные для поиска элемента по его атрибутам в формате атрибут=значение_атрибута. Возможен поиск по нескольким атрибутам, в этом случае пары атрибут-значение должны быть разделены двумя восклицательными знаками (!!): атрибут_А=значение_атрибута_А!!атрибут_Б=значение_атрибута_Б.
    • index (необязательный) - порядковый номер элемента среди найденных (если не указан, выбирается элемент с индексом 0). Числовое значение.
    • element - объект, предварительно найденный HTML-элемент с тегом INPUT и типом file (поле выбора файла) для которого нужно установить файл.
    • fileUrl - строковое значение, содержащее ссылку на файл весом до 5 мегабайт. Допустимы ссылки начинающиеся с HTTP:// или HTTPS://.
    • extension (необязательный) - строковое значение, содержащее расширение файла (например: jpg, png, gif). Расширения exe, lnk, com, cmd, bat, dll, pif не допустимы и будут проигнорированы.
    Возвращаемое значение: true - если файл был выбран, false - если файл не был выбран.

    Примеры вызова:

    // 1. Загрузка баннера на RGhost
    navigate('http://rghost.ru/');
    wait(15000);
    var imgUrl = 'http://static.webisida.com/files/webisida-468x60-005.gif';
    if(setFile('type=file', imgUrl, 'gif')) {
    	print('Картинка выбрана');
    } else {
    	print('Картинка не выбрана');
    }
    wait(5000);
    submit();
    
    // 2. Загрузка баннера на RGhost
    navigate('http://rghost.ru/');
    wait(15000);
    var imgUrl = 'http://static.webisida.com/files/webisida-468x60-005.gif';
    if(setFile('type=file', 0, imgUrl, 'gif')) {
    	print('Картинка выбрана');
    } else {
    	print('Картинка не выбрана');
    }
    wait(5000);
    submit();
    
    // 3. Загрузка баннера на RGhost
    navigate('http://rghost.ru/');
    wait(15000);
    var imgUrl = 'http://static.webisida.com/files/webisida-468x60-005.gif';
    var input = document.querySelector('input[type=file]');  
    if(setFile(input, imgUrl, 'gif')) {
    	print('Картинка выбрана');
    } else {
    	print('Картинка не выбрана');
    }
    wait(5000);
    submit();
    
  • Функции check отмечают флажок (input[type=checkbox]) или переключатель (input[type=radio]) на странице в активной вкладке.
    check(form, element, newState, callback, timeout)
    check(tag, searchInfo, newState, callback, timeout)
    check(selectorKey, selectorData, newState, callback, timeout)
    Аналог команды "Отметить флажок" в статической презентации.
    • form - имя (атрибут name) или индекс формы, в которой находится элемент. Допустимо строковое или числовое значение.
    • element - имя (атрибут name) или индекс элемента в форме, в который требуется ввести текст. Допустимо строковое или числовое значение.
    • tag - имя тега. Допустим только тег input.
    • searchInfo - cтроковое значение, содержащее данные для поиска элемента по его атрибутам в формате атрибут=значение_атрибута. Возможен поиск по нескольким атрибутам, в этом случае пары атрибут-значение должны быть разделены двумя восклицательными знаками (!!): атрибут_А=значение_атрибута_А!!атрибут_Б=значение_атрибута_Б.
    • selectorKey - строка, содержащая ключевое слово selector. Определяет поиск флажка или переключателя CSS-селектору.
    • selectorData - строка, содержащая допустимый CSS-селектор, позволяющий найти элемент.
    • newState - новое состояние. Логическое значение: true - если требуется отметить элемент, false - если нужно снять отметку.
    • callback (необязательный) - функция продолжения.
    • timeout (необязательный) - время в секундах, по прошествии которого будет вызвана функция, переданная в параметре callback.
    Возвращаемое значение: undefined.

    Примеры вызова:

    // 1. Автологин на форуме
    navigate('http://forum.webisida.com/ucp.php?mode=login');
    wait(10000);
    check(1, 'autologin', true);
    wait(10000);
    // <input name="autologin" type="checkbox" />
    check('input', 'name=autologin', false);
    
  • Функция submit(form, callback, timeout) отправляет форму, расположенную на странице в активной вкладке. Аналог команды "Отправить форму" в статической презентации.
    • form (необязательный) - имя (значение атрибута name) или индекс формы, которую требуется отправить. Допустимо строковое или числовое значение. Если параметр form не указан или указано ключевое слово =LAST=, то будет отправлена последняя форма, с которой работала программа.
    • callback (необязательный) - функция продолжения.
    • timeout (необязательный) - время в секундах, по прошествии которого будет вызвана функция, переданная в параметре callback.
    Возвращаемое значение: undefined.

    Примеры вызова:

    // 1. Поиск в Яндексе
    navigate('http://ya.ru/');
    wait(30000);
    setText(0, 'text', 'webisida.com');
    submit('=LAST=');
    
    // 2. Поиск в Яндексе
    navigate('http://ya.ru/');
    wait(30000);
    setText(0, 'text', 'webisida.com');
    submit();
    
  • Функции sendEvents выполняют поиск элемента на странице, загруженной в активную вкладку, и отправляют ему указанные события.
    sendEvents(tag, searchKey, data, events, index, callback, timeout)
    sendEvents(element, events, callback, timeout)
    Аналог команды "Отправить события" в статической презентации.
    • tag - название тега искомого элемента. Строковое значение.
    • searchKey - ключ поиска, строка, принимающая одно из следующих значений:
      • id – поиск элемента по ID, тогда параметр data - искомый идентификатор или его часть, в зависимости от текущего вида поиска.
      • link – поиск ссылки по её части, тогда параметр tag должен быть тегом, обозначающим ссылку (т.е. 'A'), а data - часть искомой ссылки. Доступны все виды поиска.
      • number – поиск элемента по его порядковому номеру в документе, data - порядковый номер, начиная с нуля. Внимание: параметр data должен быть задан как строка, содержащая число. Например, вызов функции sendEvents('a','number','2','click'); заставит программу пропустить 2 первые найденные ссылки и отправить событие click третьей. Тогда как вызов функции sendEvents('a','number',2,'click'); создаст исключение с сообщением о недопустимом параметре data.
      • text – поиск объекта по части текста, содержащегося в свойстве innerHTML, data – часть искомого текста. Доступны все виды поиска.
      • name – поиск объекта по его имени (атрибут name), data – часть имени элемента. Доступны все виды поиска.
      • last – выбор последнего элемента, найденного ранее функциями text, check или sendEvents, параметр data игнорируется, но его ввод обязателен.
      • selector – поиск элемента по CSS-селектору, параметр data должен быть допустимым CSS-селектором. Например, при вызове sendEvents('input', 'selector', 'div.row [name=text]', 'click') событие click будет отправлено текстовому полю с именем text, расположенному внутри элемента div с классом row, например такому: <div class="row"> ... <input type="text" name="text" /> ... </div>.
      • custom – поиск объекта по атрибутам, для которых не создано отдельных команд (например title, class и т.п.), параметр data вводится в виде строки в формате name=value, где name – имя атрибута, value – часть значения этого параметра. Возможен поиск по нескольким атрибутам, в этом случае параметр data задается в виде name1=value1!!name2=value2!!name3=value3... (разделен !! двумя восклицательными знаками). Например, при вызове sendEvents('input','custom','class=btn!!type=button','click') событие click будет отправлено такой кнопке: <input type="button" class="btn" value="кнопка" />. Доступны все виды поиска.
    • data - строковое значение: данные по которым производится поиск. Зависят от параметра searchKey.
    • events - строковое значение: допустимое для элемента событие, такое как click, mousedown, keydown и др. Если требуется отправить несколько событий, они должны быть разделены двумя восклицательными знаками (!!), например, sendEvents('a','link','http','mousedown!!mouseup!!click').
    • index (необязательный) - числовое значение: определяет индекс элемента начиная с нуля (среди соответствующих условиям поиска), которому будут отправлены события. При отсутствии данного параметра событие будет отправлено первому удовлетворяющему условиям поиска элементу. Если значение этого параметра задать отрицательным значением, из найденных объектов будет выбран один случайный.
    • element – предварительно найденный HTML-элемент, которому нужно отправить событие.
    • callback (необязательный) - функция продолжения.
    • timeout (необязательный) - время в секундах, по прошествии которого будет вызвана функция, переданная в параметре callback.
    Возвращаемое значение: undefined.

    Примеры вызова:

    // 1. Отправка события click случайной ссылке на форуме,
    // содержащей в адресе слово viewtopic
    navigate('http://forum.webisida.com');
    wait(30000);
    sendEvents('a', 'link', 'viewtopic', 'click', -1);
    
    // 2. Отправка события click ссылке Инструкции
    navigate('http://forum.webisida.com');
    wait(30000);
    var links = document.getElementsByTagName('a');
    for (var i = links.length - 1; i >= 0; i--) {
    	var a = links[i];
    	if (a.innerHTML == 'Инструкции') {
    		sendEvents(a, 'click');
    		break;
    	}
    }
    
  • Функция clearStorage(storageType, domain, domain, ...) очищает сохраненные данные идентификации: cookie, хранилище Flash LSO, IndexedDB, кэш, историю. Аналог команды "Очистить cookie" в статической презентации.
    • storageType (необязательный) - строковое значение, тип очищаемого хранилища. Допустимые значения (возможно перечисление через запятую):
      • all - все хранилища. Используется в качестве значения по умолчанию.
      • cookie - куки.
      • flash - Flash LSO.
      • indexedDB - IndexedDB.
      • cache - кэш.
      • history - история.
    • domain (необязательный) - домен, для которого производится очистка. По умолчанию удаляются данные для всех доменов.
    Возвращаемое значение: undefined.

    Примеры вызова:

    // 1. Очистка всех данных.
    clearStorage();
    
    // 2. Очистка всех данных.
    clearStorage('all');
    
    // 3. Очистка кук, кэша и истории
    clearStorage('cookie,cache,history');
    
    // 4. Удаление кук и содержимого Flash LSO для сайта example.com
    clearStorage('cookie,flash', 'example.com');
    
    // 5. Удаление кук и содержимого Flash LSO для сайтов example.com и site.ru
    clearStorage('cookie,flash', 'example.com', 'site.ru');
    
  • Функция post(url, data, referrer, callback, timeout) выполняет загрузку в активную вкладку страницы по адресу, заданному в параметре url, используя метод POST для передачи этой странице данных data в кодировке application/x-www-form-urlencoded. Аналог команды "Переход POST" в статической презентации.
    • url - строковое значение, адрес страницы на которую будут отправлены данные и выполнен переход.
    • data - строковое значение, URI-кодированные данные, которые требуется отправить. Для кодирования частей данных можно воспользоваться функцией encodeURIComponent.
    • referrer (необязательный) - адрес страницы-реферера. Чтобы передать в качестве реферера адрес текущей страницы, укажите ключевое слово CURRENT. Если значение отсутствует, то будет выполнен прямой переход.
    • callback (необязательный) - функция продолжения.
    • timeout (необязательный) - время в секундах, по прошествии которого будет вызвана функция, переданная в параметре callback.
    Возвращаемое значение: undefined.

    Примеры вызова:

    /* 1. Имитация отправки формы
    *	<form method="post" action="http://www.site.ru/login.php">
    *		<input name="user" value="Admin"/>
    *		<input name="pass" value="123" type="password"/>
    *		<input type="submit"/>
    *	</form>
    *************************************************/
    // создаем данные
    var data = 'user=' + encodeURIComponent('Admin') 
    			+ '&pass=' + encodeURIComponent('123');
    // оправляем их и ждем 30 сек., чтобы загрузилась страница
    post('http://example.com/', data);
    wait(30000);
    print('данные отправлены, страница загружена');
    
  • Функции click выполняют клик по объекту с помощью функций операционной системы.
    click(tag, searchKey, data, index, clickRectangle, moveClickTime, target, callback, timeout)
    click(element, clickRectangle, moveClickTime, target, callback, timeout)
    click(viewport, searchKey, data, callback, timeout) - клик по координатам.
    Объект воспринимает клик как исходящий от пользователя и производит соответствующие действия, например переходит по ссылке или отправляет форму. Функция выполняется асинхронно, выполнение имитации перемещения мыши из случайной точки и последующего клика занимает около 4-5 секунд (время можно менять). Аналог команды "Клик" в статической презентации.
    • tag - название тега искомого элемента. Строковое значение.
    • searchKey - ключ поиска, строка, принимающая одно из следующих значений:
      • id – поиск элемента по ID, тогда параметр data - искомый идентификатор или его часть, в зависимости от текущего вида поиска.
      • link – поиск ссылки по её части, тогда параметр tag должен быть тегом, обозначающим ссылку (т.е. 'A'), а data - часть искомой ссылки. Доступны все виды поиска.
      • number – поиск элемента по его порядковому номеру в документе, data - порядковый номер, начиная с нуля. Внимание: параметр data должен быть задан как строка, содержащая число. Например, вызов функции click('a','number','2'); заставит программу пропустить 2 первые найденные ссылки и кликнуть по третьей. Тогда как вызов функции click('a','number',2); создаст исключение с сообщением о недопустимом параметре data.
      • text – поиск объекта по части текста, содержащегося в свойстве innerHTML, data – часть искомого текста. Доступны все виды поиска.
      • name – поиск объекта по его имени (атрибут name), data – часть имени элемента. Доступны все виды поиска.
      • last – выбор последнего элемента, найденного ранее функциями text, check или sendEvents, параметр data игнорируется, но его ввод обязателен.
      • selector – поиск элемента по CSS-селектору, параметр data должен быть допустимым CSS-селектором. Например, при вызове click('input', 'selector', 'div.row input.button') будет совершен клик по элементу с тегом input и классом button, расположенному внутри элемента div с классом row, например такому: <div class="row"> ... <input type="submit" class="button" /> ... </div>.
      • custom – поиск объекта по атрибутам, для которых не создано отдельных команд (например title, class и т.п.), параметр data вводится в виде строки в формате name=value, где name – имя атрибута, value – часть значения этого параметра. Возможен поиск по нескольким атрибутам, в этом случае параметр data задается в виде name1=value1!!name2=value2!!name3=value3... (разделен !! двумя восклицательными знаками). Например, при вызове click('input','custom','class=btn!!type=button') клик будет совершен по такой кнопке: <input type="button" class="btn" value="кнопка" />. Доступны все виды поиска.
    • data - строковое значение: данные по которым производится поиск. Зависят от параметра searchKey.
    • index (необязательный) - числовое значение: определяет индекс элемента начиная с нуля (среди соответствующих условиям поиска), которому будут отправлены события. При отсутствии данного параметра событие будет отправлено первому удовлетворяющему условиям поиска элементу. Если значение этого параметра задать отрицательным значением, из найденных объектов будет выбран один случайный.
    • clickRectangle (необязательный) – строковое значение, задает в искомом объекте прямоугольник, в пределах которого будет произведен клик. Требуется, если имеет значение, в какой точке объекта должен быть выполнен клик (например, чтобы начать воспроизведение флеш-ролика, требуется нажать на кнопку Play). Отсутствие значения определяет клик в любой точке объекта. Вводится в формате x:y:width:height, где x и y обозначают координату начальной точки прямоугольника, в пределах которого должен быть произведен клик, width и height – ширина и высота прямоугольника. Значения вводятся в пикселях. Если требуется оставить значение по умолчанию, введите null.
      Например, нам нужно кликнуть по флеш-плееру, который обозначен HTML-элементом с тегом embed, атрибут элемента id имеет значение movie_player, размеры флеш-плеера: 640x390 пикселей, верхний левый угол кнопки Play находится в точке (0;365), при отсчете Х слева (0), а Y сверху (365), и она имеет размер 55x25 пикселей. Тогда функция может быть вызвана следующим образом: click('embed','id','movie_player',0,'0:365:55:25');.
    • moveClickTime (необязательный) - строковое значение, параметры времени клика. Следует вводить только при отличиях от принятых значений по умолчанию. Вводится в формате moveTime:clickTime, где moveTime (в миллисекундах) – время перемещения мыши из случайной точки вне браузера на точку клика в заданном объекте (3000 мс по умолчанию), clickTime (в миллисекундах) – время от завершения перемещения мыши до нажатия левой кнопки, по умолчанию выбирается случайное значение от 150 до 700 мс. Если требуется оставить значение по умолчанию, введите null.
      Пример ввода, 2.5 секунды (2500 мс.) на перемещение мыши, и 0.8 секунды (800 мс.) на клик: click('embed','id','movie_player',0,null,'2500:800');
    • target (необязательный) - строковое значение: значение, на которое заменяется значение атрибута target у ссылки, по умолчанию – _top (чтобы предотвратить попытку открытия ссылки в новом окне). Введите ключевое слово ORIGIN, чтобы отключить автозамену.
      Пример 1: click('a','link','http',0,null,null,'_blank');
      Пример 2: click('a','link','http',0,null,null,'ORIGIN'); - не изменять target у ссылки
    • element – предварительно найденный HTML-элемент, по которому нужно кликнуть.
    • viewport - ключевое слово viewport, определяющее совершение клика по координатам в видимой области окна. Параметр data должен быть передан в виде строки в формате xAlign:yAlign:width:height, определяющем прямоугольник для совершения клика в видимой части страницы, где
      • xAlign - координата X левого края прямоугольника или одно из ключевых слов, определяющих привязку прямоугольника по оси X. Допустимы ключевые слова left (привязка к левому краю), center (привязка к центру), right (привязка к правому краю).
      • yAlign - координата Y верхнего края прямоугольника или одно из ключевых слов, определяющих привязку прямоугольника по оси Y. Допустимы ключевые слова top (привязка к верху), center (привязка к центру), bottom (привязка к низу).
      • width - ширина прямоугольника или ключевое слово width для подстановки значения, равного ширине окна. Значение, определяющее ширину прямоугольника должно быть не менее 1 (единицы).
      • height - высота прямоугольника или ключевое слово height для подстановки значения, равного высоте окна. Значение, определяющее высота прямоугольника должно быть не менее 1 (единицы).
    • callback (необязательный) - функция продолжения.
    • timeout (необязательный) - время в секундах, по прошествии которого будет вызвана функция, переданная в параметре callback.
    Возвращаемое значение: undefined.

    Примеры вызова:

    // 1. Клик по ссылке на форуме
    navigate('http://forum.webisida.com');
    wait(30000);
    click('a','link','viewtopic', -1);
    
    // 2. Клик по плееру на YouTube
    // переходим к плееру
    navigate('http://www.youtube.com/');
    wait(30000);
    loadLink('link', 'watch', -1);
    wait(30000);
    click('object', 'id', 'movie_player', 0, '0:365:55:25');
    
    // 3. Клик по предварительно найденному элементу - плееру
    // переходим к плееру
    navigate('http://www.youtube.com/');
    wait(30000);
    loadLink('link', 'watch', -1);
    wait(30000);
    // находим плеер с помощью JavaScript
    var player = document.getElementById('movie_player');
    // кликаем
    click(player, '0:365:55:25');
    
    // 4. Клик по координатам
    navigate('http://forum.webisida.com');
    wait(10000);
    click('viewport', 'custom', 'center:center:1:1'); // в центре окна
    click('viewport', 'custom', '100:100:1:1'); // в точке (100; 100)
    click('viewport', 'custom', '0:0:width:height'); // в любой точке
    click('viewport', 'custom', 'right:bottom:100:100'); // справа снизу
    
  • Функции setFrame изменяют фрейм, в котором будет производиться поиск элементов на странице в активной вкладке.
    setFrame(data)
    setFrame(frameElement)
    По умолчанию функции презентации работают с основной загруженной страницей (основным фреймом). Если страница содержит вложенные фреймы, то, к примеру, функция loadLink не найдет ссылки, содержащейся во фрейме. Этого можно избежать, если изменить фрейм, с которым работает программа.
    Аналог команды "Изменить фрейм" в статической презентации.
    Список функций, выполнение которых зависит от текущего фрейма: loadLink, loadSiteLink, setText, check, submit, sendEvents, click.
    • frameElement - элемент с тегом FRAME или IFRAME.
    • data - целочисленное или строковое значение, данные на основании которых производится выбор фрейма.
      • TOP – главный фрейм страницы (основной документ).
      • Идентификаторы фрейма. Указание нескольких идентификаторов, разделенных !! (двумя восклицательными знаками), позволяет получить доступ к вложенным фреймам, т.е. если в главном документе содержится один фрейм, а в этом фрейме содержатся еще два фрейма, из которых нам нужен второй, то параметр команды должен быть задан значением 0!!1 (нумерация фреймов начинается с нуля).

        Идентификатор может принимать следующие значения:

        • Число – номер фрейма (на текущем уровне вложенности), начинающийся с нуля. При числа 5 будет найден шестой по счету фрейм документа. Пример вызова: frame('5');
        • url=URL, где вместо URL нужно ввести часть адреса, которая должна содержаться в искомом фрейме. При вводе параметра url=mysite.ru будет найден, к примеру, такой фрейм: <iframe src="http://www.mysite.ru?12345">.
        • url==URL, где вместо URL нужно ввести точный адрес (совпадающий по каждому символу) искового фрейма. При вводе параметра url==http://www.mysite.ru/ будет найден ТОЛЬКО ТАКОЙ фрейм: <iframe src="http://site.com/">.
        • name=NAME, где вместо NAME нужно ввести часть имени искомого фрейма. При вводе параметра name=fra будет найден, к примеру, такой фрейм: <iframe name="megaframe" src="http://mysite.ru">.
        • name==NAME, где вместо NAME нужно ввести точное имя фрейма. При вводе параметра name==megaframe будет найден ТОЛЬКО фрейм: <iframe name="megaframe" src="http://mysite.ru/?12345">
        • selector;selectorData, где вместо selectorData нужно ввести значение CSS-селектора, по которому можно найти фрейм. При вызове setFrame('selector;iframe[src*=example]') будет выбран фрейм, в который загружен документ, в адресе которого содержится слово example. Например такой: <iframe src="http://example.com"></iframe>
        • custom;attributeName=attributeValue, iframe;attributeName=attributeValue, или frame;attributeName=attributeValue, где attributeName - название атрибута, attributeValue - значение атрибута. Например, при вводе параметра custom;id=frame12345 будет выбран фрейм: <iframe id="frame12345" src="">

        Пример использования

        Задача: нам нужно вызвать функцию link, чтобы перейти по ссылке <a href="http://www.mysite.com" onclick="click_handler()">Ссылка</a>, находящейся во фрейме <iframe name="frame2" src="http://mysite.ru/frame.php">. Мы точно знаем, что нам нужен фрейм с именем frame2 или URL http://site.com/frame.php. Какой способ поиска фрейма использовать, в данном примере значения не имеет. Поиск по параметрам name==frame2 и url=frame.php сработает одинаково.

        Предпочтительнее использовать поиск по имени фрейма. Следовательно нужно написать подобный JavaScript-код:

        // 1. Изменение фрейма по его имени
        setFrame('name==frame2');
        // Переходим по ссылке
        loadLink('link','mysite');
        
        // 2. Изменение фрейма на выбранный скриптом
        var frame = window.getElementsByTagName('iframe')[0];
        setFrame(frame);
        

        Примечание 1. При поиске фреймов используется регистронезависимое сравнение данных.

        Примечание 2. Для изучения фреймовой структуры документа вы можете использовать такие средства, как дополнение для Firefox под названием Firebug, встроенные инструменты браузеров, либо в нужный момент нажать на кнопку "Фреймы" в программе для тестирования презентации, и в окно протокола будут записаны результаты изучения фреймовой структуры.

    Возвращаемое значение: undefined.
  • Функция clearTab(tabIndex) очищает указанную вкладку.
    • tabIndex - числовое значение, номер вкладки. Может принимать значения 0, 1, 2 или 3.
    • callback (необязательный) - функция продолжения, которая будет вызвана после активации указанной вкладки.
    • timeout (необязательный) - время в секундах, по прошествии которого будет вызвана функция, переданная в параметре callback.
    Возвращаемое значение: undefined.

    Примеры вызова:

    // 1. Переход на Яндекс и очистка вкладки
    activateTab(0);
    navigate('http://ya.ru');
    wait(30000);
    clearTab(0);
    
    // 2. Переход на Яндекс, очистка, переход на Google.
    activateTab(0);
    navigate('http://ya.ru');
    wait(30000);
    clearTab(0);
    wait(5000);
    navigate('http://google.com');
    
  • Функции getWindow возвращают объект типа Window - контекст указанной вкладки или фрейма.
    getWindow(tabIndex)
    getWindow(document)
    getWindow(frameElement)
    Если для вкладки был установлен фрейм путем вызова функции setFrame, то getWindow(tabIndex) возвратит контекст этого фрейма.
    Обратите внимание: при переходах контекст и все зависимые от него объекты могут быть уничтожены. Для дальнейшей работы со вкладкой после любой новой загрузки страницы во вкладку объект Window нужно получать заново, как и все зависимые от него объекты.
    • tabIndex (необязательный) - числовое значение, номер вкладки. Может принимать значения 0, 1, 2 или 3. Если параметр tabIndex опущен, по умолчанию возвращается объект Window для основной (нулевой) вкладки.
    • document - документ, загруженный во вкладку или фрейм.
    • frameElement - элемент с тегом FRAME или IFRAME, для которого нужно получить контекст.
    Возвращаемое значение: объект типа Window - контекст указанной вкладки или фрейма.

    Примеры вызова:

    // 1. Получение контекста основной вкладки
    var aWindow = getWindow(0);
    aWindow.document.body.innerHTML = 'Этот текст будет виден в основной вкладке';
    
    // 2. Получение контекста для элемента IFRAME
    var frame = aWindow.document.getElementsByTagName('iframe')[0];
    var frameWindow = getWindow(frame.contentDocument);
    frameWindow.document.body.innerHTML = 'Этот текст будет виден внутри фрейма';
    
    // 3. Получение контекста для элемента IFRAME
    var frame = aWindow.document.getElementsByTagName('iframe')[0];
    var frameWindow = getWindow(frame);
    frameWindow.document.body.innerHTML = 'Этот текст будет виден внутри фрейма';
    
    // 4. Повторное получение контекста после перехода
    var aWindow, document, count;
    navigate('http://forum.webisida.com');
    wait(15000);
    aWindow = getWindow(0);
    document = aWindow.document;
    count = aWindow.document.getElementsByTagName('a').length;
    print('Ссылок на странице: ' + count);
    navigate('http://ya.ru');
    wait(15000);
    aWindow = getWindow(0);
    count = aWindow.document.getElementsByTagName('a').length;
    print('Ссылок на странице: ' + count);
    try {
    	// при выполнении этого кода возникнет ошибка
    	count = document.getElementsByTagName('a').length;
    	print('Эту надпись вы не найдете отчете');
    } catch(e) {
    	print('Вот такая вот ошибка: ' + e);
    }
    
  • Функция print(message) выводит сообщение message в журнал выполнения презентации.
    • message (необязательный) - сообщение. Может быть значением любого типа. Если не указано, в журнал выводится пустая строка.
    Возвращаемое значение: undefined.

    Примеры вызова:

    // 1. Вывод сообщения в журнал
    print('начало презентации');
    
  • Функция clearLog() очищает журнал выполнения презентации.
    Возвращаемое значение: undefined.
  • Функция pause(timeout, callback) добавляет переданную в параметре callback функцию в очередь исполнения так, чтобы она была вызвана по истечении интервала времени, переданного в параметре timeout и отсчитываемого с момента вызова функции pause. Если параметр callback не задан, функция приостановит выполнение текущего кода скрипта, аналогично вызову функции wait(timeout * 1000).
    Обратите внимание: JavaScript всегда выполняется в однопоточном режиме, поэтому функция, переданная в параметре callback, в некоторых случаях начнет выполняться не строго через указанный промежуток времени, а несколько позже. Причина такого поведения в том, что в момент истечения интервала в потоке исполнения может выполняться какой-либо другой код.
    • timeout - положительно целое число, определяющее интервал времени (в секундах) - паузу.
    • callback - функция продолжения, которая будет вызвана после паузы.
    Возвращаемое значение: undefined.

    Примеры вызова:

    // 1. Вывод сообщения в журнал через 10 сек. после начала
    print('Ждем 10 секунд...');
    pause(10, function(aWindow) {
    	print('Прошло не менее 10 секунд');
    });
    print('Можем выполнить еще какой-то код...');
    
    // 2. Вывод сообщения в журнал через 10 сек. после начала
    print('Ждем 10 секунд...');
    pause(10);
    print('Прошло не менее 10 секунд');
    
  • Функция stop(exit) останавливает выполнение презентации.
    • exit (необязательный) - логическое значение. Если требуется остановить выполнение динамической презентации, но просмотр сайта должен быть продолжен, передайте в качестве параметра значение false или не указывайте его, например, stop();. Если требуется остановить выполнение презентации и завершить просмотр сайта, укажите в качестве параметра exit значение true.
      Внимание: минимальное время просмотра - 30 секунд, поэтому просмотр будет моментально остановлен, только если прошло более 30 секунд после начала презентации. В противном случае, несмотря на то, что выполнение презентации будет остановлено, прерывание просмотра будет отложено и он будет прерван по прошествии 30 секунд с начала презентации.
      В случае прерывания, оплата за просмотр взимается за фактически использованное время, но не менее, чем за 30 секунд просмотра.
    Возвращаемое значение: undefined.

    Примеры вызова:

    // 1. Остановка выполнения скрипта презентации
    print('Останавливаем презентацию');
    stop();
    print('Этого текста не будет в журнале');
    
    // 2. Остановка выполнения скрипта презентации
    // и завершение посещения (для корректной работы
    // этого примера поставьте время выполнения презентации
    // не менее, чем 45 сек.). Презентация остановится
    // сразу же, после выполнения функции stop.
    wait(35000); // ждем 35 сек.
    print('Останавливаем презентацию');
    stop(true);
    print('Этого текста не будет в журнале');
    
    // 3. Остановка выполнения скрипта презентации
    // и завершение просмотра (для корректной работы
    // этого примера поставьте время выполнения презентации
    // не менее, чем 45 сек.). Несмотря на то, что
    // выполнение кода будет остановлено через 15 секунд, 
    // просмотр будет завершен только когда пройдет 30 сек.
    // с момента запуска презентации.
    wait(15000); // ждем 15 сек.
    print('Останавливаем презентацию');
    stop(true);
    print('Этого текста не будет в журнале');
    
  • Функции screenshot создают скриншот элемента или указанной части страницы в активной вкладке.
    screenshot()
    screenshot(x, y, width, height, format, saveToDisk)
    screenshot(element, format, saveToDisk)
    Созданное изображение кодируется в формат BASE64 и сохраняется в виде строки в переменную vars.screenshot. При вызове без параметров будет создан скриншот видимой в момент вызова части страницы, ограниченной рамками окна.
    • imageElement - элемент с тегом IMG, содержащий изображение, скриншот которого требуется получить.
    • x, y - координаты левого верхнего угла прямоугольника в видимой части страницы, в пределах которого должен быть сделан снимок страницы.
    • width, height - ширина и высота прямоугольника в пределах которого должен быть сделан снимок страницы.
    • format (необязательный) - строковое значение, один из следующих форматов: gif, png, jpg, bmp. По умолчанию: jpg.
    • saveToDisk (необязательный) - логическое значение. При установке значения true сохраняет копию скриншота в папке с программой тестирования. Работает только в режиме тестирования, в рабочем режиме - игнорируется. Скриншот всегда сохраняется в файле screenshot.png в формате PNG вне зависимости от формата, определенного в параметре format.
    Возвращаемое значение: строковое значение, содержащее изображение, закодированное в BASE64.

    Примеры вызова:

    // 1. Cкриншот логотипа Google c сохранением на диск
    navigate('https://www.google.ru/search?q=test');
    wait(10000);
    screenshot(0, 0, 100, 100, null, true);
    
    // 2. Скриншот логотипа Google в формате GIF
    navigate('https://www.google.ru/search?q=test');
    wait(10000);
    screenshot(0, 0, 100, 100, 'gif');
    // вывод логотипа, закодированного в BASE64, в журнал
    print(vars.screenshot);
    
    // 3. Скриншот логотипа Google и вывод его в журнал
    navigate('https://www.google.ru/search?q=test');
    wait(10000);
    print(screenshot(0, 0, 100, 100));
    
  • Функции распознавания текста на изображении c помощью сервисов, поддерживающих Antigate API,
    recognize(element, key, callback)
    recognize(base64Image, key, callback)
    recognize(x, y, width, height, key, callback)
    recognize(element, params, callback)
    recognize(base64Image, params, callback)
    recognize(questionOrNull, params, callback)
    recognize(x, y, width, height, params, callback)
    выполняют отправку изображения, созданного на основе переданных параметров, сервису распознавания текста (anti-captcha.com (antigate.com), ruCaptcha.com, Captcha24.com, Pixodrom.com, CaptchaBot.com, cptch.net или другому, поддерживающему Antigate API). По завершении распознавания сохраняют полученный текст в переменную vars.recognizedText и вызывают функцию, переданную в параметре callback. В случае, если параметр callback не задан, выполнение скрипта приостанавливается до получения ответа от сервиса, выполняющего распознавание.
    • element - элемент, содержащий изображение, на котором требуется распознать текст. В случае распознавания капчи Google ReCaptcha v2.0 в качестве данного аргумента может быть передан фрейм, содержащий набор картинок для выбора.
    • base64Image - строковое значение, содержащее изображение закодированное в BASE64.
    • questionOrNull - строка, содержащая ключевое слово question, или null, означающие, что сервису распознавания должен быть отправлен вопрос, переданный в параметре params.comment.
    • x, y - координаты левого верхнего угла прямоугольника в видимой части страницы, в пределах которого должен быть сделан снимок страницы для распознания текста на этом скриншоте.
    • width, height - ширина и высота прямоугольника, в пределах которого должен быть сделан снимок страницы для распознания текста на этом скриншоте.
    • key - ключ доступа к сервису распознавания.
    • params - объект, предоставляющий расширенную информацию об изображении и настройки сервиса распознавания.
      Формат объекта params (со значениями по умолчанию):
      var params = {
      	save: false, // сохранение изображения на диск при тестировании
      	format: 'jpg', // формат сохраняемого изображения
      	words: 0, // количество слов (0 - неизвестно),
      	minlen: 0, // минимальная длина текста на изображении (0 - неизвестно)
      	maxlen: 0, // максимальная длина текста на изображении (0 - неизвестно)
      	consistency: 0, // состав текста: 0 - любые символы, 1 - только цифры, 2 - нет цифр
      	ignoreCase: false, // регистр символов: true - не важен, false - учитывать регистр 
      	expression: false, // изображено математическое выражение: true - да, false - нет
      	cyrillic: false, // присутствие символов кириллицы: true - да, false - нет
      	submit: true, // автоподтверждение после распознавания капчи Google ReCaptcha v2.0 
      	timeout: 600000, // максимальное время распознавания в миллисекундах
      	service: 'http://antigate.com', // адрес сервиса распознавания
      	strictApi: false, // строгое соответствие Antigate API
      	question: false, // на изображении задан вопрос, работник должен написать ответ (для ruCaptсha) 
      	comment: null, // пояснительный текст для капчи или вопрос
      	key: '' // ключ сервиса распознавания
      };
      
    • callback (необязательный) - функция продолжения, которая будет вызвана после получения ответа от сервиса распознавания изображений.
    Возвращаемое значение: строка, содержащая либо изображение, закодированное в BASE64, если задан параметр callback, либо распознанный текст или null, если параметр callback не задан.

    Примеры вызова (см. также дополнительные примеры на BitBucket.org):

    // Распознавание Google ReCaptcha v1.0 
    var antigateKey = 'f90e012df680dbff0d5e8e2e8f0fc91d'; // Ключ сервиса
    
    navigate('https://www.google.com/recaptcha/demo/');
    wait(5000);
    var image = document.querySelector('img[src*=recaptcha]'); // поиск капчи
    
    
    // 1. Синхронное распознавание с помощью сервиса Antigate.com
    var aText = recognize(image, antigateKey);
    if(aText) {
    	print('Текст на капче: ' + aText);
    	setText(document.querySelector('input[name=recaptcha_response_field]'), aText);
    } else {
    	print('Текст не был распознан!');
    }
    
    // 2. Синхронное распознавание с помощью сервиса ruCaptcha.com
    var rucaptchaKey = 'f90e012df680dbff0d5e8e2e8f0fc91d';
    var aText = recognize(image,  { service: 'http://rucaptcha.com', key: rucaptchaKey });
    if(aText) {
    	print('Текст на капче: ' + aText);
    	setText(document.querySelector('input[name=recaptcha_response_field]'), aText);
    } else {
    	print('Текст не был распознан!');
    }
    
    // 3. Синхронное распознавание с помощью сервиса Сaptcha24.com
    var captcha24Key = 'f90e012df680dbff0d5e8e2e8f0fc91d';
    var aText = recognize(image,  { service: 'http://captcha24.com', key: captcha24Key });
    if(aText) {
    	print('Текст на капче: ' + aText);
    	setText(document.querySelector('input[name=recaptcha_response_field]'), aText);
    } else {
    	print('Текст не был распознан!');
    }
    
    // 4. Асинхронное распознавание с помощью сервиса Antigate.com
    recognize(image, antigateKey, function () {
    	// Если сервис распознал текст, vars.recognizedText содержит результат
    	if (vars.recognizedText) {
    		print('Текст на капче: ' + vars.recognizedText);
    		setText(document.querySelector('input[name=recaptcha_response_field]'), vars.recognizedText);
    	} else {
    		print('Текст не был распознан!');
    	}
    });
    
    // 5. Асинхронное распознавание с помощью сервиса Pixodrom.com
    var pixodromKey = 'f90e012df680dbff0d5e8e2e8f0fc91d';
    recognize(image, { service: 'http://pixodrom.com', key: pixodromKey }, function () {
    	// Если сервис распознал текст, vars.recognizedText содержит результат
    	if (vars.recognizedText) {
    		print('Текст на капче: ' + vars.recognizedText);
    		setText(doc.querySelector('input[name=recaptcha_response_field]'), vars.recognizedText);
    	} else {
    		print('Текст не был распознан!');
    	}
    });
    

    Примечание 1. В данный момент распознавание капчи «Я не робот» поддерживается только при работе с сервисами anti-captcha.com, ruCapctha.com и cptch.net. В аргументе element функции recognize должен быть передан фрейм или любой блок, содержащий набор изображений для выбора. После успешного распознавания программа постарается автоматически отметить выбранные изображения.

    Пример распознавания капчи «Я не робот» (см. также дополнительные примеры на BitBucket.org):

    // Распознавание Google ReCaptcha v2.0 
    var rucaptchaKey = 'f90e012df680dbff0d5e8e2e8f0fc91d'; // Ключ сервиса ruCaptcha
    
    navigate('http://www.google.com/recaptcha/api2/demo');
    wait(5, 10);
    
    setFrame('selector;iframe[src*=recaptcha\\/api2\\/anchor]');
    click('div', 'selector', 'div.recaptcha-checkbox-checkmark');
    
    var recaptcha2 = document.querySelector('iframe[src*=recaptcha\\/api2\\/frame]');
    if (recaptcha2 != null) {
    	recognize(recaptcha2, {
    		service: 'rucaptcha.com',
    		timeout: 60000, // капча изменяется, нет смысла ждать более 60 сек.
    		key: rucaptchaKey
    	});
    }
    
  • Функции решения капчи «Я не робот» с помощью сервисов anti-captcha.com, ruCapctha.com и cptch.net
    solveRecaptcha(element, key)
    solveRecaptcha(element, params)
    выполняют отправку ключа капчи «Я не робот» сервису решения такого вида капчи, а затем пытаются записать полученное от сервиса решение в поле с именем g-recaptcha-response, предназначенное для передачи проверочного кода сайту.
    • element - элемент, содержащий атрибут data-sitekey в котором размещен ключ капчи «Я не робот». Допустимо значение null – в этом случае программа попытается самостоятельно найти ключ для капчи в атрибуте data-sitekey элемента, содержащего капчу. При передаче значения null ключ также может быть задан через параметр params.siteKey.
    • key - ключ доступа к сервису распознавания.
    • params - объект, позволяющий задать расширенные настройки
      Формат объекта params (со значениями по умолчанию):
      var params = {
      	service: 'antigate', // сервис распознавания
      	timeout: 600000, // максимальное время ожидания ответа в миллисекундах
      	copyToTextArea: true, // ввод ответа в поле g-recaptcha-response (true - ввести, false - не вводить)
      	siteKey: '', // ключ для создания капчи (из атрибута data-sitekey)
      	siteUrl: 'URL активного фрейма', // адрес страницы с капчей (требуется, если указан siteKey)
      	secure: false, // использование HTTPS при общении с сервисом решения капчи (true - да, false - нет)
      	key: '' // ключ сервиса распознавания
      };
      

      Допустимые значения для параметра params.service:

    Возвращаемое значение: строка, содержащая код решения, отправляемый в поле g-recaptcha-response или null, если капчу решить не удалось.

    Пример решения капчи «Я не робот» (см. также дополнительные примеры на BitBucket.org):

    // 1. Решение капчи 'Я не робот' 
    var antigateKey = 'f90e012df680dbff0d5e8e2e8f0fc91d'; // ключ для anti-captcha.com
    navigate('https://www.google.com/recaptcha/api2/demo');
    wait(5000);
    var code = solveRecaptcha(null, antigateKey);
    if (code != null) {
    	click('input', 'id', 'recaptcha-demo-submit');
    } else {
    	print('Капча не пройдена');
    }
    
    // 2. Решение капчи 'Я не робот' 
    var antigateKey = 'f90e012df680dbff0d5e8e2e8f0fc91d'; // ключ для anti-captcha.com
    navigate('https://www.google.com/recaptcha/api2/demo');
    wait(5000);
    var code = solveRecaptcha(null, {
    	key: antigateKey,
    	timeout: 60000, // 1 минута
    	siteKey: '6Le-wvkSAAAAAPBMRTvw0Q4Muexq9bi0DJwx_mJ-',
    	siteUrl: 'https://www.google.com/'
    });
    if (code != null) {
    	click('input', 'id', 'recaptcha-demo-submit');
    } else {
    	print('Капча не пройдена');
    }
    		

    Также возможно решение невидимой капчи от Google. Однако, в этом случае вы должны самостоятельно вызвать callback-функцию, выполняющуюся после прохождения капчи или отправить соответствующую форму.

    // Прохождение Invisible reCAPTCHA 
    navigate('https://www.google.com/recaptcha/api2/demo?invisible=true');
    wait(5000);
    var code = solveRecaptcha(null, {
    	service: 'rucaptcha',
    	key: 'f90e012df680dbff0d5e8e2e8f0fc91d' // ключ для rucaptcha.com
    });
    if (code != null) {
    	executeJavaScript("onSuccess('" + code + "')");
    } else {
    	print('Капча не пройдена');
    }
    		
  • Функция get(key) возвращает значение переменной состояния презентации.
    • key - строковое значение, название переменной состояния. Может быть одним из следующих значений:
      • time - оставшееся время просмотра.
      • ip - IP-адрес посетителя.
      • referer - реферер, переданный с сервера системы.
      • tab - номер активной вкладки.
      • search - текущий способ поиска.
      • log - содержимое журнала выполнения.
      • test - возвращает true, если скрипт выполняется в программе тестирования.
      • land - двухбуквенный код страны (стандарт ISO 3166-1 alpha-2), которой принадлежит IP посетителя по версии системы, либо XX, если система не смогла определить страну, которой принадлежит IP-адрес, или презентация выполняется в программе тестирования.
      • version - версия программы, в которой выполняется скрипт.
      • totalmemory - объем оперативной памяти, установленной на компьютере, в мегабайтах.
      • memory - объем доступной оперативной памяти на компьютере в мегабайтах.
      • totalvirtualmemory - общий объем виртуальной памяти на компьютере в мегабайтах.
      • virtualmemory - объем доступной виртуальной памяти на компьютере в мегабайтах.
    Возвращаемое значение: строка или число, в зависимости от параметра key.

    Примеры вызова:

    print('На выполнение презентации осталось: ' + get('time') + ' секунд');
    print('IP посетителя: ' + get('ip'));
    print('Номер активной вкладки: ' + get('tab'));
    
  • Функция set(key, value [, key2, value2, ...]) устанавливает значение переменной состояния презентации.
    • key - строковое значение, название переменной состояния. Может быть одним из следующих строковых значений:
      • search - способ сравнения при поиске элементов. Тогда параметр value строковый и может принимать следующие значения:
        • std – полнотекстовый способ поиска. Находит элемент только в том случае, если искомое значение полностью совпадает с заданными данными (регистронезависим только при поиске URL).
        • index – использует метод частичного поиска, включен по умолчанию. Находит элемент только в том случае, если часть искомого значения совпадает с заданными данными (регистронезависим только при поиске URL).
        • regexp – поиск соответствия по регулярному выражению. Регулярные выражения задаются в виде /pattern/флаги. Допустимы флаги i, m, s, n, x (подробнее о флагах).
        Действует, пока не будет переопределен новым значением.
      • hidden - определяет, должна ли программа при поиске игнорировать ссылки и другие элементы, у которых установлен стиль display: none.
        Тогда параметр value логический. Для включения скрытых элементов в результаты поиска - true, для игнорирования - false.
      • log - заставляет программу после выполнения показа отправлять содержимое журнала выполнения презентации по указанному адресу методом POST в формате application/x-www-form-urlencoded в кодировке UTF-8.
        Параметр value строковый и вводится в формате: PASSWORD:URL или URL, где URL - адрес, начинающийся с http:// или https://, на который будет отправлен отчет, а PASSWORD (необязательный) - придуманный вами пароль, который будет передан вместе с остальными данными.

        Передаваемые данные:

        • id – ID рекламной площадки (сайта)
        • ip – IP-адрес посетителя
        • log – содержимое журнала
        • password – пароль, если он указан вами.

        Примеры скриптов получения отчетов (PHP): log-examples.7z

      • js - включение/выключение JavaScript в активной вкладке.
        Тогда параметр value логический. Для включения JavaScript - true, для выключения - false.
      • img - включение/выключение загрузки изображений в активной вкладке.
        Тогда параметр value логический. Для включения изображений - true, для выключения - false.
      • java - отключение обнаружения Java через navigator.javaEnabled(). Допустимое значение - false.
      • popup - открытие новых/всплывающих окон. При клике по некоторым элементам типа флеш-баннеров, либо по ссылкам, клики по которым обрабатываются JavaScript, страницы могут открываться в новом окне и на это сложно или невозможно повлиять. Но так как все всплывающие окна по умолчанию блокируются SecureSurf-браузером, нужная страница, открывающаяся в новом окне, будет заблокирована. Данная опция позволяет разрешить открываться таким страницам либо в текущем окне, либо в дополнительном окне.
        Тогда параметр value целочисленный - разрешенное количество перенаправлений во всплывающие окна. Пример вызова для для разрешения открытия 5-ти подряд всплывающих окон, при этом содержимое пятого окна может заменить содержимое предыдущих окон (вместо 5 может быть любое значение большее нуля): set('popup', 5);.
        Запрет открытия всплывающих окон: set('popup', 0);
      • openwin разрешение/запрещение работы с дополнительным окном

        По умолчанию ссылки, которые имеют атрибут target="_blank" и пытаются отрыться в новом окне (вкладке) браузера перенаправляются в основное окно сайта. Данная настройка переопределяет это поведение и, в зависимости от состояния этой опции, контент страницы, на которую указывает ссылка, может быть загружен в дополнительно скрытое окно браузера, тем самым предотвратив замену контента в основном окне.

        Тогда параметр value может принимать значения 0 и 1.
        • 1 – разрешить загрузку контента в дополнительное скрытое окно.
        • 0 – запретить загрузку контента в дополнительное скрытое окно.

        Примечание: при использовании данной опции рекомендуется также разрешить открытие N-ного числа всплывающих окон вызовом set('popup', N) (см. выше).

      • popuptab установка номера вкладки, в которую будут перенаправляться всплывающие/новые окна.

        По умолчанию ссылки, которые имеют атрибут target="_blank" и пытаются отрыться в новом окне (вкладке) браузера перенаправляются на основную рабочую вкладку. Данная настройка переопределяет это поведение и, в зависимости от состояния этой опции, контент страницы, на которую указывает ссылка, может быть загружен в одну из дополнительных вкладок браузера, тем самым предотвратив замену контента в основном окне.

        Тогда параметр value может принимать целое число от 0 до 3 (номер вкладки) или строки next и prev. Для предотвращения переключения рабочей вкладки можно добавить к значению value ключевое слово NOFOCUS, например, set('popuptab', '1,NOFOCUS').
        • 0, 1, 2, 3 – разрешает загрузку контента во вкладке с номером 0, 1, 2 или 3 соответственно.
        • next – разрешает в следующую вкладку.
        • prev – разрешает в предыдущую вкладку.

        Примечание: при использовании данной опции рекомендуется также разрешить открытие N-ного числа всплывающих окон вызовом set('popup', N) (см. выше).

      • retarget - включение/отключение подмены свойства target у ссылок при клике на них с помощью функции click.
        Тогда параметр value логический. Для включения подмены - true, для выключения - false.
      • recaptchalng - изменение языка текста подсказки для капчи reCAPTCHA v2.
        Параметр value - строка, содержащая код языка, на котором должен быть текст подсказки у загруженной позже капчи, или ключевое слово default для автоматического выбора языка капчи. Допустимые языковые коды перечислены в документации для разработчиков.
      • recaptchafallback - переключение капчи reCAPTCHA v2 в режим упрощенного отображения.
        Параметр value - логическое значение: true - для включения отображения в упрощенном виде, false - отображение на основе параметров браузера (отображение в стандартном виде).
      • promptvalue - установка возвращаемого значения для функции window.prompt().
        Параметр value - строка, содержащая возвращаемое значение.
      • errmode - установка режима реагирования на необработанные исключения.
        По умолчанию программа работает в режиме № 2 (исполнение презентации прерывается).
        • 0 – прерывание презентации и ожидание до истечения времени, отведенного на выполнение.
        • 2 – остановка презентации.
      • preclick - управление предварительным кликом при посимвольном вводе текста функцией typeIn.
        Параметр value - логическое значение, определяющее возможность совершения предварительного клика в поле ввода для установки курсора (true - клик разрешен, false - клик запрещен), либо целочисленное значение, не превышающее 5000, определяющее паузу между кликом и началом ввода текста. Установка отрицательного значения эквивалентна установке значения false (запрещает клик).
    Возвращаемое значение: undefined.

    Примеры вызова:

    // 1. Отключение картинок в текущей вкладке и включение отправки лога
    set('img', false, 'log', 'password:http://site.ru/log.php');
    
    // 2. Отключение картинок в текущей вкладке
    set('img', false);
    
    // 3. Разрешение открытия форума в первой вкладке
    navigate('http://webisida.com');
    wait(20000);
    set('popup', 1, 'openwin', 1);
    click('a', 'link', 'forum', 0, null, null, 'ORIGIN');
    
    // 4. Отображение текста reCAPTCHA V2 на английском
    set('recaptchalng', 'en');
    navigate('http://www.google.com/recaptcha/api2/demo');
    
  • Функция run(timeout, callback) начинает цепочку вызовов, возвращая объект типа CallChain.
    • timeout - время в секундах, по прошествии будет вызвана следующая функция в цепочке.
    • callback - функция продолжения, первая функция в цепочке вызовов.
    Также можно вызывать функцию run() без параметров.
    Возвращаемое значение: объект типа CallChain

    Примеры вызова:

    // 1. Переход на Яндекс, Google, Рамблер
    // На каждом сайте сидим 5 секунд
    run(5, function(aWindow) {
    	navigate('http://ya.ru');
    }).next(5, function(aWindow) {
    	navigate('http://google.com');
    }).next(5, function() {
    	navigate('http://rambler.ru');
    }).next(0, function() {
    	print('Все!!!');
    });
    
    
    // 2. Переход на Яндекс, Google, Рамблер
    // На каждом сайте сидим 5 секунд
    run().next(5, function(aWindow) {
    	navigate('http://ya.ru');
    }).next(5, function(aWindow) {
    	navigate('http://google.com');
    }).next(5, function() {
    	navigate('http://rambler.ru');
    }).next(0, function() {
    	print('Все!!!');
    });
    
  • Функции random возвращают случайное целое число в указанном диапазоне.
    random(min, max)
    random(max)
    • min (целочисленное значение) - включенный нижний предел возвращаемого случайного числа.
    • max (целочисленное значение) - исключенный верхний предел возвращаемого случайного числа.
    Возвращаемое значение: случайное число из диапазона [min; max).

    Примеры вызова:

    // 1. Устанавливаем переменной rnd значение 2 или 3
    vars.rnd = random(2, 4);
    // 2. Устанавливаем переменной rnd значение 0, 1, 2 или 3
    vars.rnd = random(4);
    
  • Функции wheel выполняют прокрутку текущей страницы на указанное количество щелков колесика мыши, либо к указанному элементу.
    wheel(count)
    wheel(element)
    • count (целое число) - количество щелков колесика мыши, на которое требуется прокрутить страницу.
    • element - элемент страницы, который должен стать видимым в результате прокрутки страницы.
    Возвращаемое значение: undefined.

    Примеры вызова:

    // 1. Прокрутка к заголовку "принцип действия" на странице википедии
    navigate('http://ru.wikipedia.org/wiki/Компьютерная_мышь');
    wait();
    // находим заголовок "принцип действия"
    var elem = document.querySelectorAll('h2')[1];
    // Выполняем прокрутку
    wheel(elem);
    print('Страница прокручена на ' + window.scrollY + 'px');
    
  • Функции move выполняют имитацию перемещения указателя мыши в указанную точку или к указанному элементу.
    move(timeout, x, y)
    move(timeout, x, y, startX, startY)
    move(timeout, element)
    • timeout - время в миллисекундах (1 мсек. = 0.001 сек.), в течение которого должна производиться имитация движения мыши.
      Для перемещения по координатам допустимы значения от 300 до 1500 миллисекунд, для перемещения к объекту - от 300 до 15000 миллисекунд.
    • x - абсцисса (координата по оси X) точки, к которой следует переместить указатель мыши (конечная точка).
    • y - ордината (координата по оси Y) точки, к которой следует переместить указатель мыши (конечная точка).
    • startX - абсцисса (координата по оси X) точки, от которой следует переместить указатель мыши (начальная точка).
    • startY - ордината (координата по оси Y) точки, от которой следует переместить указатель мыши (начальная точка).
    • element - элемент страницы, к которому следует переместить мышь. Если элемент находится вне зоны видимости, то вначале совершается прокрутка страницы к указанному элементу, а затем имитация перемещения.
    Возвращаемое значение: undefined.

    Примеры вызова:

    // 1. Перемещение мыши на странице википедии
    activateTab(0);
    navigate('http://ru.wikipedia.org/wiki/Компьютерная_мышь');
    wait(30000);
    // Перемещаем мышь в точку (100, 100) за 1.5 сек.
    move(1500, 100, 100);
    wait(5000);
    // Перемещаем мышь в точку (10, 10)
    // из точки (200, 300) за 1 сек.
    move(1000, 10, 10, 200, 300);
    wait(5000);
    var elem = document.querySelectorAll('h2')[1];
    // Перемещаем мышь к заголовку "принцип действия" за 8 сек.
    move(8000, elem);
    
  • Функция setCookie(host, name, value, isSecure, httpOnly, path) выполняет установку куки для указанного хоста.
    • host - строковое значение, содержащее имя хоста.
    • name - строковое значение, содержащее имя куки.
    • value - строковое значение, содержащее значение куки.
    • isSecure (необязательный) - логическое значение: true, если кука должна быть поставлена для протокола HTTPS, false (значение по умолчанию) - для протокола HTTP. По умолчанию - false.
    • httpOnly (необязательный) - логическое значение, определяющее запрет получения куки из JavaScript. Значение false, если кука может быть получена из JavaScript; true, если получение куки из клиентского JavaScript запрещено. По умолчанию - false.
    • path (необязательный) - строковое значение, определяющее подмножество адресов, для которых действительно значение куки. По умолчанию - путь к корневому каталогу: /.
    Возвращаемое значение: undefined.

    Примеры вызова:

    // 1. Установка куки username сайту http://example.com
    setCookie('example.com', 'username', 'vasya');
    
    // 2. Установка куки username сайтам http://example.com и его поддоменам
    // (например, http://www.example.com, http://subdomain.example.com и т.п.)  
    setCookie('.example.com', 'username', 'vasya');
    
    // 3. Установка куки username сайту https://example.com
    setCookie('example.com', 'username', 'vasya', true);
    
  • Функции getCookie возвращают массив объектов типа Cookie, содержащих куки для указанного хоста.
    getCookie(host)
    getCookie(host, name)
    • host - имя хоста.
    • name - имя куки.
    Возвращаемое значение: массив объектов, содержащих куки для указанного хоста.

    Примеры вызова:

    // 1. Получение куки для forum.webisida.com
    navigate('http://forum.webisida.com');
    wait(5000);
    var cookies = getCookie('forum.webisida.com');
    print('Все куки: ' + cookies);
    print('Количество записей: ' + cookies.length);
    if(cookies.length > 0) {
    	var cookie = cookies[random(cookies.length)];
    	print('Случайная запись: ' + cookie);
    	print('Имя куки: ' + cookie.name);
    	print('Значение куки: ' + cookie.value);
    	print('Установлена для ' + cookie.domain);
    	print('Доступна для скриптов: ' + (cookie.httpOnly ? 'нет' : 'да'));
    	print('Для защищенного соединения: ' + (cookie.secure ? 'нет' : 'да'));
    	print('Уничтожается при завершении сессии: ' + (cookie.session ? 'да' : 'нет'));
    }
    
  • Функция deleteCookie(host, name) удаляет куки указанного для заданного хоста.
    • host - имя хоста.
    • name (необязательный) - имя куки, которую нужно удалить. Если не указано, удаляются все куки, установленные для хоста.
    Возвращаемое значение: undefined.

    Примеры вызова:

    // 1. Удаление всех cookie форума
    navigate('http://forum.webisida.com');
    wait(10000);
    print('До удаления: ' + getCookie('.forum.webisida.com'));
    deleteCookie('.forum.webisida.com');
    print('После удаления: ' + getCookie('.forum.webisida.com'));
    
    // 2. Удаление куки по имени
    navigate('http://forum.webisida.com');
    wait(10000);
    print('До удаления: ' + getCookie('.forum.webisida.com'));
    deleteCookie('.forum.webisida.com', 'phpbb3_rqxxd_sid');
    print('После удаления: ' + getCookie('.forum.webisida.com'));
    
  • Функция generateReferrer(key, searchPhrase, siteUrl, pageIndex) генерирует ссылку, похожую на адрес одной из страниц выдачи поисковых систем, которая в дальнейшем может использоваться для подмены HTTP_REFERER.
    • key - строковое значение, ключевое слово, соответствующее поисковой системе или рекламной сети. Может принимать следующие значения:
      • Google – для генерации поискового реферера, похожего на реферер от Google.
      • Yandex – для генерации поискового реферера, похожего на реферер от Яндекс.
      • Yahoo – для генерации поискового реферера, похожего на реферер от Yahoo.
      • Rambler – для генерации поискового реферера, похожего на реферер от портала Rambler.com.
      • Bing – для генерации поискового реферера, похожего на реферер от Bing.
      • MailRu – для генерации поискового реферера, похожего на реферер от портала Mail.ru.
      • GoogleAdsense – для генерации реферера, похожего на реферер от Google Adsense.
      • YandexDirect – для генерации реферера, похожего на реферер от Яндекс.Директ.
    • searchPhrase - слово или фраза для генерации ссылки.
    • siteUrl - строковое значение, ссылка на страницу сайта, на которую должен указывать сгенерированный реферер.
    • pageIndex (необязательный) - номер страницы выдачи.
    Возвращаемое значение: строковое значение, содержащее ссылку.

    Примеры вызова:

    // 1. Получение ссылки, похожей на реферер от Google
    var referrer = generateReferrer('Google', 'генерация ссылок поисковых систем', 'http://forum.webisida.com/viewtopic.php?f=21&t=95&start=30');
    // 2. Получение ссылки Google со 2 страницы выдачи 
    var referrer = generateReferrer('Google', 'генерация ссылок поисковых систем', 'http://forum.webisida.com/viewtopic.php?f=21&t=95&start=30', 2);
    // 3. Получение ссылки Яндекса для страницы http://example.com/
    var referrer = generateReferrer('Yandex', 'генерация ссылок поисковых систем', 'http://example.com/');
    
    // пример использования
    vars.referrer = generateReferrer('Yandex', 'генерация ссылок поисковых систем', 'http://forum.webisida.com/viewtopic.php?f=21&t=95&start=30');
    navigate('http://forum.webisida.com/viewtopic.php?f=21&t=95&start=30', vars.referrer);
    
  • Функция generateAccount(lang, sex, loginSize, passwordSize); генерирует объект, содержащий информацию о пользователе.
    • lang - строка, содержащая алфавитный код языка пользователя:
      • ru – русский
      • en – английский
    • sex (необязательный) - строка, содержащая пол пользователя (по умолчанию - случайный):
      • w – женский
      • m – мужской
    • loginSize (необязательный) - число от 1 до 16, определяющее длину логина. По умолчанию 4 - 6 символов. Для выбора значения по умолчанию допустимо передать 0.
    • passwordSize (необязательный) - число от 1 до 32 , определяющее длину пароля. По умолчанию 8 - 10 символов. Для выбора значения по умолчанию допустимо передать 0.
    Возвращаемое значение: объект, содержащий данные об аккаунте в свойствах name (имя), surname (фамилия), patronymic (отчество или среднее имя), sex (пол), login (логин) и password (пароль).

    Примеры вызова:

    // 1. Генерация русскоязычного аккаунта
    var account = generateAccount('ru');
    print('Имя: ' + account.name);
    print('Фамилия: ' + account.surname);
    print('Отчество: ' + account.patronymic);
    print('Пол: ' + account.sex);
    print('Логин: ' + account.login);
    print('Пароль: ' + account.password);
    
    // 2. Генерация англоязычного аккаунта
    var account = generateAccount('en');
    print('Имя: ' + account.name);
    print('Среднее имя: ' + account.patronymic);
    print('Фамилия: ' + account.surname);
    print('Пол: ' + account.sex);
    print('Логин: ' + account.login);
    print('Пароль: ' + account.password);
    
    // 3. Генерация русского женского аккаунта
    var account = generateAccount('ru', 'w');
    print(account.surname + ' ' + account.name + ' ' + account.patronymic);
    
    // 4. Генерация английского мужского аккаунта
    var account = generateAccount('en', 'm');
    print(account.name + ' ' + account.patronymic + ' ' + account.surname);
    
  • Функция generateLogin(length) генерирует логин указанной длины.
    • length (необязательный) - положительное число от 1 до 32, определяющее длину логина. По умолчанию 4 - 6 символов.
    Возвращаемое значение: строковое значение, содержащее логин.

    Примеры вызова:

    // 1. Генерация логина
    vars.login = generateLogin();
    print('Логин: ' + vars.login);
    
  • Функция generatePassword(length, alphabet) генерирует cлучайную строку указанной длины из символов указанного алфавита.
    • length (необязательный) - положительное число, определяющее длину возвращаемой строки. По умолчанию 6 - 8 символов.
    • alphabet (необязательный) - строка, содержащая символы, из которых необходимо сгенерировать результат. Если данный параметр не указан, строка будет сгенерирована из символов ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789.

      Также имеется ряд предустановленных алфавитов (т.е. не нужно вводить абвгде..., а вместо этого можно ввести только #r):

      • #n – цифры от 0 до 9
      • #c – латинские буквы от a до z
      • #C – латинские буквы от A до Z
      • #r – русские буквы от а до я
      • #R – русские буквы от А до Я
      • #! – спецсимволы ~`@#$%^&*();"':/?<>.,[]{}|\-_+!=
      • #s – символ ; (точка с запятой)
      • #d – символ : (двоеточие)
      • #p – символ ) (круглая закрывающая скобка)
    Возвращаемое значение: строковое значение указанной длины, содержащее случайную последовательность символов из указанного алфавита.

    Примеры вызова:

    // 1. Генерация пароля длиной 8 символов
    vars.password = generatePassword(8);
    print('Пароль: ' + vars.password);
    
    // 2. Генерация пароля из цифр длиной 6 символов
    vars.password = generatePassword(6, '#n');
    print('Пароль: ' + vars.password);
    
    // 3. Генерация строки, похожей на md5-хэш
    vars.md5 = generatePassword(32, '#nabcdef')
    print('MD5: ' + vars.md5);
    
  • Функция wait приостанавливает дальнейшее выполнение скрипта на заданное время.
    wait() - приостанавливает выполнения скрипта, ожидая завершения загрузки HTML-документа в активную вкладку.
    wait(timeout)
    wait(minTimeout, maxTimeout)
    • timeout - целочисленное значение, время в миллисекундах, определяющее время приостановки выполнения скрипта.
    • minTimeout - целочисленное значение, время в секундах, определяющее минимальное значение интервала времени приостановки выполнения скрипта.
    • maxTimeout - целочисленное значение, время в секундах, определяющее максимальное значение интервала времени приостановки выполнения скрипта.
    Возвращаемое значение: undefined.

    Примеры вызова:

    // пример использования
    print('выполнение начато');
    wait(5000);
    print('прошло 5 секунд');
    
  • Функция closeTab(tabIndex) закрывает вкладку с индексом tabIndex. Если существуют вкладки, индекс которых больше значения tabIndex, то после закрытия вкладки их индексы будут уменьшены на 1 (единицу).
    • tabIndex - целочисленное значение, номер вкладки, которую требуется закрыть. Может принимать значения 0, 1, 2 или 3.
    Возвращаемое значение: undefined.

    Примеры вызова:

    // 1. Загрузка форума во вкладку №1 и ее закрытие через 10 сек.
    activateTab(1);
    navigate('http://forum.webisida.com');
    wait(10000);
    closeTab(1);
    
  • Функция getActiveTabIndex() возвращает порядковый номер активной вкладки.

    Возвращаемое значение: индекс активной вкладки.

    Примеры вызова:

    // 1. Получение индекса вкладки после открытия ссылки в новой вкладке
    navigate('http://forum.webisida.com');
    wait(10000);
    set('popuptab', 'next');
    click('a', 'link', 'viewforum', -1, null, null, '_blank');
    wait(10000);
    print('Активна вкладка № ' + getActiveTabIndex());
    
  • Функция getTabs() возвращает массив, содержащий контексты всех открытых вкладок.

    Возвращаемое значение: массив, содержащий по одному объекту Window верхнего уровня для каждой вкладки.

    Примеры вызова:

    // 1. Получение адресов страниц, открытых во вкладках
    navigate('http://forum.webisida.com');
    activateTab(1);
    navigate('http://example.com');
    wait(10000);
    var tabs = getTabs();
    print('Открыто вкладок: ' + tabs.length);
    for(var i = 0; i < tabs.length; i++) {
    	print('Вкладка ' + i + ': ' + tabs[i].location.href);
    }
    
  • Функция findElements(tagName, seacrhkey, searchData, index) возвращает DOM-объект или массив DOM-объектов, найденных согласно переданным в качестве аргументов ключу поиска и данным.
    • tagName - строковое значение, название тега искомых элементов.
    • searchKey - ключ поиска, строка, принимающая одно из следующих значений:
      • id – поиск элементов по ID, тогда параметр data - искомый идентификатор или его часть, в зависимости от текущего вида поиска.
      • link – поиск ссылок, картинок или фреймов по части адреса, тогда параметр data - часть адреса искомых элементов. Доступны все виды поиска.
      • text – поиск элементов по тексту, содержащемуся внутри, data – часть текста. Поиск производится в свойстве innerHTML. Доступны все виды поиска.
      • name – поиск элементов по их имени, data – часть имени искомых элементов. Доступны все виды поиска.
      • last – поиск последнего элемента, найденного ранее функциями text, check, sendEvents или click, параметр data игнорируется, но его ввод обязателен.
      • selector – поиск элементов по CSS-селектору, параметр data должен быть допустимым CSS-селектором.
      • custom – поиск элементов по атрибутам, для которых не создано отдельных команд (например title, class и т.п.), параметр data вводится в виде строки в формате name=value, где name – имя атрибута, value – часть значения этого параметра. Доступны все виды поиска.
    • index (необязательный) - целочисленное значение, номер элемента среди найденных. Если index отрицательное число, функция вернет случайный элемент. Если этот аргумент не был передан, функция вернет массив, содержащий все найденные элементы.
    Возвращаемое значение: найденный DOM-объект или null, если был передан агрумент index, либо массив найденных DOM-объектов, если индекс искомого элемента не был указан.

    Примеры вызова:

    // 1. Получение ссылок, содержащих viewforum
    navigate('http://forum.webisida.com');
    wait(10000);
    var aLinks = findElements('a', 'link', 'viewforum');
    print('Ссылок найдено: ' + aLinks.length);
    print('Ссылки: \r\n' + aLinks.join('\r\n'));
    
    // 2. Получение случайной ссылки, содержащей viewforum
    navigate('http://forum.webisida.com');
    wait(10000);
    print('Ссылка: ' + findElements('a', 'link', 'viewforum', -1));
    
  • Функции getInternalLink выбирают внутренние ссылки со страницы, загруженной в активную вкладку.
    getInternalLink(index) - возвращает внутреннюю ссылку или null, если на странице нет внутренних ссылок или номер ссылки, переданный в параметре index больше, чем количество найденных ссылок;
    getInternalLink(searchKey, searchData, index) - возвращает внутреннюю ссылку, найденную согласно указанному условию и порядковому номеру, или null, если не удалось найти ссылки или номер ссылки, переданный в параметре index больше, чем количество найденных ссылок;
    getInternalLink(selectAll) - возвращает одну или несколько внутренних ссылок или null, если на странице нет внутренних ссылок;
    getInternalLink(searchKey, data, selectAll) - возвращает одну или несколько внутренних ссылок, найденных согласно указанному условию и порядковому номеру, или null, если не удалось найти ссылки или номер ссылки, переданный в параметре index больше, чем количество найденных ссылок;
    • index (необязательный) - целочисленное значение, номер ссылки среди найденных, которую требуется получить. Если index - отрицательное число, функция вернет случайную ссылку.
    • selectAll (необязательный) - логическое значение, true - для получения массива, содержащего все найденные ссылки.
    • searchKey (необязательный) - ключ поиска, строка, принимающая одно из следующих значений:
      • id – поиск ссылки по ID, тогда параметр data - искомый идентификатор или его часть, в зависимости от текущего вида поиска.
      • link – поиск ссылки по её части, тогда параметр data - часть искомой ссылки. Доступны все виды поиска.
      • text – поиск ссылки по её тексту, data – часть текста ссылки. Поиск производится в свойстве innerHTML. Доступны все виды поиска.
      • name – поиск ссылки по её имени, data – часть имени ссылки. Доступны все виды поиска.
      • selector – поиск ссылки по CSS-селектору, параметр data должен быть допустимым CSS-селектором.
      • custom – поиск ссылки по атрибутам, для которых не создано отдельных команд (например title, class и т.п.), параметр data вводится в виде строки в формате name=value, где name – имя атрибута, value – часть значения этого параметра. Доступны все виды поиска.
    Возвращаемое значение: ссылка (элемент с тегом A), массив ссылок или null, если на странице нет подходящих внутренних ссылок.

    Примеры вызова:

    // 1. Получение внутренней ссылки с форума
    navigate('http://forum.webisida.com');
    wait(10000);
    print('Случайная внутренняя ссылка: ' + getInternalLink());
    print('-------------------------------');
    var aList = getInternalLink(true);
    print('Все внутренние ссылки:');
    for(var i = aList.length - 1; i >= 0; i--) {
    	print(aList[i]);
    }
    print('-------------------------------');
    print('Случайная ссылка, содержащая слово viewtopic: ' + getInternalLink('link', 'viewtopic'));
    print('-------------------------------');
    print('Количество ссылок, содержащих слово viewtopic: ' + getInternalLink('link', 'viewtopic', true).length);
    
  • Функция encodeURIComponent(string) кодирует текстовую строку как допустимый компонент универсального кода ресурса (URI) (подробнее).
    • string - строка, которую требуется закодировать.
    Возвращаемое значение: строковое значение, содержащий исходный текст, перекодированный в URI-кодировку.
  • Функция decodeURIComponent(encodedURIString) получает декодированную версию закодированного компонента универсального кода ресурса (URI) (подробнее).
    • encodedURIString - строка, которую требуется декодировать.
    Возвращаемое значение: строковое значение, содержащий раскодированный текст.
  • Функция encrypt(string, key) выполняет шифрование строки string методом Rijndael-128 с ключом key.
    • string - строка, которую требуется зашифровать.
    • key - строковое значение, ключ шифрования.
    Возвращаемое значение: строковое значение, содержащий зашифрованный текст.
  • Функция decrypt(encryptedString, key) расшифровывает строку encryptedString, зашифрованную функцией encrypt, используя ключ key.
    • encryptedString - строка, которую требуется зашифровать.
    • key - строковое значение, ключ шифрования.
    Возвращаемое значение: строковое значение, содержащий расшифрованный текст или null, если строку не удалось расшифровать.
  • Функция base64encode(value) возвращает строку, содержащую данные value, закодированные по алгоритму Base64.
    • value - строка, которую требуется закодировать.
    Возвращаемое значение: строковое значение, содержащий закодированный текст.
  • Функция base64decode(value) расшифровывает данные, кодированные по алгоритму Base64 и возвращает Unicode-строку (UTF-8), содержащую исходные данные.
    • value - строка, которую требуется декодировать.
    Возвращаемое значение: строковое значение, содержащее декодированные данные, либо null, если переданная строка содержит недопустимые символы.
  • Функция transliterate(string) выполняет транслитерацию строки string, содержащую символы на кириллице, в латиницу.
    • string - строка, которую требуется преобразовать.
    Возвращаемое значение: строка, содержащая результат транслитерации.

    Примеры вызова:

    // 1. Выведет Ivan Ivanov
    print(transliterate('Иван Иванов'));
    
  • Функция escapeSelectorData(string) возвращает строку string, добавив символ экранирования (\) перед символами, используемыми в описании CSS-селекторов.
    • string - строка, которую требуется преобразовать.
    Возвращаемое значение: строка, содержащая результат экранирования.

    Примеры вызова:

    // 1. Поиск ссылки на сайт iana.org
    navigate('http://example.com/');
    wait();
    var safeHost = escapeSelectorData('www.iana.org');
    print(safeHost);
    print(document.querySelector('a[href*=' + safeHost + ']'));
    
  • Функция escapeRegex(string) возвращает строку string, добавив символ экранирования (\) перед символами, используемыми в описании регулярных выражений.
    • string - строка, которую требуется преобразовать.
    Возвращаемое значение: строка, содержащая результат экранирования.
  • Функция encodeToPunycode(domain) возвращает строку из ASCII-символов, представляющую кодированную в соответствии со стандартом IDNA версию строки domain, состоящей из символов Юникода.
    • domain - строка, которую требуется преобразовать в Punycode.
    Возвращаемое значение: строка, содержащая результат кодирования в Punycode-представление.

    Примеры вызова:

    // 1. Преобразование в пуникод домена президент.рф
    print(encodeToPunycode('президент.рф'));
    
  • Функция getEmail получает с указанного почтового сервера содержание письма, в котором находится заданный текст, соединяясь этим почтовым сервером по протоколу IMAP или POP3.
    getEmail(address, login, password, text)
    getEmail(address, login, password, params)
    • address - строковое значение, адрес почтового сервера.
      Рекомендуемые адреса для популярных почтовых сервисов:
      • imap.gmail.com - GMail (логин - адрес почты); порт 993 (SSL).
      • imap.yandex.ru - Яндекс.Почта (логин - адрес почты); порты 993 (SSL) или 143.
      • imap.mail.ru - Почта от Mail.Ru: mail.ru, inbox.ru и т.д. (логин - адрес почты); порты 993 (SSL) или 143.
      • imap.rambler.ru, mail.rambler.ru - почта от Рамблер: rambler.ru, lenta.ru и т.д. (логин - адрес почты); порты 993 (SSL) или 143.

      Примечание: при подключении по протоколу IMAP в большинстве случаев поиск нужного письма занимает меньше времени.

    • login - строковое значение, логин от почтового ящика или полный адрес e-mail.
    • password - строковое значение, пароль от почтового ящика.
    • text - текст, который должен содержаться в письме.
    • params - объект, содержащий расширенные настройки для соединения с почтовым сервером, а также данные для поиска письма.
      Формат объекта params со значениями по умолчанию:
      var params = {
      	text: '', // текст, который должен содержаться в письме
      	from: undefined, // (необяз.) строка, адрес отправителя
      	index: 0, // (необяз.) целое число, порядковый номер письма среди найденных
      	drop: false, // (необяз.)  true - удалить письмо после получения, false - оставить
      	protocol: undefined, // (необяз.) строка, определяющая протокол: IMAP или POP3
      	port: undefined, // (необяз.) целое число, определяющее порт сервера
      	ssl: undefined // (необяз.) тип соединения: true - защищенное, false - не защищенное
      };
      
    Возвращаемое значение: объект, содержащий информацию о письме или undefined, если письма нет.
    Формат возвращаемого объекта:
    • from - строковое значение, e-mail отправителя.
    • title - строковое значение, тема письма.
    • text - строковое значение, содержимое письма (текст, HTML и т.п.).
    • contentType - строковое значение, MIME-тип содержимого письма.
    • links - массив строк, содержащий ссылки из письма.
    • alternateViews - массив объектов, альтернативные формы представления содержания или undefined.
      Формат каждого объекта:
      • title - строковое значение, тема письма или пустая строка.
      • text - строковое значение, содержимое письма (текст, HTML и т.п.).
      • contentType - строковое значение, MIME-тип содержимого данного представления.

    Примеры вызова:

    // 1. Получение письма, присланного с адреса [email protected]
    // и содержащего текст 'Popular on YouTube' в теле или заголовке
    var searchText = 'Popular on YouTube';
    var email = getEmail('imap.gmail.com', '[email protected]', 'password', {
    	text: searchText,
    	from: '[email protected]'
    });
    if (email) {
    	print('Письмо от ' + email.from + ' (' + email.contentType + '):')
    	print(email);
    	print('-----------------------------------------');
    	print('Ссылки: ' + email.links);
    	if(email.links && email.links.length > 0) {
    		print('Ссылка #1: ' + email.links[0]);
    	}
    	if(email.alternateViews) {
    		print('Количество альтернативных представлений: ' + email.alternateViews.length);
    		for (var i = 0; i < email.alternateViews.length; i++) {
    			var view = email.alternateViews[i];
    			print('------------------------------------------');
    			print('Вид #' + i + ' (' + view.contentType + '):');
    			print(view.text);
    		}
    	}
    } else {
    	print('Нет письма, содержащего "' + searchText +'"');
    }
    
  • Функции pressKey эмулируют нажатие клавиши в активной вкладке.
    pressKey(code)
    pressKey(code, isVirtualKey)
    • code - положительное целочисленное значение, код символа или виртуальный код клавиши.
    • isVirtualKey - логическое значение: true - параметр code задает код VK_KEY (виртуальный код клавиши), false - код символа.
    Возвращаемое значение: undefined.
  • Функция pressDelKey(isDelKey) эмулирует нажатие клавиши DEL или BACKSPACE.
    • isDelKey (необязательный) - логическое значение: true - для нажатия DEL, false - для нажатия BACKSPACE. При отсутствии параметра isDelKey или если переданное значение не является логическим, эмуляция нажатия какой из этих двух клавиш будет выполнена выбирается случайным образом.
    Возвращаемое значение: undefined.
  • Функция pressSelectAll() эмулирует одновременное нажатие клавиш Ctrl и A, тем самым заставляя программу осуществить выделение всего текста на странице в активной вкладке. Возвращаемое значение: undefined.
  • Функция executeJavaScript(source, recursive, window) выполняет код на языке JavaScript в контексте указанного окна или фрейма, загруженного в активную вкладку. Если aAllFrames равно true, то код будет выполнен и во всех вложенных фреймах страницы по одному разу.
    • source - строковое значение, код на языке JavaScript, который необходимо выполнить.
    • recursive (необязательный) - логическое значение: true - для выполнения кода в контексте окна и во всех вложенных фреймах, false - для выполнения кода только в контексте окна. По умолчанию - false.
    • window (необязательный) - объект типа Window, глобальный объект окна или фрейма, в котором нужно выполнить скрипт. Если параметр не задан, код выполнится в текущем выбранном фрейме активной вкладки.
    Возвращаемое значение: undefined.
    // 1. Выполнение кода в активной вкладке
    executeJavaScript('window.location = "http://ya.ru"');
    
    // 2. Выполнение кода во фрейме в активной вкладке
    window.location = 'data:text/html,<html><body><iframe name="myframe" src="data:text/html,wiki" width="300" height="300"></iframe></body></html>';
    wait(5000);
    setFrame('name=myframe');
    executeJavaScript('window.location.href = "http://wikipedia.org"');
    
    
    // 3. Выполнение кода во фрейме в активной вкладке
    window.location = 'data:text/html,<html><body><iframe src="data:text/html,wiki" width="300" height="300"></iframe></body></html>';
    wait(5000);
    var frame = window.frames[0];
    executeJavaScript('window.location.href = "http://wikipedia.org"', false, frame);
    
    // 4. Выполнение кода во всех фреймах
    window.location = 'data:text/html,<html><body><iframe src="data:text/html,<html><body>wiki</body></html>" width="300" height="300"></iframe></body></html>';
    wait(5000);
    var script = 'window.document.body.style.background = "#" + (Math.random() * 0xFFFFFF << 0).toString(16)';
    executeJavaScript(script, true);
    
  • Функция setUserAgent(userAgent) изменяет заголовок User-Agent, который будет передаваться серверу в последующих запросах страниц сайта. Аналог команды Изменить UserAgent.

    Примечание 1. Программа гарантирует корректную имитацию браузеров только для предопределенных агентов. В случае с произвольным агентом корректная имитация не гарантируется, в связи с чем данную функцию следует вызывать только при крайней необходимости.

    Примечание 2. При изменении агента очищаются все куки.

    • userAgent - строка, которую нужно подставлять в заголовок User-Agent, либо null или undefined для установки предопределенного агента, выбранного программой по умолчанию. Также допустимо использовать URL внешнего файла со списком UserAgent'ов. Содержимое файла должно предаваться в кодировке ASCII/UTF-8 с mime-типом совместимым с text/plain (без сжатия). Каждая запись UserAgent должна начинаться с новой строки. Размер файла должен составлять не более 512 Кбайт.

      Примечание. Файл, содержащий список агентов загружается асинхронно в течении 5 секунд. В связи с этим, при использовании внешнего файла требуется подождать после вызова функции setUserAgent не менее 6 секунд. В том случае, если файл не будет успешно загружен в течение 5 секунд, установка агента будет проигнорирована.

    Возвращаемое значение: undefined.
  • Функция getDocumentFileSize(window) возвращает количество байт, переданных сервером при загрузке документа, открытого в окне или фрейме, переданном в параметре window. Это число совпадает со значением HTTP-заголовка Content-Length, если он присутствует в ответе сервера.
    • window - объект Window.
    Возвращаемое значение: число, равное количеству байт, переданных со стороны сервера, либо -1, если информацию о загруженном документе получить невозможно.


Работа с переменными

Режим презентации позволяет создавать неограниченное количество переменных с помощью стандартного объявления ключевым словом var. Тем не менее, объявленные таким образом переменные не будут отображаться на вкладке "Переменные" в программе тестирования. Для того, чтобы переменную можно было увидеть на вкладке "Переменные" она должна быть определена как свойство объекта vars. Объект vars доступен как в программе тестирования, так и в программе серфинга.

Примеры:

// установка строковой переменной login
vars.login = 'mylogin';
// установка переменной vIndex
vars.vIndex = 5;
// установка переменной vRect
vars.vRect = { x: 100, y: 120, width: 300, height: 200  };
// установка переменной vIndex2
vars['vIndex2'] = 5;
// получение переменной
print('width: ' + vars.vRect.width);


Работа с jQuery

  • Функция jQueryDef(window) возвращает определенную в контексте window функцию jQuery. Если в контекст window не была загружена библиотека jQuery, то в него автоматически загружается jQuery 2.1.1.
    • window - контекст, для которого необходимо получить объект jQuery.

    Возвращаемое значение: объект jQuery (функция)

    Примеры вызова:

    // 1. Поиск в Яндексе с jQuery
    navigate('http://ya.ru');
    wait(10000);
    var $ = jQueryDef(window);
    $('#text').val('поисковая фраза');
    wait(5000);
    click('input', 'custom', 'type=submit');
    wait(10000);
    // тут снова нужен вызов jQueryDef, т.к. загрузилась новая страница
    $ = jQueryDef(window);
    // текст 2 ссылки выдачи в журнал
    vars.serp2_title = $('.b-serp-item__title-link').eq(1).text()
    print('Вторая ссылка в выдаче: ' + vars.serp2_title);
    

Работа с сетью

  • Функция resolveAddress(hostname) возвращает список IP-адресов для указанного хоста.
    • hostname - строка, содержащая имя хоста.

    Возвращаемое значение: строковый массив, содержащий IP-адреса.

    Примеры вызова:

    // 1. Получение IP адресов Яндекса
    var ips = resolveAddress('yandex.ru');
    for(var i = ips.length - 1; i >= 0; i--) {
    	print(ips[i]);
    }
    
  • Объект http предоставляет синхронные и асинхронные функции, позволяющие обмениваться данными с серверными скриптами. Асинхронные функции максимально приближены к аналогичным функциям из библиотеки jQuery.
    • Функция http.postSync(url, data, dataType) выполняет синхронный POST-запрос к заданному URL и ожидает ответа от него.
      • url - строка, содержащая URL, к которому должен быть отправлен запрос.
      • data (необязательный) - объект, содержащий данные, которые должны быть переданы серверу при выполнении запроса.
      • dataType (необязательный) - тип данных, ожидаемый от сервера: plain, html, json, xml и т.п.

      Возвращаемое значение: преобразованный ответ от заданного URL - строка или объект, в зависимости от значения параметра dataType или заголовка Content-Type в ответе, либо undefined, если произошла ошибка.

      Примеры вызова:

      // 1. Отправка уведомления скрипту
      var result = http.postSync('http://example.com', { name: 'Bob' });
      print('POST выполнен' + (result ? '' : ' не') + ' успешно.'); 
      
    • Функция http.getSync(url, data, dataType) выполняет синхронный GET-запрос к заданному URL и ожидает ответа от него.
      • url - строка, содержащая URL, к которому должен быть отправлен запрос.
      • data (необязательный) - объект, содержащий данные, которые должны быть переданы серверу при выполнении запроса.
      • dataType (необязательный) - тип данных, ожидаемый от сервера: plain, html, json, xml и т.п.

      Возвращаемое значение: преобразованный ответ от заданного URL - строка или объект, в зависимости от значения параметра dataType или заголовка Content-Type в ответе, либо undefined, если произошла ошибка.

      Примеры вызова:

      // 1. Получение содержимого страницы http://example.com
      var url = 'http://example.com';
      var result = http.getSync(url);
      print('Ответ от ' + url + ': ' + result);
      
      // 2. Получение содержимого страницы http://example.com?name=Bob
      var url = 'http://example.com';
      var result = http.getSync(url, { name: 'Bob' });
      print('Ответ от ' + url + ': ' + result); 
      
    • Функция http.getJSONSync(url, data) выполняет синхронный GET-запрос к заданному URL, отвечающему данными в формате JSON, загружает ответ и преобразует его в объект JavaScript.
      • url - строка, содержащая URL скрипта, отдающего в ответ данные в формате JSON.
      • data (необязательный) - объект, содержащий данные, которые должны быть переданы серверу при выполнении запроса.

      Возвращаемое значение: объект, полученный путем преобразования ответа от заданного URL, либо undefined, если произошла ошибка.

      Примеры вызова:

      // 1. Получение данных от скрипта на сервере
      var result = http.getJSONSync('http://example.com');
      if(result && result.name) {
      	print('имя: ' + result.name);
      } else {
      	print('При выполнении запроса произошла ошибка!');
      }
      
      // Пример PHP-скрипта, отвечающего по адресу http://example.com
      <?php
      header('Content-Type: application/json; charset=utf-8');
      echo json_encode(array('ok' => true, 'name' => 'Vasya'));
      
    • Функция http.postJSONSync(url, data) выполняет синхронный POST-запрос к заданному URL, отвечающему данными в формате JSON, загружает ответ и преобразует его в объект JavaScript.
      • url - строка, содержащая URL скрипта, отдающего в ответ данные в формате JSON.
      • data (необязательный) - объект или строка в формате JSON с данными, которые должны быть переданы серверу при выполнении запроса. Данные передаются серверу как контент с MIME-типом application/json.

      Возвращаемое значение: объект, полученный путем преобразования ответа от заданного URL, либо undefined, если произошла ошибка.

      Примеры вызова:

      // 1. Отправка и получения данных в формате JSON
      var result = http.postJSONSync('http://example.com', { a: 1, b: "qwerty" });
      if(result && result.name) {
      	print('имя: ' + result.name);
      } else {
      	print('При выполнении запроса произошла ошибка!');
      }
      
      // Пример PHP-скрипта, отвечающего по адресу http://example.com
      <?php
      header('Content-Type: application/json; charset=utf-8');
      echo json_encode(array('ok' => true, 'name' => 'Vasya'));
      
    • Функция http.ajax(url, settings) или http.ajax(settings) выполняет асинхронный HTTP (Ajax) запрос к заданному URL.
      • url - строка, содержащая URL, к которому должен быть отправлен запрос.
      • settings - объект, содержащий настройки и данные для запроса.

      Возвращаемое значение: объект XHR

      Примеры вызова:

      // 1. Отправка уведомления скрипту
      http.ajax('http://example.com?notify', { type: 'GET' })
      .done(function (data) {
      	print('Запрос успешно выполнен!');
      }).fail(function() {
      	print('При выполнении запроса произошла ошибка!');
      });
      
    • Функция http.post(url, data, successCallback, dataType) выполняет асинхронный POST к заданному URL.
      • url - строка, содержащая URL, к которому должен быть отправлен запрос.
      • data (необязательный) - объект, содержащий данные, которые должны быть переданы серверу при выполнении запроса.
      • successCallback (необязательный) - функция, которая должна быть вызвана при успешном выполнении запроса (см. done).
      • dataType (необязательный) - тип данных, ожидаемый от сервера: plain, html, json, xml и т.п.

      Возвращаемое значение: объект XHR

      Примеры вызова:

      // 1. Отправка уведомления скрипту
      http.post('http://example.com', { name: 'Bob' }, function (data) {
      	print('POST запрос успешно выполнен!');
      }).fail(function() {
      	print('При выполнении запроса произошла ошибка!');
      });
      
    • Функция http.get(url, successCallback, dataType) - выполняет асинхронный GET к заданному URL.
      • url - строка, содержащая URL, к которому должен быть отправлен запрос.
      • successCallback (необязательный) - функция, которая должна быть вызвана при успешном выполнении запроса (см. done).
      • dataType (необязательный) - тип данных, ожидаемый от сервера: plain, html, json, xml и т.п.

      Возвращаемое значение: объект XHR

      Примеры вызова:

      // 1. Отправка уведомления скрипту
      http.get('http://example.com', function (data) {
      	print('GET запрос успешно выполнен!');
      	print(data);
      }).fail(function() {
      	print('При выполнении запроса произошла ошибка!');
      });
      
    • Функция http.getJSON(url, data, successCallback) или http.getJSON(url, successCallback) выполняет асинхронный GET запрос к заданному URL, отвечающему данными в формате JSON, загружает ответ и производит преобразование ответа в объект JavaScript.
      • url - строка, содержащая URL скрипта, отдающего в ответ данные в формате JSON.
      • data (необязательный) - объект, содержащий данные, которые должны быть переданы серверу при выполнении запроса.
      • successCallback (необязательный) - функция, которая должна быть вызвана при успешном выполнении запроса (см. done).

      Возвращаемое значение: объект XHR

      Примеры вызова:

      // 1. Получение данных от скрипта на сервере
      http.getJSON('http://example.com', function (data) {
      	if(data && data.ok) {
      		print('имя: ' + data.name);
      	}
      }).fail(function() {
      	print('При выполнении запроса произошла ошибка!');
      });
      
      // Пример PHP-скрипта, отвечающего по адресу http://example.com
      <?php
      header('Content-Type: application/json; charset=utf-8');
      echo json_encode(array('ok' => true, 'name' => 'Vasya'));
      

    Объект XHR содержит состояние запроса. Для каждого возвращенного объекта XHR может быть дополнительно установлен обработчик завершения:
    • Функция done(successCallback) устанавливает обработчик function successCallback(data, textStatus, clrXHR) { }, который будет вызван при успешном завершении запроса.
      • data - данные, полученные от сервера в результате выполнения запроса.
      • textStatus - строка, содержащая статус запроса в виде строки.
      • clrXHR - экземпляр объекта CLRWebRequest, который выполнял запрос.

      Возвращаемое значение: объект XHR

      Пример установки обработчика:

      // 1. Установка обработчика
      http.get('http://example.com')
      .done(function() {
      	print('Запрос выполнен успешно!');
      });
      
    • Функция fail(errorCallback) - устанавливает обработчик function errorCallback(http, textStatus, exception) { }, который будет вызван в случае возникновения ошибки при выполнении запроса.
      • data - данные, полученные от сервера в результате выполнения запроса.
      • textStatus - строка, содержащая статус запроса в виде строки.
      • exception - объект, предоставляющий информацию об ошибке.

      Возвращаемое значение: объект XHR

      Пример установки обработчика:

      // 1. Установка обработчика
      http.get('http://example.com')
      .fail(function() {
      	print('При выполнении запроса произошла ошибка!');
      });
      
    • Функция always(callback) устанавливает обработчик function callback() { }, который будет вызван при завершении выполнения запроса, вне зависимости от успешности.

      Возвращаемое значение: объект XHR

      Пример установки обработчика:

      // 1. Установка обработчика
      http.get('http://example.com')
      .always(function() {
      	print('Выполнение запроса завершено!');
      });
      


Добавление динамической презентации в серфинг

Для добавления динамической презентации в серфинг вставьте адрес скрипта динамической презентации вместо адреса сайта и в настройках отметьте опции "Показывать сайт только в программе" и "Динамическая презентация".



Тестирование динамической презентации

Режим презентации предлагает вам очень гибкую настройку показа ваших сайтов. Но при этом является весьма сложным инструментом, поэтому для достижения наилучших результатов мы рекомендуем вам протестировать сделанные вами настройки. Для вас мы подготовили специальную программу, которая покажет вам весь процесс презентации именно так, каким его увидят посетители.
  • Загрузите автономный установщик и установите предоставляемый им комплект программ.
  • Запустите программу SecureSurf.Tester.exe. Программе необходим доступ в сеть для получения данных презентации.
  • Нажмите на картинку Тест презентации в списке сайтов для нужного вам сайта. (Такая картинка появляется только при включенном режиме презентации.)
  • Скопируйте полученный на странице код в текстовое окно программы (около которого написано "Введите код для начала теста") и нажмите кнопку "Пуск".

Для тестирования во время написания скрипта можно вставить адрес вашего скрипта динамической презентации вместо адреса страницы в режиме настройки в программе тестирования и выбрать из списка тип "динамическая презентация".



Пример скрипта динамической презентации

Пример скрипта динамической презентации вы можете загрузить отсюда.