Напишем с помощью Макроса и Помощника кода скрипт

Как написать скрипт с помощью Макроса, Контекстного меню и Помощника кода.

Напишем с помощью Макроса, Контекстного меню и Помощника кода скрипт, который будет разбирать выдачу Яндекса, по заданным ключевым запросам.

Исходная задача.

У нас есть файл с ключевыми словами keys.txt в формате: одна строка — одна ключевая фраза, то есть он выглядит так:

доска объявлений
доска бесплатных объявлений
подать объявление
объявление бесплатно
доска бесплатный
и т.д.

Эти ключевые фразы мы будем вводить с помощью программы в поле поиска и разбирать выдачу, то есть получать из неё адреса сайтов и сохранять эти адреса в файл с результатами res.txt.

Таким образом наш скрипт должен будет выполнять следующие действия.

1. Чтение из файла поисковых запросов.
2. Ввод поисковых запросов в поле поиска Яндекса.
3. Разбор поисковой выдачи.
4. Сохранение результатов в файл.

Действия на странице Яндекса мы можем записать с помощью Макроса или Контекстного меню, а работу файлом выполним с помощью Помощника кода.

C чего начать?

В папке My Scripts создадим новую папку для нашего скрипта. Адрес к папке My Scripts будет примерно такой C:\XWeb Studio\Human Emulator Studio\My Scripts. Всё зависит от того куда вы установили саму программу. Создаём в ней папку yandex_parser.
Обновляем в панели Быстрый старт дерево и видим в нём созданную нами папку.

Панель Быстрый старт
Панель Быстрый старт

Далее создаём новый php скрипт.

Создать новый php скрипт
Создать новый php скрипт

Далее через контекстное меню сохраняем наш скрипт в папку yandex_parser с именем yandex_parser.

сохраняем наш скрипт в папку
сохраняем наш скрипт в папку

Теперь в самом скрипте удалим всё лишнее и отредактируем путь к папке с шаблонами. После всех наших действий в папке yandex_parser будет лежать скрипт yandex_parser.php, с кодом который будет выглядеть так:

<?php

$xhe_host = "127.0.0.1:7022";

// The following code is required to properly run XWeb Human Emulator
require("../../Templates/xweb_human_emulator.php");


// Quit
$app->quit();
?>

Теперь в папкe yandex_parser создадим папку data и скопируем в неё наш файл с ключевыми словами keys.txt. А также добавим папку res, в которую будем писать файл с результатами сбора.

папка со скриптом
папка со скриптом

Все приготовления законченны теперь перейдём непосредственно к написанию скрипта.

Запись с помощью Макроса.

С помощью Макроса мы запишем действия ввода строки в поле поиска и нажатие на кнопку поиск.

Для того чтобы писать в текущий скрипт в настройках Макроса нужно убрать галочку Создавать новый скрипт.
Ставим каретку курсора в скрипте yandex_parser.php в то место куда мы будем добавлять наш код, переходим в браузере Хумана на yandex.ru и после этого включаем Макрос на запись из главного меню.

включаем Макрос на запись из главного меню
включаем Макрос на запись из главного меню

