Файловый менеджер

scripts//prodvigenie_04_2026

/scripts//prodvigenie_04_2026
На уровень выше

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();
?>
Кодировка: UTF-8 Символов: 23,616 Строк: 587