Использование наборов действий для расшифровки email (аналог кода javascript)

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

Для примера, возьмём эту страницу сайта, где в исходном коде страницы (при обычной загрузке этой страницы парсером) email скрыт, и выводится кодом javascript (этот код автоматически отрабатывает при использовании браузера для просмотра страницы, но парсер по-умолчанию не использует браузер, потому, вместо адреса почты мы видим код javascript для его генерации)

Эта статья не является руководством по расшифровке email именно таким способом. Обычно, достаточно заменить действие «Загрузить исходный код страницы» на действие «Открыть страницу в Internet Explorer», — там скрипты отработают автоматически, и email сразу будет виден. Это намного проще, чем разбираться в работе скрипта, и делать вложенные наборы действий из множества команд. Потому, вопринимайте статью просто как описание возможностей наборов действий.

Итак, при загрузке страницы, по вышеприведённой ссылке, вместо email, мы видим тег script следующего содержания:

Тот же код, но в более читабельном виде:

eval("
    var a="V@Zc8GRjdM+o9xgEO06nLuszQpekTJabHm3.PUhwtyvrAl2K_YFW-1Sf4BCi5N7XIDq";
    var b=a.split("").sort().join(""); 
    var c="qyW8dC1qxK1yY-Zrf1";
    var d="";
    for(var e=0;e<c.length;e++) d+=b.charAt(a.indexOf(c.charAt(e)));
    document.getElementById("email").innerHTML="<a href=\\"mailto:"+d+"\\">"+d+"</a>"
")

 

Наша задача, — автоматизировать при помощи наборов действий этот алгоритм из javascript

Вкратце, что делает код:

  1. сортирует посимвольно строку из переменной А, получая строку В вида
    +-.0123456789@ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz
  2. перебирает все символы строки из переменной С
  3. для каждого символа строки С, ищет позицию этого символа в строке А, и берет из строки В символ в той же позиции
  4. сцепляет все полученные символы в одну строку

Такой вот незамысловатый алгоритм мы можем реазировать в программе «Парсер сайтов» при помощи 2 наборов действий.

Первый набор действий (основной, с названием «Получить email»), выполнит пункты 1, 2 и 4 нашего алгоритма,
а для пункта 3 алгоритма мы будет вызывать второй (вспомогательный) набор действий с названием «Вычислить символ»

Содержимое основного набора действий «Получить email»:

 

Исходное значение
Часть HTML-кода веб-страницы (длиной 503 символа)

Действие Параметр Значение Результат
Создать новый список значений Часть HTML-кода веб-страницы (длиной 503 символа)
<без изменений>
Взять блоки текста МЕЖДУ ... Начало блока текста var c=\" Текст (длиной 18 символов)
Конец блока текста \"
Номер результата 1
Добавить значение в список значений Разделитель элементов списка | Часть HTML-кода веб-страницы (длиной 503 символа)

Также сохранить значение в переменную c
Взять блоки текста МЕЖДУ ... Начало блока текста var a=\" Текст (длиной 67 символов)

Конец блока текста \"
Номер результата 1
Сохранить текущее значение в переменную Название переменной a Текст (длиной 67 символов)
<без изменений>
Область видимости parser
Регулярные выражения (выборка) Шаблон Regexp \S Массив из 67 значений:

Тип результата
Шаблон замены
Учитывать регистр символов нет
Сортировка массива Порядок сортировки по возрастанию Массив из 67 значений:

Тип сортировки текст
Номер столбца, по которому сортировать 1
Объединить (сцепить) элементы массива Разделитель элементов массива Текст (длиной 67 символов)

Сохранить текущее значение в переменную Название переменной b Текст (длиной 67 символов)
<без изменений>
Область видимости parser
Считать значение переменной Название переменной c Текст (длиной 18 символов)
Область видимости parser
Значение по-умолчанию
Количество символов Символ Число (длиной 2 символа)
Создать массив чисел (для цикла) Начальное значение 1 Массив из 18 значений:

Конечное значение
Шаг 1
Делитель для конечного значения
Выполнить набор действий Название набора действий Вычислить символ Массив из 18 значений:

Маска для проверки на соответствие *
Режим сравнения с маской совпадает
Использовать результат из набора действий да
Объединить (сцепить) элементы массива Разделитель элементов массива Текст (длиной 18 символов)

Содержимое вспомогательного набора действий «Вычислить символ»:

(на примере вычисления третьего символа адреса электронной почты)

Исходное значение
Число (длиной 1 символ)
Действие Параметр Значение Результат
Сохранить текущее значение в переменную Название переменной e Число (длиной 1 символ)
<без изменений>
Область видимости parser
Считать значение переменной Название переменной c Текст (длиной 18 символов)
Область видимости parser
Значение по-умолчанию
Несколько слов/символов с начала/с конца строки Что и где искать Символы с начала строки Текст (длиной 1 символ)
С какого слова/символа начинать %e%
Количество слов/символов 1
Действие Взять найденное
Сохранить текущее значение в переменную Название переменной char Текст (длиной 1 символ)
<без изменений>
Область видимости parser
Считать значение переменной Название переменной a Текст (длиной 67 символов)

Область видимости parser
Значение по-умолчанию
Регулярные выражения (выборка) Шаблон Regexp (.*)%char% Текст (длиной 52 символа)

Тип результата 0
Шаблон замены
Учитывать регистр символов да
Количество символов Символ Число (длиной 2 символа)
Сохранить текущее значение в переменную Название переменной pos2 Число (длиной 2 символа)
<без изменений>
Область видимости parser
Считать значение переменной Название переменной b Текст (длиной 67 символов)

Область видимости parser
Значение по-умолчанию
Несколько слов/символов с начала/с конца строки Что и где искать Символы с начала строки Текст (длиной 1 символ)
С какого слова/символа начинать %pos2%
Количество слов/символов 1
Действие Взять найденное

Пример вызова набора действий из вывода на лист столбца «Электронная почта»:

 

Действие Параметр Значение Результат
Взять блоки текста МЕЖДУ ... Начало блока текста >Электронная почта< Часть HTML-кода веб-страницы (длиной 599 символов)

Конец блока текста </tr>
Номер результата 1
HTML: Поиск тегов Тип элемента script Часть HTML-кода веб-страницы (длиной 503 символа)

Название проверяемого атрибута
Значение проверяемого атрибута
Тип результата / извлекаемый атрибут outerHTML
Выполнить набор действий Название набора действий Получить email Текст (длиной 18 символов)
Маска для проверки на соответствие *
Режим сравнения с маской совпадает
Использовать результат из набора действий да