load(); $email = $_ENV['EMAIL']; $password = $_ENV['PASSWORD']; // Crear ChromeOptions $options = new ChromeOptions(); $options->addArguments([ '--start-maximized', 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/123.0.6312.122 Safari/537.36', '--disable-blink-features=AutomationControlled' ]); $host = 'http://localhost:4444/wd/hub'; $capabilities = DesiredCapabilities::chrome(); $capabilities->setCapability(ChromeOptions::CAPABILITY, $options); $capabilities->setCapability('pageLoadStrategy', 'normal'); //DEFINIMOS LOS SITIOS OFICIALES $sitios_oficiales = [ 'https://www.gugler.com.ar/', 'https://mi.gugler.com.ar/', 'https://campusvirtual.gugler.com.ar/' ]; //COMENZAMOS EL TEST try { $palabra_buscar = "gugler"; $logs =""; // Crear el cliente de Selenium echo "0 - Ejecutando test de monitoreo del sitio oficial en Chrome.\n"; //$driver = RemoteWebDriver::create($host, $capabilities); // opcion para las capabilities. $driver = RemoteWebDriver::create($host, [ 'browserName' => 'chrome', 'goog:chromeOptions' => $options->toArray(), 'pageLoadStrategy' => 'normal' ]); $wait = new WebDriverWait($driver, 10); $driver->executeScript("Object.defineProperty(navigator, 'languages', {get: () => ['es-ES', 'es']})"); $driver->executeScript("Object.defineProperty(navigator, 'plugins', {get: () => [1, 2, 3]})"); $driver->manage()->window()->maximize(); // Paso 1: Navegar a Google $driver->get('https://www.google.com/'); echo "1 - Ingresando al buscador google.\n"; $driver->executeScript("window.scrollTo(0, 500)"); $searchBox = $driver->findElement(WebDriverBy::name('q')); // Paso 2: Ingresar la palabra "gugler" en el cuadro de búsqueda $letras = str_split($palabra_buscar); foreach ($letras as $letra) { $searchBox->sendKeys($letra); sleep(rand(1, 2)); # Simula escritura } $searchBox->submit(); echo "2 - Se realizó la búsqueda de la palabra --> ". $palabra_buscar .".\n"; // Paso 3: Esperar a que se carguen los resultados sleep(2); // Esperar a que se carguen los resultados $captcha = $driver->findElements(WebDriverBy::id('captcha-form')); if ($captcha) { echo "⚠️ Captcha detectado, se espera 15 segundos para completarlo.\n"; sleep(15); } // Verificar si el primer resultado es uno de los sitios oficiales $wait->until( WebDriverExpectedCondition::presenceOfElementLocated( WebDriverBy::cssSelector('div#search a[href^="http"]') ) ); // Obtener el primer resultado $resultados = $driver->findElements(WebDriverBy::cssSelector('div#center_col a[href^="http"]')); $primero = $resultados[0]->getAttribute('href'); // Se muestran todos los resultados echo "\n"; $lista_resultados = ""; foreach ($resultados as $index => $elemento) { $url = $elemento->getAttribute('href'); // Valor por defecto $esPatrocinado = ""; // Buscar si el enlace está dentro de un bloque de anuncios (#tads o #tadsb) $anuncios = $elemento->findElements( WebDriverBy::xpath('ancestor::*[@id="tads" or @id="tadsb"]') ); if (count($anuncios) > 0) { $esPatrocinado = "(Patrocinado)"; } $lista_resultados .= "Resultado #" . sprintf("%2d",($index + 1)) . " " . $esPatrocinado . ": " . substr($url,0,50) . "\n"; echo " Resultado #" . sprintf("%2d",($index + 1)) . " " . $esPatrocinado . ": " . substr($url,0,50) . "\n"; } echo "\n"; // Comprobamos si el primer resultado está en nuestra lista de sitios oficiales echo "3 - Comprobando el resultado con la lista de sitios oficiales.\n"; echo "4 - Resultado del test: "; if (in_array($primero, $sitios_oficiales)) { $detectado = false; $logs .= "✅ ¡Test exitoso! El primer resultado es un sitio oficial --> ". $primero .".\n"; } else { $detectado = true; $logs .= "❌ Test fallido. El primer resultado no es un sitio oficial --> ". $primero .".\n"; } echo $logs; echo "5 - Se realizó una captura de pantalla.\n"; $screenshotPath = './capturas/google_search.png'; // Asegúrate de que este directorio sea escribible $driver->takeScreenshot($screenshotPath); // Se realiza una captura de pantalla echo "6 - Se envia correo electrónico con la captura de pantalla del sitio detectado.\n"; if ($detectado) { $mail = new PHPMailer(true); try { // Configuración del servidor SMTP $mail->isSMTP(); $mail->Host = 'smtp.gmail.com'; $mail->SMTPAuth = true; $mail->Username = $email; // Tu correo de Gmail $mail->Password = $password; // Tu contraseña $mail->SMTPSecure = PHPMailer::ENCRYPTION_STARTTLS; $mail->Port = 587; $mail->isHTML(true); // Remitente y destinatario $mail->setFrom('ccharlaselenium@gmail.com', 'Monitoreo Buscador - Posible phishing de sitio Gugler'); $mail->addAddress('exequiel84@gmail.com'); // Destinatario // Asunto y cuerpo del correo $mail->Subject = 'Monitoreo Buscador - Posible phishing de sitio Gugler'; $cuerpo_mail = 'Se ha detectado un posible intento de phishing del sitio oficial que se esta comprobando. Se incluye una captura de pantalla con los resultados de la prueba y el listado completo de resultados.

Resultado del test:

'; $cuerpo_mail .= $logs; $cuerpo_mail .= "

Lista de resultados:

"; $cuerpo_mail .= nl2br($lista_resultados); $cuerpo_mail .= "
Quedamos a disposición ante cualquier consulta.
Saludos cordiales.
Sector de Monitoreo."; $mail->Body = $cuerpo_mail; // Adjuntar la captura de pantalla $mail->addAttachment($screenshotPath); // Enviar el correo $mail->send(); echo '7 - Se envió correo con el caso detectado.\n'; } catch (Exception $e) { echo "7 - Hubo un error al enviar el correo: {$mail->ErrorInfo}"; } } else { echo "7 - No se envió correo ya que no se detectó un sitio no oficial.\n";} } catch (Exception $e) { echo "Importante, hubo un error el test: " . $e->getMessage() . "\n"; } finally { // Cerrar el driver $driver->quit(); } ?>