scripts//prodvigenie_04_2026
/scripts//prodvigenie_04_2026
Содержимое папки
📁 Папок: 1 | 📄 Файлов: 6
index.php
<?php
$xhe_host = "127.0.0.1:7011";
// /////////////// ru XWeb Human Emulator ///////////////
require("../../Templates/init.php");
// Только необходимые функции
function removePrefixes($url)
{
$pattern = "/^(http:\/\/|https:\/\/|www\.)/i";
while (preg_match($pattern, $url)) {
$url = preg_replace($pattern, "", $url);
}
return $url;
}
function extractDomainPattern()
{
return '/(?:https?:\/\/)?(?:www\.)?([а-яА-Яa-zA-Z0-9.-]+)\.(?:[а-яА-Яa-zA-Z]{2,6})/';
}
// Инициализация
$browser->close_all_tabs();
usleep(500);
$browser->navigate("about:blank"); // Первая вкладка
echo $eror = "Сайта нет в выдаче <br>";
$pattern = extractDomainPattern();
$pr_s = 'ipgroup.by'; // Продвигаемый сайт
$region_search = 'гомель';
$sys_search = 'yandex.by';
$y_start = "<li";
$y_end = "</li>";
$g_sys_search = 'google.com';
$g_start = "<cite";
$g_end = "</span></cite></div></div></div></div><div";
$no_site = $pr_s . " ozon.by "; // Сайты для исключения из результатов
// Исключаемые сайты
$no_site = strtolower($no_site);
$no_site = preg_split("/[\s,]+/", $no_site);
$no_open = [];
foreach ($no_site as $site) {
if (preg_match($pattern, $site, $matches)) {
$no_open[] = removePrefixes($matches[0]);
}
}
// Чтение запросов из файла
$wordArray = file('text.txt', FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
if (!empty($wordArray)) {
$random_string = $wordArray[array_rand($wordArray)];
echo $random_string;
} else {
die("File is empty or could not be read.");
}
// Разбиваем строку по запятой
$words = explode(',', $random_string);
$special_regions = [
"россия", "оренбургская область", "ростовская область",
"ярославская область", "тульская область"
];
$region_search_0 = in_array($region_search, $special_regions, true) ? ["минск"] : [$region_search];
$findtext = trim($words[0]);
$sinonim = trim($words[1]);
// Открыть страницу поиска вторая вкладка
$browser->add_tab();
$browser->navigate($sys_search . "/search/", true, true);
$browser->wait(0);
// Проверка и установка региона
$isgeo = $webpage->get_body_inter_prefix_all('type_geo"><button', '</span></button></div>', true);
$pos = strrpos($isgeo, '>');
$isgeo = $pos !== false ? mb_strtolower(trim(substr($isgeo, $pos + 1))) : '';
echo $isgeo . " == " . $region_search_0[0] . "<br>";
if ($isgeo != $region_search_0[0]) {
$mouse->click_to_screen(203, 683); // регион
usleep(50000);
// Вставка региона
$browser->wait(0);
sleep(2);
$div->click_by_inner_html("Местоположение", false);
sleep(2);
$mouse->click_to_screen(658, 76); // адресная строка
sleep(1);
$clipboard->put_text($region_search_0[0]);
$mouse->click_to_screen(1055, 216);
sleep(1);
$mouse->click_to_screen(1255, 216);
sleep(2);
$keyboard->input($region_search_0[0], 10);
print_r($region_search_0);
usleep(1250000);
$mouse->click_to_screen(1050, 216);
sleep(1);
$mouse->click_to_screen(1050, 280);
sleep(1);
// Вставить Ctrl+V
$keyboard->set_ctrl_prefix(true);
$keyboard->key(86);
$keyboard->set_ctrl_prefix(false);
usleep(1000);
usleep(1000);
$btn->click_by_inner_text("Сохранить", false);
$mouse->move_on_screen(23, 67);
sleep(1);
$app->pause(1500);
}
// Поиск по синониму
$mouse->click_to_screen(1489, 70);
sleep(2);
$input->send_keyboard_input_by_name("text", $sinonim . " ", "20:40");
$mouse->click_to_screen(458, 125);
usleep(500000);
$keyboard->key(13);
sleep(1);
// Плавная прокрутка вместо резких PageDown/End
for ($scrollStep = 0; $scrollStep < 5; $scrollStep++) {
$keyboard->key(34); // Next (мягкая прокрутка)
usleep(50000); // 50ms между шагами
}
sleep(1);
$mouse->click_to_screen(1489, 70);
usleep(5000);
$keyboard->key(39);
usleep(1500000);
sleep(1);
// Копировать активное окно.
$mouse->click_to_screen(554, 823); // копировать активное окно
usleep(1000);
usleep(1000);
// Очистка и поиск по основному запросу
$mouse->click_to_screen(1489, 70);
usleep(5000);
$mouse->click_to_screen(460, 121);
usleep(5000);
$textarea->set_value_by_number(0, "");
sleep(2);
$input->send_keyboard_input_by_name("text", $findtext, "20:40");
sleep(1);
$keyboard->key(13);
// Плавная прокрутка вместо резких PageDown/End
for ($scrollStep = 0; $scrollStep < 5; $scrollStep++) {
$keyboard->key(34); // Next (мягкая прокрутка)
usleep(50000); // 50ms между шагами
}
usleep(2000);
// Сбор результатов
$sites = $webpage->get_body_inter_prefix_all($y_start, $y_end, true);
$sites = explode("<br>", $sites);
$full = [];
foreach ($sites as $site) {
if (preg_match($pattern, $site, $matches)) {
$full[] = removePrefixes(strtolower($matches[0]));
}
}
$final_result = array_values(array_unique(array_diff($full, $no_open)));
echo "<br>Можно открывать сайты ";
print_r($final_result);
echo "<br>Не открывать сайты ";
print_r($no_open);
// Открытие случайных двух сайтов
for ($random_s = 0; $random_s < min(2, count($final_result)); $random_s++) {
$num = $b->get_number_by_inner_text($final_result[$random_s], true);
if ($num === false) continue;
sleep(1);
$b->set_focus_by_number($num);
sleep(1);
$wy = $browser->get_vertical_scroll_pos() - 150;
$browser->set_vertical_scroll_pos($wy);
sleep(1);
$xn = $b->get_x_by_number($num);
$yn = $b->get_y_by_number($num);
$mouse->move($xn + 1, $yn + 1);
$mouse->click();
sleep(2);
$browser->wait($num = -1);
$browser->set_active_browser(2);
sleep(2);
// Копировать активное окно.
$mouse->click_to_screen(554, 823); // копировать активное окно
usleep(1000);
usleep(1000);
if ($browser->get_active_browser() == 2) {
$browser->close();
sleep(2);
$browser->set_active_browser(1);
}
}
// Поиск продвигаемого сайта
require_once("yandex search.php");
sleep(3);
// Навигация по целевому сайту
$x = $span->get_y_by_inner_text($pr_s, false) + 1;
$y = $span->get_x_by_inner_text($pr_s, false) + 1;
$mouse->move($x, $y);
sleep(2);
$span->click_by_inner_text($pr_s, false);
sleep(3);
$keyboard->key(35); // End (мягкая прокрутка)
// Прогулка по сайту
// Текущий URL
$current_url = $webpage->get_url();
echo "Текущий URL: " . $current_url . "<br>\n";
// Получаем домен (если нужно)
$domain = $webpage->get_domain("");
echo "Домен: " . $domain . "<br>\n";
// Массив ссылок
$int_links = [
['url' => '/#contact', 'text' => 'КОНТАКТЫ'],
['url' => '/services/remont/elektroins/', 'text' => 'Ремонт Электроинструмента'],
['url' => '/services/remont/ibp/', 'text' => 'Ремонт ИБП'],
['url' => '/services/remont/pc/', 'text' => 'Ремонт Компьютеров'],
['url' => '/services/remont/monitor/', 'text' => 'Ремонт Мониторов'],
['url' => '/services/remont/tv/', 'text' => 'Ремонт Телевизоров'],
['url' => '/services/remont/printer/', 'text' => 'Ремонт Принтеров'],
['url' => '/shreders/', 'text' => 'Уничтожители Документов'],
['url' => '/services/remont/', 'text' => 'РЕМОНТ']
];
// Извлекаем путь из текущего URL
$current_path = parse_url($current_url, PHP_URL_PATH);
echo "Путь текущей страницы: " . $current_path . "<br>\n\n";
// Удаляем элемент с совпадающим URL
foreach ($int_links as $key => $link) {
// Получаем путь из ссылки
$link_path = parse_url($link['url'], PHP_URL_PATH);
// Для якорных ссылок (например /#contact) parse_url вернет null
if ($link_path === null) {
$link_path = '';
}
echo "Ссылка: " . $link['url'] . " -> Путь: '" . $link_path . "'";
// Сравниваем пути
if ($link_path === $current_path) {
echo " <span style='color: red;'>[УДАЛЯЕТСЯ]</span>";
unset($int_links[$key]);
} else {
echo " <span style='color: green;'>[ОСТАЕТСЯ]</span>";
}
echo "<br>\n";
}
// Переиндексируем массив
$int_links = array_values($int_links);
print_r($int_links);
for ($k = 1; $k < 3; $k++) {
// Плавная прокрутка вместо резких PageDown/End
for ($scrollStep = 0; $scrollStep < 5; $scrollStep++) {
$keyboard->key(34); // Next (мягкая прокрутка)
usleep(50000); // 50ms между шагами
}
sleep(1);
// Копировать активное окно.
$mouse->click_to_screen(554, 823); // копировать активное окно
usleep(1000);
sleep(60);
$anchor->click_by_inner_html($int_links[$k]['text'], false);
sleep(2);
}
$anchor->click_by_inner_html("КОНТАКТЫ", false);
sleep(1);
$anchor->click_by_inner_html("КОНТАКТЫ", false);
sleep(10);
$mouse->click_to_screen(554, 823); // копировать активное окно
usleep(1000);
usleep(1000);
$browser->navigate('https://www.ipgroup.by', $use_cache = true, $use_wait = true);
sleep(15);
$browser->close_all_tabs();
/**
* Скрипт для парсинга результатов поиска Google с последующим переходом на найденные сайты
*
* Алгоритм работы:
* 1. Чтение поисковых запросов из text.txt
* 2. Поиск по синониму в Google
* 3. Очистка и поиск по основному запросу
* 4. Извлечение URL из результатов поиска
* 5. Исключение запрещенных сайтов
* 6. Переход на случайные сайты из результатов
*/
// ==================== НАСТРОЙКИ СКРИПТА ====================
/**
* Функция ожидания полной загрузки страницы
*
* @param object $browser Объект браузера
* @param int $timeout Таймаут ожидания в секундах
* @return bool Успешность загрузки
*/
function waitForPageLoad($browser, $timeout = 15) {
$start = time();
while (time() - $start < $timeout) {
$url = $browser->get_url();
if ($url != "about:blank" && !empty($url) && $browser->is_loaded()) {
return true;
}
usleep(500000); // Пауза 0.5 секунды
}
return false;
}
// ==================== НАСТРОЙКА БРАУЗЕРА ====================
$browser->close_all_tabs();
usleep(5000);
$browser->navigate('about:blank');
$browser->add_tab();
// ==================== ФОРМИРОВАНИЕ СПИСКА ЗАПРЕЩЕННЫХ САЙТОВ ====================
// Регулярное выражение для извлечения доменов из URL
$pattern = '/(?:https?:\/\/)?(?:www\.)?([а-яА-Яa-zA-Z0-9.-]+)\.(?:[а-яА-Яa-zA-Z]{2,6})/';
// Разбиваем строку с запрещенными сайтами в массив
//$no_site = preg_split("/[\s,]+/", $no_site);
$no_Urls = array();
for ($l = 0; $l < count($no_site); $l++) {
if (preg_match($pattern, $no_site[$l], $matches)) {
$no_Urls[] = mb_strtolower(removePrefixes($matches[0]));
}
}
// ==================== ПЕРВЫЙ ПОИСК (ПО СИНОНИМУ) ====================
// Переход на Google
$browser->navigate($g_sys_search, $use_cache = true, $use_wait = true);
// Ввод синонима в поле поиска
$textarea->send_keyboard_input_by_name("q", $sinonim . " ", "20:40");
$keyboard->key(13); // Enter для отправки запроса
sleep(1);
// Плавная прокрутка вместо резких PageDown/End
for ($scrollStep = 0; $scrollStep < 5; $scrollStep++) {
$keyboard->key(34); // Next (мягкая прокрутка)
usleep(50000); // 50ms между шагами
}
sleep(1);
// Клик для копирования (координаты привязаны к разрешению экрана)
$mouse->click_to_screen(552, 833); // Копировать активное окно
usleep(50000);
usleep(50000);
// ==================== ВТОРОЙ ПОИСК (ПО ОСНОВНОМУ ЗАПРОСУ) ====================
$browser->set_active_browser(0, true); // Переход на первую вкладку
usleep(50000);
$browser->set_active_browser(1, true); // Переход на вторую вкладку
usleep(1000000);
$textarea->set_value_by_name("q", ""); // Очистка поля поиска
sleep(2);
// Ввод основного запроса
$textarea->send_keyboard_input_by_name("q", $findtext, "20:40");
$keyboard->key(13); // Enter
sleep(1);
// Плавная прокрутка вместо резких PageDown/End
for ($scrollStep = 0; $scrollStep < 5; $scrollStep++) {
$keyboard->key(34); // Next (мягкая прокрутка)
usleep(50000); // 50ms между шагами
}
sleep(1);
// ==================== ИЗВЛЕЧЕНИЕ URL ИЗ РЕЗУЛЬТАТОВ ПОИСКА ====================
// Извлечение блоков с результатами поиска
$sites = $webpage->get_body_inter_prefix_all($g_start, $g_end, true);$Urls = array();
$sites = explode("<br>", $sites);
// Проверка, что результаты найдены
if (empty($sites) || count($sites) < 2) {
echo "Массив пуст. Обновляем страницу и пробуем снова...\n";
$browser->refresh();
sleep(2);
// Плавная прокрутка вместо резких PageDown/End
for ($scrollStep = 0; $scrollStep < 5; $scrollStep++) {
$keyboard->key(34); // Next (мягкая прокрутка)
usleep(50000); // 50ms между шагами
} sleep(1);
$g_start = "<cite";
$g_end = "</span></cite></div></div></div></div><div";
// Повторное извлечение результатов
$sites = $webpage->get_body_inter_prefix_all($g_start, $g_end, true);
$sites = explode("<br>", $sites);
} else {
echo "Массив не пуст\n";
}
// Извлечение доменов из результатов
for ($l = 0; $l < count($sites); $l++) {
if (preg_match($pattern, $sites[$l], $matches)) {
$Urls[] = mb_strtolower(removePrefixes($matches[0]));
}
}
// Удаление дубликатов
$Urls = array_unique($Urls);
$Urls = array_values($Urls);
// Исключение запрещенных сайтов
$final_result = array_diff($Urls, $no_Urls);
$final_result = array_values($final_result);
// Вывод итогового списка сайтов
//print_r($final_result);
// ==================== ПЕРЕХОД НА СЛУЧАЙНЫЕ САЙТЫ ====================
// Переход на первый сайт из результатов
$anchor->set_focus_by_inner_text($final_result[0], false);
sleep(1);
$keyboard->key(13); // Enter для перехода
sleep(2);
$browser->wait(0);
sleep(2);
$mouse->click_to_screen(552, 833); // Копировать активное окно
usleep(50000);
usleep(50000);
// Закрытие вкладки, если открылась новая
if ($browser->get_active_browser() == 2) {
$browser->close();
}
// Переход на второй сайт из результатов
$anchor->set_focus_by_inner_text($final_result[1], false);
sleep(1);
$keyboard->key(13);
sleep(2);
$browser->wait(0);
sleep(2);
$mouse->click_to_screen(552, 833); // Копировать активное окно
usleep(50000);
usleep(50000);
if ($browser->get_active_browser() == 2) {
$browser->close();
}
// ==================== РАБОТА С ВНУТРЕННИМИ ССЫЛКАМИ ====================
// Подключение дополнительного файла обработки, если существует
if (file_exists("google_search.php")) {
require_once("google_search.php");
} else {
echo "Файл google_search.php не найден\n";
}
sleep(2);
$browser->wait(-1);
sleep(2);
$keyboard->key(35);sleep(1);
$mouse->click_to_screen(554, 823); // копировать активное окно
usleep(1000);
usleep(1000);
// Прогулка по сайту
// Текущий URL
$current_url = $webpage->get_url();
echo "Текущий URL: " . $current_url . "<br>\n";
// Получаем домен (если нужно)
$domain = $webpage->get_domain("");
echo "Домен: " . $domain . "<br>\n";
// Массив ссылок
$int_links = [
['url' => '/#contact', 'text' => 'КОНТАКТЫ'],
['url' => '/services/remont/elektroins/', 'text' => 'Ремонт Электроинструмента'],
['url' => '/services/remont/ibp/', 'text' => 'Ремонт ИБП'],
['url' => '/services/remont/pc/', 'text' => 'Ремонт Компьютеров'],
['url' => '/services/remont/monitor/', 'text' => 'Ремонт Мониторов'],
['url' => '/services/remont/tv/', 'text' => 'Ремонт Телевизоров'],
['url' => '/services/remont/printer/', 'text' => 'Ремонт Принтеров'],
['url' => '/shreders/', 'text' => 'Уничтожители Документов'],
['url' => '/services/remont/', 'text' => 'РЕМОНТ']
];
// Извлекаем путь из текущего URL
$current_path = parse_url($current_url, PHP_URL_PATH);
echo "Путь текущей страницы: " . $current_path . "<br>\n\n";
// Удаляем элемент с совпадающим URL
foreach ($int_links as $key => $link) {
// Получаем путь из ссылки
$link_path = parse_url($link['url'], PHP_URL_PATH);
// Для якорных ссылок (например /#contact) parse_url вернет null
if ($link_path === null) {
$link_path = '';
}
echo "Ссылка: " . $link['url'] . " -> Путь: '" . $link_path . "'";
// Сравниваем пути
if ($link_path === $current_path) {
echo " <span style='color: red;'>[УДАЛЯЕТСЯ]</span>";
unset($int_links[$key]);
} else {
echo " <span style='color: green;'>[ОСТАЕТСЯ]</span>";
}
echo "<br>\n";
}
// Переиндексируем массив
$int_links = array_values($int_links);
//print_r($int_links);
for ($k = 1; $k < 3; $k++) {
// Плавная прокрутка вместо резких PageDown/End
for ($scrollStep = 0; $scrollStep < 5; $scrollStep++) {
$keyboard->key(34); // Next (мягкая прокрутка)
usleep(50000); // 50ms между шагами
}
sleep(1);
// Копировать активное окно.
$mouse->click_to_screen(554, 823); // копировать активное окно
usleep(1000);
sleep(60);
$anchor->click_by_inner_html($int_links[$k]['text'], false);
sleep(2);
}
$anchor->click_by_inner_html("КОНТАКТЫ", false);
sleep(1);
$anchor->click_by_inner_html("КОНТАКТЫ", false);
sleep(10);
$mouse->click_to_screen(554, 823); // копировать активное окно
usleep(1000);
usleep(1000);
$browser->navigate('https://www.ipgroup.by', $use_cache = true, $use_wait = true);
sleep(15);
$browser->close_all_tabs();
$app->quit();
?>