Как написать скрипт с помощью Макроса, Контекстного меню и Помощника кода.
Напишем с помощью Макроса, Контекстного меню и Помощника кода скрипт, который будет разбирать выдачу Яндекса, по заданным ключевым запросам.
Исходная задача.
У нас есть файл с ключевыми словами keys.txt в формате: одна строка — одна ключевая фраза, то есть он выглядит так:
доска объявлений
доска бесплатных объявлений
подать объявление
объявление бесплатно
доска бесплатный
и т.д.
Эти ключевые фразы мы будем вводить с помощью программы в поле поиска и разбирать выдачу, то есть получать из неё адреса сайтов и сохранять эти адреса в файл с результатами res.txt.
Таким образом наш скрипт должен будет выполнять следующие действия.
1. Чтение из файла поисковых запросов.
2. Ввод поисковых запросов в поле поиска Яндекса.
3. Разбор поисковой выдачи.
4. Сохранение результатов в файл.
Действия на странице Яндекса мы можем записать с помощью Макроса или Контекстного меню, а работу файлом выполним с помощью Помощника кода.
C чего начать?
В папке My Scripts создадим новую папку для нашего скрипта. Адрес к папке My Scripts будет примерно такой C:\XWeb Studio\Human Emulator Studio\My Scripts. Всё зависит от того куда вы установили саму программу. Создаём в ней папку yandex_parser.
Обновляем в панели Быстрый старт дерево и видим в нём созданную нами папку.
Далее создаём новый php скрипт.
Далее через контекстное меню сохраняем наш скрипт в папку yandex_parser с именем yandex_parser.
Теперь в самом скрипте удалим всё лишнее и отредактируем путь к папке с шаблонами. После всех наших действий в папке yandex_parser будет лежать скрипт yandex_parser.php, с кодом который будет выглядеть так:
1 2 3 4 5 6 7 8 9 10 11 |
<?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.
В наш скрипт будет добавлен следующий код:
1 2 3 4 5 6 |
$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»);
В скрипте у нас будет следующий код:
1 2 3 |
$browser->navigate("https://yandex.ru/"); $input->send_keyboard_input_by_name("text","", "20:40"); |
Видео про использование контекстного меню на нашем канале.
Работа с Помощником кода.
Теперь мы автоматизируем все действия с файлом с помощью Помощника кода. Для начала откроем Помощник кода если он у вас ещё не открыт. Главное меню программы пункт Вид -> Панель Помощник Кода. Обновим её что бы увидеть все доступные нам действия в Помощнике кода. Для этого нажимаем на иконку в верхней части панели:
Для начала нам нужно прочитать ключевые запросы из файла. Выбираем пункт в дереве Текстовый Файл -> Работа с файлом -> прочитать файл в массив.
Перед тем как выбрать этот пункт дерева установим каретку курсора в редакторе скрипта выше кода который у нас уже там есть добавить в скрипт следующий код:
1 2 3 |
// получить в массив данные из файла // каждая строка элемент массива $arr = file("путь к файлу",FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES); |
Нам остаётся только заменить в этом коде «путь к файлу» на «data/keys.txt». Теперь для того что бы ввести все поисковые запросы из файла в поле поиска Яндекса нам нужно на основе нашего массива организовать цикл.
Для этого в дереве Помощник Кода выберем пункт Конструкции -> Циклы -> цикл по всем элементам. В скрипт добавиться следующий код:
1 2 3 4 5 |
// цикл по всем элементам foreach ($arr as $value) { // действия } |
Заменим // действия на код который мы записали с помощью Макроса или Контекстного меню и вставим в функцию $input->send_keyboard_input_by_name(«text»,»», «20:40»); ввод $value, так что бы на конце у нас был «\n». В итоге у нас получиться следующий скрипт:
1 2 3 4 5 6 7 8 9 10 11 |
// получить в массив данные из файла // каждая строка элемент массива $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= в итоге наш код будет выглядеть так:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
// получить в массив данные из файла // каждая строка элемент массива $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» для того что бы каждый адрес записался в файл с новой строки. Если мы желаем убрать лишнее или выполнить какие то другие действия с полученными адресами, то нам необходимо полученную строку разбить в массив. Для этого воспользуемся снова Помощником кода. Выберем пункт дерева Конструкции -> Массивы -> разбить строку на элементы массива. В наш скрипт добавиться следующий код:
1 2 3 |
// разбить строку на элементы массива // используя как разделитель ; $arr = explode(";",$str) |
Заменим «;» на «<br>» и переименуем массив $arr в $arr2, так как выше в скрипте мы уже работаем с массивом $arr.
Для того что бы перед записью посмотреть содержимое массива выведем это содержимое в панель отладки. В этом нам снова поможет Помощник кода. Выбираем в дереве Конструкции -> Массивы -> показать массив в панели отладки. в наш скрипт добавить следующий код:
1 2 |
// показать массив в панели отладки print_r($arr); |
заменяем $arr на $arr2. Код нашего скрипта будет такой:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
// получить в массив данные из файла // каждая строка элемент массива $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); } |
Запускам скрипт на выполнение. В панели отладки будет следующий текст:
1 2 3 4 5 6 7 8 9 10 11 |
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. Вместо строки // действия вставим добавление строки в файл. Для этого выберем в дереве Помощника кода пункт Текстовый файл -> Работа с файлом -> добавить строку к файлу.
В скрипт у нас добавиться код:
1 2 3 4 5 6 7 |
// добавить строку в текстовый файл $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"); |
Теперь добавим условие перед добавлением строки в файл, что бы не писать в него адреса рекламных сайтов. Выбираем в Помощнике кода Конструкции -> Ветвления -> выполнение по условию. В скрипт добавиться следующий код:
1 2 3 4 5 |
// условие if ($varConditonal) { // действия } |
заменяем // действия на
// добавить строку в текстовый файл
$textfile->add_string_to_file(«res/res.txt», $value2.»\n»);
а $varConditonal на условие strpos($value2,»http://yabs.yandex.ru/count/»)===false так что в итоге наш код будет:
1 2 3 4 5 6 |
// условие if (strpos($value2, "http://yabs.yandex.ru/count/")===false) { // добавить строку в текстовый файл $textfile->add_string_to_file("res/res.txt", $value2."\n"); } |
а весь скрипт будет выглядеть как:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
// получить в массив данные из файла // каждая строка элемент массива $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.
Добавить комментарий
Для отправки комментария вам необходимо авторизоваться.