В месте где была установлена каретка курсора в скрипте добавиться строка $browser->navigate(«https://yandex.ru/»);

Теперь кликаем на поле ввода поискового запроса и набираем там любой текст, к примеру humanemulator. И нажимаем на кнопку Найти или на Enter.

В наш скрипт будет добавлен следующий код:

$input->get_by_id("text")->focus();
$input->get_by_id("text")->send_mouse_move(114,25);
$input->get_by_id("text")->send_mouse_click(114,25);
sleep(1);

$keyboard->send_input("humanemulator\n");

Подробно про использование Макроса можно прочитать в статье Запись Действий пользователя в браузере.

Добавление кода с помощью Контекстного меню.

Эти же самые действия можно превратить в код, используя контекстное меню.

После перехода в браузере Хумана на yandex.ru, кликаем правой кнопкой мыши на корешке закладки в нижней части панели браузера и выбираем в нём пункт меню $browser -> Навигация -> $browser->navigate(«about:blank»); В скрипте в месте где установлена каретка курсора добавиться строка $browser->navigate(«about:blank»);.

кликаем правой кнопкой мыши на корешке закладки в нижней части панели браузера
кликаем правой кнопкой мыши на корешке закладки в нижней части панели браузера

Заменяем «about:blank» на «https://yandex.ru/». Далее правой кнопкой мыши кликаем на поле ввода поискового запроса и выбираем в открывшемся контекстном меню пункт Эмулировать клавиатуру -> $input->send_keyboard_input_by_name(«text»,»», «20:40»);

выбираем в открывшемся контекстном меню пункт
выбираем в открывшемся контекстном меню пункт

В скрипте у нас будет следующий код:

$browser->navigate("https://yandex.ru/");

$input->send_keyboard_input_by_name("text","", "20:40");

Видео про использование контекстного меню на нашем канале.

Работа с Помощником кода.

Теперь мы автоматизируем все действия с файлом с помощью Помощника кода. Для начала откроем Помощник кода если он у вас ещё не открыт. Главное меню программы пункт Вид -> Панель Помощник Кода. Обновим её что бы увидеть все доступные нам действия в Помощнике кода. Для этого нажимаем на иконку в верхней части панели:

нажимаем на иконку в верхней части панели
нажимаем на иконку в верхней части панели

Для начала нам нужно прочитать ключевые запросы из файла. Выбираем пункт в дереве Текстовый Файл -> Работа с файлом -> прочитать файл в массив.

Выбираем пункт в дереве Помощника кода
Выбираем пункт в дереве Помощника кода

Перед тем как выбрать этот пункт дерева установим каретку курсора в редакторе скрипта выше кода который у нас уже там есть добавить в скрипт следующий код:

// получить в массив данные из файла
// каждая строка элемент массива
$arr = file("путь к файлу",FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);

Нам остаётся только заменить в этом коде «путь к файлу» на «data/keys.txt». Теперь для того что бы ввести все поисковые запросы из файла в поле поиска Яндекса нам нужно на основе нашего массива организовать цикл.

Для этого в дереве Помощник Кода выберем пункт Конструкции -> Циклы -> цикл по всем элементам. В скрипт добавиться следующий код:

// цикл по всем элементам
foreach ($arr as $value)
{
// действия
}

Заменим // действия на код который мы записали с помощью Макроса или Контекстного меню и вставим в функцию $input->send_keyboard_input_by_name(«text»,»», «20:40»); ввод $value, так что бы на конце у нас был «\n». В итоге у нас получиться следующий скрипт:

// получить в массив данные из файла
// каждая строка элемент массива
$arr = file("data/keys.txt",FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);

// цикл по всем элементам
foreach ($arr as $value)
{
$browser->navigate("https://yandex.ru/");

$input->send_keyboard_input_by_name("text",$value."\n", "20:40");
}

Можем запустить скрипт на выполнение для проверки всё ли мы сделали верно. Скрипт вбивает фразу в поле поиска и выдаёт поисковые результаты. Теперь наша задача сохранить поисковые результаты в файл. Для этого вновь воспользуемся контекстным меню. Кликаем на ссылку в поисковой выдаче правой кнопкой мыши. Главное что бы этот элемент точно был anchor, а не div или span. В контекстном меню для интересующих нас ссылок выбираем следующий пункт меню anchor -> $anchor->get_all_hrefs_by_attribute(«class»,»link link_theme_outer path__it»,false,»<br>»);

В контекстном меню для интересующих нас ссылок выбираем пункт меню
В контекстном меню для интересующих нас ссылок выбираем пункт меню

Это функция возвращает нам строку со всеми href  разделёнными <br> всех ссылок, у которых class=link link_theme_outer path__it. Немного подправим наш код, добавив к только что добавленной функции $str= в итоге наш код будет выглядеть так:

// получить в массив данные из файла
// каждая строка элемент массива
$arr = file("data/keys.txt",FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);

// цикл по всем элементам
foreach ($arr as $value)
{
$browser->navigate("https://yandex.ru/");

$input->send_keyboard_input_by_name("text",$value."\n", "20:40");

$str = $anchor->get_all_hrefs_by_attribute("class","link link_theme_outer path__it",false,"<br>");

}

Эту строку уже можно записывать в файл, заменив перед этим в функции $anchor->get_all_hrefs_by_attribute(«class»,»link link_theme_outer path__it»,false,»<br>»); <br> на «\n» для того что бы каждый адрес записался в файл с новой строки. Если мы желаем убрать лишнее или выполнить какие то другие действия с полученными адресами, то нам необходимо полученную строку разбить в массив. Для этого воспользуемся снова Помощником кода. Выберем пункт дерева Конструкции -> Массивы -> разбить строку на элементы массива. В наш скрипт добавиться следующий код:

// разбить строку на элементы массива
// используя как разделитель ;
$arr = explode(";",$str)

Заменим «;» на «<br>» и переименуем массив $arr в $arr2, так как выше в скрипте мы уже работаем с массивом $arr.
Для того что бы перед записью посмотреть содержимое массива выведем это содержимое в панель отладки. В этом нам снова поможет Помощник кода. Выбираем в дереве Конструкции -> Массивы -> показать массив в панели отладки. в наш скрипт добавить следующий код:

// показать массив в панели отладки
print_r($arr);

заменяем $arr на $arr2. Код нашего скрипта будет такой:

// получить в массив данные из файла
// каждая строка элемент массива
$arr = file("data/keys.txt",FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);

// цикл по всем элементам
foreach ($arr as $value)
{
$browser->navigate("https://yandex.ru/");

$input->send_keyboard_input_by_name("text",$value."\n", "20:40");

$str=$anchor->get_all_hrefs_by_attribute("class","link link_theme_outer path__it",false,"<br>");

// разбить строку на элементы массива
// используя как разделитель ;
$arr2 = explode("<br>",$str);

// показать массив в панели отладки
print_r($arr2);
}

Запускам скрипт на выполнение. В панели отладки будет следующий текст:

Array
(
[0] => http://yabs.yandex.ru/count/2lsl7Pu6I_C50Ae1CGIRl5i00000E0H00aW2OBm8Q09m-hwqhms00PUlcJ-80U6flyqDa06ajFg91PW1ghI2eWUu0OpGoCS5m06Y0TW1bBt-0-01hExN0-W1-W6W0e2uYm7O0WBm0lhZfQ43-0AGyOBcbRA-gxy1c0EFWpUe0mgm0mIu1Fy1w0JVW07u1DZd7eW5sESUa0MbWZoW1OwV2QW5qUe7i0NHwWUu1P2X3y05fO8yo0MGeG_W1GNm1G6O1hg0zlq2e0R-3gW6_Wx91ZI_8czF17Y7qGOqKrZcJmHuXza60000y7W0002f1nKPgAyv3eDIi0U0W9Wiq0S2u0U62l47Z9y5VQRUycRu1m60207G28I2W860a802u0Y0t4M02W712W0000000F0_s0e2u0g0YNhu2i3y5QeB4BNENRyL6G00eWfTfCft1G3P2nKPgAyv3eDIw0lOvnxm2mRe30lW3G7o3G3w3G223W293lOeN8_2zUm_a0x0X3sO3hJ-YldsYO6yXm6W3i24FR0E0TWE1Q4F00000000y3_P3m0000000F0_
[1] => http://yabs.yandex.ru/count/2lsl7Pu6I_C50Ae1CGIRl5i00000E0H00aW2OBm8Q09m-hwqhms00PUlcJ-80U6flyqDa06ajFg91PW1ghI2eWUu0OpGoCS5m06Y0TW1bBt-0-01hExN0-W1-W6W0e2uYm7O0WBm0lhZfQ43-0AGyOBcbRA-gxy1c0EFWpUe0mgm0mIu1Fy1w0JVW07u1DZd7eW5sESUa0MbWZoW1OwV2QW5qUe7i0NHwWUu1P2X3y05fO8yo0MGeG_W1GNm1G6O1hg0zlq2e0R-3gW6_Wx91ZI_8czF17Y7qGOqKrZcJmHuXza60000y7W0002f1nKPgAyv3eDIi0U0W9Wiq0S2u0U62l47Z9y5VQRUycRu1m60207G28I2W860a802u0Y0t4M02W712W0000000F0_s0e2u0g0YNhu2i3y5QeB4BNENRyL6G00eWfTfCft1G3P2nKPgAyv3eDIw0lOvnxm2mRe30lW3G7o3G3w3G223W293lOeN8_2zUm_a0x0X3sO3hJ-YldsYO6yXm6W3i24FR0E0TWE1Q4F00000000y3_P3m0000000F0_
[2] => https://reklama-sev.com/
[3] => https://reklama-sev.com/advt_categories
[4] => https://youla.ru/
[5] => https://youla.ru/sevastopol

и т.д.
)

Из вывода в панели отладки видно, что ссылки на рекламные сайты начинаются с http://yabs.yandex.ru/count/ уберём эти ссылки при записи адресов в файл. Запись в файл у нас будет как добавление каждой строки из массива $arr2 с адресами в файл res/res.txt.
Опять воспользуемся для этого Помощником кода. Сначала добавим цикл для массива $arr2. Для этого выберем опять пункт дерева Конструкции -> Циклы -> цикл по всем элементам. Заменим в этой конструкции $arr на $arr2 и $value на $value2. Вместо строки // действия вставим добавление строки в файл. Для этого выберем в дереве Помощника кода пункт Текстовый файл -> Работа с файлом -> добавить строку к файлу.
В скрипт у нас добавиться код:

// добавить строку в текстовый файл
$textfile->add_string_to_file("c:/text.txt", "1234");

Заменим в этой функции "c:/text.txt" на "res/res.txt" и "1234" на $value2."\n", что бы функция в скрипте выглядела так:

// добавить строку в текстовый файл
$textfile->add_string_to_file("res/res.txt", $value2."\n");

Теперь добавим условие перед добавлением строки в файл, что бы не писать в него адреса рекламных сайтов. Выбираем в Помощнике кода Конструкции -> Ветвления -> выполнение по условию. В скрипт добавиться следующий код:

// условие
if ($varConditonal)
{
// действия
}

заменяем // действия на

// добавить строку в текстовый файл
$textfile->add_string_to_file(«res/res.txt», $value2.»\n»);

а $varConditonal на условие strpos($value2,»http://yabs.yandex.ru/count/»)===false так что в итоге наш код будет:

// условие
if (strpos($value2, "http://yabs.yandex.ru/count/")===false)
{
// добавить строку в текстовый файл
$textfile->add_string_to_file("res/res.txt", $value2."\n");
}

а весь скрипт будет выглядеть как:

// получить в массив данные из файла
// каждая строка элемент массива
$arr = file("data/keys.txt",FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);

// цикл по всем элементам
foreach ($arr as $value)
{
$browser->navigate("https://yandex.ru/");

$input->send_keyboard_input_by_name("text",$value."\n", "20:40");

$str=$anchor->get_all_hrefs_by_attribute("class","link link_theme_outer path__it",false,"<br>");

// разбить строку на элементы массива
// используя как разделитель ;
$arr2 = explode("<br>",$str);

// показать массив в панели отладки
print_r($arr2);

// цикл по всем элементам
foreach ($arr2 as $value2)
{
    // условие
    if (strpos("http://yabs.yandex.ru/count/")===false)
    {
      // добавить строку в текстовый файл
      $textfile->add_string_to_file("res/res.txt", $value2."\n");
    }
}
}

Если запустить скрипт на выполнение то в папке res появится файл res.txt с адресами с первой страницы выдачи Яндекса. Как видно из статьи Макрос, Контекстное меню и Помощник кода существенно упрощают написание скриптов автоматизации под свои задачи. Многие действия будут повторяться из скрипта в скрипт и разобравшись один раз с этими действиями вы легко сможете их использовать в других скриптах.

Любые вопросы по данной статье, Макросу, Контекстному меню или Помощнику кода можно задать у нас на форуме.

Посмотреть видео уроки на нашем канале в youtube.

4.4/5 - (7 голосов)

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

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.