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

scripts//prodvigenie_04_2026

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

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