scripts//prodvigenie_04_2026
/scripts//prodvigenie_04_2026
Содержимое папки
📁 Папок: 1 | 📄 Файлов: 9
int_site.php
<?php
$xhe_host = "127.0.0.1:7011";
// /////////////// ru XWeb Human Emulator ///////////////
require("../../Templates/init.php");
$browser->close_all_tabs();
// ------------------ ШАГ 1: Открыть сайт $prs ------------------
$browser->set_wait_params(10, 2);
//+=================
// ------------------ ШАГ 1: Открыть сайт $prs ------------------
$currentUrl = $webpage->get_url();
echo "Шаг 1: Открываем сайт ...\n";
echo "Сайт загружен. Текущий URL: " . $currentUrl . "\n\n";
// Домен открытого сайта
$prs = $webpage->get_domain($currentUrl);
echo "Домен сайта: " . $prs . "\n\n";
// ------------------ ШАГ 2: Открыть 3 внутренние ссылки по 30 сек ------------------
echo "Шаг 2: Открываем 4 внутренние ссылки...\n";
// Получаем количество ссылок на сайте, содержащих "$prs"
$links = $anchor->get_all_internal_inner_texts_and_hrefs($prs, false);
$links = explode("<br>", $links);
// Функция для преобразования массива в строки вида "ссылка|текст"
function convertArrayToLines($array) {
$result = [];
$count = count($array);
// Проверяем, что массив содержит пары
if ($count % 2 != 0) {
echo "Предупреждение: Массив содержит нечетное количество элементов\n";
}
// Проходим по массиву парами (ссылка, текст)
for ($i = 0; $i < $count - 1; $i += 2) {
$link = trim($array[$i]);
$text = isset($array[$i + 1]) ? trim($array[$i + 1]) : '';
// Создаем строку только если текст не пустой и ссылка не пустая
if (!empty($text) && !empty($link)) {
$result[] = $link . '|' . $text;
}
}
return $result;
}
// Создаем новый массив из строк
$newArray = convertArrayToLines($links);
// ------------------ УДАЛЕНИЕ ДУБЛИКАТОВ ------------------
echo "=== Удаление дубликатов ===\n";
$uniqueArray = array_unique($newArray);
$duplicatesCount = count($newArray) - count($uniqueArray);
echo "Найдено дубликатов: " . $duplicatesCount . "\n";
$newArray = array_values($uniqueArray);
// ------------------ УДАЛЕНИЕ ТЕКУЩЕГО URL ИЗ МАССИВА ------------------
echo "=== Удаление текущего URL из списка ссылок ===\n";
echo "Текущий URL: " . $currentUrl . "\n";
$newArray = array_filter($newArray, function($item) use ($currentUrl) {
$parts = explode('|', $item, 2);
$link = $parts[0];
// Удаляем ссылку, если она совпадает с текущим URL
return $link !== $currentUrl;
});
// Переиндексация массива
$newArray = array_values($newArray);
echo "Удалена ссылка с текущим URL. Осталось ссылок: " . count($newArray) . "\n";
// ------------------ ПРОВЕРКА ДОМЕНОВ И ДОБАВЛЕНИЕ $prs ------------------
echo "=== Проверка доменов ===\n";
$processedArray = [];
foreach ($newArray as $item) {
// Разбиваем строку на ссылку и текст
$parts = explode('|', $item, 2);
$link = $parts[0];
$text = isset($parts[1]) ? $parts[1] : '';
// Проверяем домен
echo "Получаем домен для ссылки: " . $link . " -> ";
$domen_link = $webpage->get_domain($link);
echo $domen_link . "\n";
// Если домен пустой или ссылка начинается с /, добавляем $prs
if (empty($domen_link) || strpos($link, '/') === 0) {
$oldLink = $link;
// Добавляем https://$prs, если ссылка начинается с / или относительная
if (strpos($link, '/') === 0) {
$link = "https://".$prs . $link;
} elseif (strpos($link, 'http') !== 0) {
$link = "https://".$prs ."/" . $link;
}
echo " Исправлена ссылка: " . $oldLink . " -> " . $link . "\n";
}
// Добавляем обработанную ссылку в новый массив
$processedArray[] = $link . '|' . $text;
}
$newArray = $processedArray;
// ------------------ ФИЛЬТРАЦИЯ: ТОЛЬКО ВНУТРЕННИЕ ССЫЛКИ (БЕЗ ПОДДОМЕНОВ) ------------------
echo "=== Фильтрация: оставляем только ссылки " . $prs . " (без поддоменов) ===\n";
$filteredArray = array_filter($newArray, function($item) use ($prs) {
global $webpage;
$parts = explode('|', $item, 2);
$link = $parts[0];
// Извлекаем домен
$domain = $webpage->get_domain($link);
// Если домен пустой - относительная ссылка, оставляем
if (empty($domain)) {
return true;
}
// Основной домен без www
if ($domain === $prs) {
return true;
}
// Домен с www
if ($domain === "www." . $prs) {
return true;
}
// Проверяем, не является ли это поддоменом
// Если домен содержит точку и заканчивается на .$prs, это поддомен
$subdomainPattern = '/\.' . preg_quote($prs, '/') . '$/';
if (preg_match($subdomainPattern, $domain)) {
// Это поддомен - исключаем
return false;
}
return false;
});
$filteredCount = count($newArray) - count($filteredArray);
echo "Удалено внешних ссылок и поддоменов: " . $filteredCount . "\n";
$newArray = array_values($filteredArray);
// ------------------ ВЫВОД РЕЗУЛЬТАТА ------------------
echo "\n=== Итоговый список ссылок (всего: " . count($newArray) . ") ===\n";
foreach ($newArray as $index => $line) {
$parts = explode('|', $line, 2);
echo ($index + 1) . ". Ссылка: " . $parts[0] . "\n";
echo " Текст: " . (isset($parts[1]) ? $parts[1] : '') . "\n";
}
$linksOpened = 0;
$maxLinks = min(7, count($newArray)); // Открываем не более 7 ссылок
if ($maxLinks == 0) {
echo "ОШИБКА: Не найдено ни одной внутренней ссылки для открытия!\n";
} else {
// Открываем ссылки (начиная с 4-й, т.к. 0-3 уже открыты)
for ($i = 3; $i < $maxLinks; $i++) {
// Разбиваем строку на ссылку и текст
$parts = explode('|', $newArray[$i], 2);
$link = $parts[0];
$text = isset($parts[1]) ? $parts[1] : '';
echo "\n--- Обработка ссылки " . ($i + 1) . " из " . $maxLinks . " ---\n";
echo "Ссылка: " . $link . "\n";
echo "Текст: " . $text . "\n";
try {
// Открываем новую вкладку
$tabId = $browser->add_tab();
echo "Открыта новая вкладка: " . $tabId . "\n";
// Переходим по ссылке
$browser->navigate($link);
$browser->set_wait_params(10, 2);
// Проверяем, загрузилась ли страница
$currentUrl = $webpage->get_url();
echo "Страница загружена. Текущий URL: " . $currentUrl . "\n";
if (strpos($currentUrl, $prs) === false) {
echo "ПРЕДУПРЕЖДЕНИЕ: Страница загружена, но URL не содержит " . $prs . "\n";
}
echo "Ожидание и скроллинг...\n";
// Скроллинг страницы
for ($dn = 0; $dn < 3; $dn++) {
$browser->set_vertical_scroll_pos($browser->get_vertical_scroll_pos() + 800);
usleep(100000); // Задержка между скроллами
}
sleep(1);
// Дополнительный скроллинг
$browser->set_vertical_scroll_pos($browser->get_vertical_scroll_pos() + 800);
usleep(100000);
// Эмуляция нажатия клавиши вверх
$keyboard->key(38);
usleep(100000);
// Клик в указанные координаты
$mouse->click_to_screen(546, 840);
usleep(100000);
sleep(2);
// Закрываем вкладку
echo "Закрываем вкладку...\n";
$browser->close();
$linksOpened++;
echo "Ссылка " . ($i + 1) . " успешно обработана.\n";
} catch (Exception $e) {
echo "ОШИБКА при обработке ссылки " . ($i + 1) . ": " . $e->getMessage() . "\n";
// Пытаемся закрыть вкладку в случае ошибки
try {
$browser->close();
} catch (Exception $e2) {
echo "Не удалось закрыть вкладку: " . $e2->getMessage() . "\n";
}
}
}
}
echo "\nИтого открыто внутренних ссылок: " . $linksOpened . " из " . $maxLinks . "\n\n";
// ------------------ ШАГ 3: Открыть целевую ссылку ------------------
echo "Шаг 3: Ищем и открываем целевую ссылку...\n";
$targetTexts = ['контакты', 'регистрация', 'корзина', 'услуги', 'цены'];
$targetUrl = null;
$targetFound = false;
$targetText = '';
// Ищем ссылку по тексту
foreach ($targetTexts as $text) {
try {
$count = count($targetTexts);
if ($count > 0) {
$targetUrl = $anchor->get_by_inner_text($text, false, 0);
$targetText = $text;
echo " Найдена ссылка с текстом: '" . $text . "' (найдено: " . $count . " шт.)\n";
echo " URL: " . $targetUrl . "\n";
$targetFound = true;
break;
}
} catch (Exception $e) {
echo " Ошибка при поиске по тексту '" . $text . "': " . $e->getMessage() . "\n";
}
}
// Если не найдено по тексту, ищем по href
if (!$targetFound) {
foreach ($targetTexts as $text) {
try {
$count = $anchor->get_count_by_href($text, false);
if ($count > 0) {
$targetUrl = $anchor->get_by_href($text, false, 0);
$targetText = $text;
echo " Найдена ссылка по href, содержащему: '" . $text . "' (найдено: " . $count . " шт.)\n";
echo " URL: " . $targetUrl . "\n";
$targetFound = true;
break;
}
} catch (Exception $e) {
echo " Ошибка при поиске по href '" . $text . "': " . $e->getMessage() . "\n";
}
}
}
// Если ссылка найдена, переходим по ней
if ($targetFound && $targetUrl !== null && $targetUrl !== "") {
echo "\n Переходим по целевой ссылке: " . $targetUrl . "\n";
try {
// Проверяем, полный ли URL
if (strpos($targetUrl, 'https') !== 0) {
if (strpos($targetUrl, '/') === 0) {
$targetUrl = "https://" . $prs . $targetUrl;
} else {
$targetUrl = "https://" . $prs . "/" . $targetUrl;
}
echo " Исправлен URL: " . $targetUrl . "\n";
}
// Отправляем событие onclick
$anchor->send_event_by_inner_text($targetText, true, "onclick");
sleep(2);
// Кликаем по ссылке
$anchor->click_by_inner_text($targetText, true);
$browser->set_wait_params(10, 2);
// Клик в указанные координаты
$mouse->click_to_screen(546, 840);
usleep(100000);
sleep(2);
echo " Целевая страница загружена. Текущий URL: " . $webpage->get_url() . "\n";
} catch (Exception $e) {
echo " ОШИБКА при переходе по целевой ссылке: " . $e->getMessage() . "\n";
}
} else {
echo " Целевая ссылка не найдена.\n";
}
echo "\n" . str_repeat("=", 60) . "\n";
echo "Сценарий успешно выполнен!\n";
echo "Статистика:\n";
echo "- Открыто внутренних ссылок: " . $linksOpened . "\n";
echo "- Найдено целевых ссылок: " . ($targetFound ? "Да" : "Нет") . "\n";
echo str_repeat("=", 60) . "\n";
// Завершаем работу с эмулятором
$app->quit();
?>