¿Cómo Encontrar Enlaces Rotos Usando Selenium WebDriver?

¿Qué pensamientos vienen a la mente cuando te encuentras con Hipervínculos 404/Página No encontrada / Muertos en un sitio web? Aargh! Le resultaría molesto cuando se encuentra con hipervínculos rotos, que es la única razón por la que debe centrarse continuamente en eliminar la existencia de enlaces rotos en su producto web (o sitio web). En lugar de una inspección manual, puede aprovechar la automatización para probar enlaces rotos utilizando Selenium WebDriver.

 Roto

Fuente

Cuando un enlace en particular se rompe y un visitante llega a la página, afecta a la funcionalidad de esa página y resulta en una experiencia de usuario deficiente. Los enlaces muertos podrían dañar la credibilidad de tu producto, ya que «podrían» dar la impresión a tus visitantes de que hay un enfoque mínimo en la experiencia.

Si su producto web tiene muchas páginas (o enlaces) que dan lugar a un error 404 (o página no encontrada), las clasificaciones de productos en los motores de búsqueda (por ejemplo, Google) también se verán gravemente afectadas. La eliminación de enlaces muertos es una de las partes integrales de la actividad de SEO (Optimización de motores de búsqueda).

En esta parte de la serie de tutoriales de Selenium WebDriver, profundizamos en encontrar enlaces rotos usando Selenium WebDriver. Hemos demostrado pruebas de enlaces rotos usando Selenium Python, Selenium Java, Selenium C # y Selenium PHP.

Introducción a los enlaces rotos en Pruebas web

En términos simples, los enlaces rotos (o enlaces muertos) en un sitio web (o aplicación web) son enlaces a los que no se puede acceder y que no funcionan como se esperaba. Los enlaces podrían estar inactivos temporalmente debido a problemas del servidor o configurados incorrectamente en el back-end.

404 - No se Encontró la Página

Fuente

Aparte de las páginas que resultan en un error 404, otros destacados ejemplos de enlaces rotos son malformaciones Url, enlaces a contenido (por ejemplo, documentos, pdf, imágenes, etc.) que se hayan movido o eliminado.

Razones prominentes para los enlaces rotos

Estas son algunas de las razones comunes detrás de la aparición de enlaces rotos (enlaces muertos o enlaces podridos):

  • URL incorrecta o mal escrita introducida por el usuario.
  • Los cambios estructurales en el sitio web (es decir, enlaces permanentes) con redirecciones de URL o redirecciones internas no están configurados correctamente.
  • Enlaces a contenido como videos, documentos, etc. que se mueven o se eliminan. Si el contenido se mueve, los «enlaces internos» deben redirigirse a los enlaces designados.
  • Tiempo de inactividad temporal del sitio web debido al mantenimiento del sitio que hace que el sitio web sea temporalmente inaccesible.
  • Etiquetas HTML rotas, errores de JavaScript, personalizaciones HTML/CSS incorrectas, elementos incrustados rotos, etc., dentro de la página principal, puede llevar a enlaces rotos.
  • Las restricciones de geolocalización impiden el acceso al sitio web desde ciertas direcciones IP (si están en la lista negra) o países específicos del mundo. Las pruebas de geolocalización con Selenium ayudan a garantizar que la experiencia se adapte a la ubicación (o país) desde donde se accede al sitio.

¿Por qué debería comprobar los enlaces rotos?

Los enlaces rotos son un gran problema para los visitantes que llegan a tu sitio web. Estas son algunas de las principales razones por las que debe verificar si hay enlaces rotos en su sitio web:

  • Los enlaces rotos pueden dañar la experiencia del usuario.
  • La eliminación de enlaces rotos (o muertos) es esencial para el SEO (Optimización de motores de búsqueda), ya que puede afectar la clasificación del sitio en los motores de búsqueda (por ejemplo, Google).

Las pruebas de enlaces rotos se pueden hacer utilizando Selenium WebDriver en una página web, que a su vez se puede usar para eliminar los enlaces muertos del sitio.

Enlaces rotos y Códigos de estado HTTP

Cuando un usuario visita un sitio web, el navegador envía una solicitud al servidor del sitio. El servidor responde a la solicitud del navegador con un código de tres dígitos llamado «Código de estado HTTP».’

Un código de estado HTTP es la respuesta del servidor a una solicitud enviada desde el navegador web. Estos códigos de estado HTTP se consideran equivalentes a la conversación entre el navegador (desde el que se envía la solicitud de URL) y el servidor.

Aunque se utilizan diferentes códigos de estado HTTP para diferentes fines, la mayoría de los códigos son útiles para diagnosticar problemas en el sitio, minimizar el tiempo de inactividad del sitio, el número de enlaces muertos y más. El primer dígito de cada código de estado de tres dígitos comienza con los números 1~5. Los códigos de estado se representan como 1xx, 2xx.., 5xx para indicar los códigos de estado en ese rango en particular. Como cada uno de estos rangos consiste en una clase diferente de respuesta del servidor, limitaríamos la discusión a los Códigos de estado HTTP presentados para enlaces rotos.

Aquí están las clases de código de estado comunes que son útiles para detectar enlaces rotos con Selenium:

Clases de Código de estado HTTP Descripción
1xx El servidor todavía está pensando en la solicitud.
2xx La solicitud enviada por el navegador se completó correctamente y el servidor envió la respuesta esperada al navegador.
3xx Esto indica que se está realizando una redirección. Por ejemplo, la redirección 301 se usa popularmente para implementar redirecciones permanentes en un sitio web.
4xx Esto indica que no se puede acceder a una página en particular (o a un sitio completo).
5xx Esto indica que el servidor no pudo completar la solicitud, a pesar de que el navegador envió una solicitud válida.

Códigos de estado HTTP presentados al detectar Enlaces rotos

Estos son algunos de los códigos de estado HTTP comunes presentados por el servidor web al encontrar un enlace roto:

Código de estado HTTP Descripción
400 (Solicitud incorrecta) El servidor no puede procesar la solicitud ya que la URL mencionada es incorrecta.
400 (Solicitud incorrecta-Host incorrecto) Esto indica que el nombre de host no es válido, por lo que la solicitud no se puede procesar.
400 (Solicitud incorrecta-URL incorrecta) Esto indica que el servidor no puede procesar la solicitud ya que la URL introducida está mal formada (es decir, faltan corchetes, barras, etc.).
400 ( Esto indica que las solicitudes HTTP se han agotado.
400 (Solicitud incorrecta-Vacía) La respuesta devuelta por el servidor está vacía sin contenido ni código de respuesta.
400 ( Esto indica que el servidor no puede procesar la solicitud, ya que está ocupado procesando otras solicitudes o ha sido configurado incorrectamente por el propietario del sitio.
403 (Prohibido) Se envía una solicitud genuina al servidor, pero se niega a cumplir con la misma, ya que se requiere autorización.
404 (Página No Encontrada) El recurso (o a la página) no está disponible en el servidor.
408 (Tiempo de espera de la solicitud) El servidor tiene tiempo de espera esperando la solicitud. El cliente (es decir, el navegador) puede enviar la misma solicitud dentro del tiempo que el servidor está preparado para esperar.
410 (Gone) Un Código de estado HTTP que es más permanente que 404 (Página No encontrada). 410 significa que la página ha desaparecido.
La página no está disponible en el servidor, ni se ha configurado ningún mecanismo de reenvío (o redirección). Los enlaces que apuntan a una página 410 están enviando visitantes a un recurso muerto.
503 (Servicio no disponible) Esto indica que el servidor está sobrecargado temporalmente, por lo que no puede procesar la solicitud. También puede significar que el mantenimiento se está llevando a cabo en el servidor, indicando a los motores de búsqueda sobre el tiempo de inactividad temporal del sitio.

¿Cómo Encontrar Enlaces Rotos Usando Selenium WebDriver?

Independientemente del lenguaje utilizado con Selenium WebDriver, los principios rectores para la prueba de enlaces rotos utilizando Selenium siguen siendo los mismos. Estos son los pasos para probar enlaces rotos usando Selenium WebDriver:

  1. Utilice la etiqueta para recopilar detalles de todos los enlaces presentes en la página web.
  2. Envíe una solicitud HTTP para cada enlace.
  3. Verifique el código de respuesta correspondiente recibido en respuesta a la solicitud enviada en el paso anterior.
  4. Valide si el enlace está roto o no en función del código de respuesta enviado por el servidor.
  5. Repita los pasos (2-4) para cada enlace presente en la página.

En este tutorial de Selenium WebDriver, mostraríamos cómo realizar pruebas de enlaces rotos usando Selenium WebDriver en Python, Java, C# y PHP. Las pruebas se realizan en combinación (Chrome 85.0 + Windows 10) y la ejecución se realiza en la cuadrícula de Selenio basada en la nube proporcionada por LambdaTest.

Para comenzar con LambdaTest, cree una cuenta en la plataforma y anote la clave de acceso de nombre de usuario & disponible en la sección perfil de LambdaTest. Las capacidades del navegador se generan utilizando el generador de capacidades LambdaTest.

Aquí está el escenario de prueba utilizado para encontrar enlaces rotos en un sitio web que usa Selenium:

Escenario de prueba

  1. Ir al Blog LambdaTest, es decir, https://www.lambdatest.com/blog/ en Chrome 85.0
  2. Recopilar todos los enlaces presentes en la página
  3. Enviar solicitud HTTP para cada enlace
  4. Imprimir si el enlace está roto o no en el terminal

Es importante tener en cuenta que el tiempo dedicado a probar enlaces rotos usando Selenium depende del número de enlaces presentes en la página web que se está probando.’Cuanto mayor sea el número de enlaces en la página, más tiempo se dedicará a encontrar enlaces rotos. Por ejemplo, LambdaTest tiene una gran cantidad de enlaces (~150+); por lo tanto, el proceso de encontrar enlaces rotos puede llevar algún tiempo (unos pocos minutos).

Prueba en Selenium Grid

EJECUTE SU SCRIPT DE PRUEBA EN SELENIUM GRID

Más DE 2000 Navegadores Y sistemas operativos

REGISTRO GRATUITO

Pruebas de enlaces rotos Utilizando Selenium Java

Implementación

Tutorial de código

1. Importar los paquetes requeridos

Los métodos del paquete HttpURLConnection se utilizan para enviar solicitudes HTTP y capturar el Código de estado (o respuesta) HTTP.

Los métodos de la expresión regular.Paquete de patrones compruebe si el enlace correspondiente contiene una dirección de correo electrónico o un número de teléfono utilizando una sintaxis especializada contenida en un patrón.

1
2

import java.net.HttpURLConnection;
import java.útil.regex.Patrón;

2. Recopilar los enlaces presentes en la página

Los enlaces presentes en la URL bajo prueba (es decir, el Blog LambdaTest) se encuentran usando tagname en Selenium. El nombre de etiqueta utilizado para la identificación del elemento (o enlace) es ‘a’.

Los enlaces se colocan en una lista para recorrer la lista y comprobar los enlaces rotos de la página.

1
Lista<WebElement> enlaces = controlador.findElements (By.tagName («a»));

3. Iterar a través de las URL

El objeto Iterador se utiliza para recorrer en bucle la lista creada en Step (2)

1
Iterador< WebElement> enlace = enlaces.iterador();

4. Identifique y Verifique las URL

Un bucle while se ejecuta hasta que el Iterador de tiempo (es decir, el enlace) no tenga más elementos para iterar. Se recupera el’ href ‘ de la etiqueta de anclaje, y el mismo se almacena en la variable URL.

1
2
3

mientras (link.hasNext())
{
url = enlace.siguiente().getAttribute («href»);

Omita la comprobación de los enlaces si:

a. El enlace es nulo o vacío

1
2
3
4
5

si ((url) = = null) || (dirección url.isEmpty()))
{
Sistema.fuera.println(«URL no está configurado para la etiqueta de anclaje o está vacía»);
continuar;
}

b. El enlace contiene mailto o número de teléfono

1
2
3
4
5

si ((url.startsWith (mail_to)) / / (url.startsWith(tel)))
{
Sistema.fuera.println («Dirección de correo electrónico o teléfono detectado»);
continuar;
}

Al comprobar la página de LinkedIn, el código de estado HTTP es 999. Una variable Booleana (es decir,, LinkedIn) se establece en true para indicar que no es un enlace roto.

1
2
3
4
5

si(dirección url.startsWith(LinkedInPage))
{
Sistema.fuera.println («La URL comienza con LinkedIn, el código de estado esperado es 999»);
bLinkedIn = verdadero;
}

5. Validar los enlaces a través del Código de estado

Los métodos de la clase HttpURLConnection proporcionan la provisión para enviar solicitudes HTTP y capturar el Código de estado HTTP.

El método openConnection de la clase URL abre la conexión a la URL especificada. Devuelve una instancia URLConnection que representa una conexión al objeto remoto al que hace referencia la URL. Es de tipo fundido a HttpURLConnection.

1
2
3
4
5
6
7

HttpURLConnection urlconnection = null;
……………………………………….
……………………………………….
……………………………………….
urlconnection = (HttpURLConnection) (nueva URL (url).openConnection());
urlconnection.setRequestMethod(«CABEZA»);

El setRequestMethod en la clase HttpURLConnection establece el método para la solicitud de URL. El tipo de solicitud se establece en HEAD para que solo se devuelvan los encabezados. Por otro lado, el tipo de solicitud GET habría devuelto el cuerpo del documento, lo que no es necesario en este escenario de prueba en particular.

El método connect en la clase HttpURLConnection establece la conexión a la URL y envía una solicitud HTTP.

1
urlconnection.conectar();

El método getResponseCode devuelve el código de estado HTTP de la solicitud enviada anteriormente.

1
responseCode = urlconnection.Código getResponseCode();

Para el código de estado HTTP es 400 (o más), la variable que contiene el número de enlaces rotos (es decir, enlaces rotos) se incrementa; de lo contrario, la variable que contiene enlaces válidos (es decir, enlaces válidos) se incrementa.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18

si (responseCode >= 400)
{
si ((bLinkedIn == true) && (responseCode == LinkedInStatus))
{
Sistema.fuera.println(url + «es una Página de LinkedIn y no es un enlace roto»);
valid_links++;
}
otra cosa
{
Sistema.fuera.println(url + «es un enlace roto»);
broken_links++;
}
}
otra cosa
{
Sistema.fuera.println (url + «es un enlace válido»);
enlaces válidos++;
}

Ejecución

Para probar enlaces rotos usando Selenium Java, creamos un proyecto en IntelliJ IDEA. El pom básico.el archivo xml era suficiente para el trabajo!

Aquí está la instantánea de ejecución, que indica 169 enlaces válidos y 0 enlaces rotos en la página de Blog de LambdaTest.

 Ejecución de pruebas Java de Selenium

Los enlaces que contienen las direcciones de correo electrónico y los números de teléfono se excluyeron de la lista de búsqueda, como se muestra a continuación.

 Ejecución de pruebas de automatización

Puede ver que la prueba se ejecuta en la siguiente captura de pantalla y se completa en 2 minutos y 35 segundos, como se muestra en los registros de automatización de LambdaTest.

Registros de automatización de LambdaTest

Pruebas de enlaces rotos Con Python De Selenium

Implementación

Tutorial de código

1. Importar módulos

Además de importar los módulos Python para Selenium WebDriver, también importamos el módulo de solicitudes. El módulo de solicitudes le permite enviar todo tipo de solicitudes HTTP. También se puede usar para pasar parámetros en URL, enviar encabezados personalizados y más.

1
2
3

importación de solicitudes
importar urllib3
de las solicitudes.excepciones importar MissingSchema, InvalidSchema, InvalidURL

2. Recopilar los enlaces presentes en la página

Los enlaces presentes en la URL bajo prueba (es decir, el Blog LambdaTest) se encuentran localizando los elementos web mediante la propiedad Selector de CSS «a».

1
enlaces = controlador.find_elements (By.CSS_SELECTOR, «a»)

Como queremos que el elemento sea iterable, usamos el método find_elements (y no el método find_element).

3. Iterar a través de las URL para la validación

El método head del módulo requests se utiliza para enviar una solicitud HEAD a la URL especificada. El método get_attribute se usa en cada enlace para obtener el atributo ‘href’ de la etiqueta de anclaje.

El método head se utiliza principalmente en situaciones en las que solo se requieren encabezados status_code o HTTP, y no se necesita el contenido del archivo (o URL). El método head devuelve solicitudes.Objeto de respuesta que también contiene el código de estado HTTP (es decir, request.código de estado).

1
2
3
4

para el vínculo en los enlaces:
probar:
request = solicitudes.cabeza(link.get_attribute (‘href’), data = {‘key’:’valor’})
print(«Estado de» + enlace.get_attribute (‘href’) + » is » + str (petición.código de estado))

El mismo conjunto de operaciones se realiza de forma iterativa hasta que todos los ‘enlaces’ presentes en la página se hayan agotado.

4. Validar los enlaces a través del Código de estado

Si el código de respuesta HTTP para la solicitud HTTP enviada en el paso(3) es 404 (es decir, Página no encontrada), significa que el enlace es un enlace roto. Para los enlaces que no están rotos, el código de estado HTTP es 200.

1
2
3
4

si (solicitud.status_code == 404):
broken_links = (broken_links + 1)
else:
valid_links = (valid_links + 1)

5. Omita solicitudes irrelevantes

Cuando se aplican en enlaces que no contienen el atributo ‘href’ (por ejemplo, mailto, teléfono, etc.).), el método head resulta en una excepción (es decir, MissingSchema, InvalidSchema).

1
2
3
4
5
6

except requests.exceptions.MissingSchema:
print(«Encountered MissingSchema Exception»)
except requests.exceptions.InvalidSchema:
print(«Encountered InvalidSchema Exception»)
except:
print («Encontré algún otro execption»)

Estas excepciones se capturan, y lo mismo se imprime en el terminal.

Ejecución

Hemos utilizado el PyUnit (o unittest) aquí, el marco de prueba predeterminado en Python para probar enlaces rotos usando Selenium. Ejecute el siguiente comando en la terminal:

1
python Broken_Links.py

La ejecución tomaría alrededor de 2-3 minutos, ya que la página de blog LambdaTest consta de aproximadamente más de 150 enlaces. La siguiente imagen de ejecución muestra que la página tiene 169 enlaces válidos y cero enlaces rotos.

Podría presenciar la excepción InvalidSchema o excepción MissingSchema en algunos lugares, lo que indica que esos enlaces se omiten de la evaluación.

 Excepción de esquema no válida

La solicitud HEAD a LinkedIn (es decir,) da como resultado un código de estado HTTP de 999. Como se indica en este hilo en StackOverflow, LinkedIn filtra las solicitudes en función del agente de usuario, y la solicitud resultó en ‘Acceso denegado’ (es decir, 999 como Código de estado HTTP).

 Código de estado HTTP

Verificamos si el enlace de LinkedIn presente en la página de blog de LambdaTest está roto o no ejecutando la misma prueba en la cuadrícula local de Selenium, lo que resultó en HTTP/1.1 200 OK.

Pruebas de enlaces rotos Usando Selenium C#

Implementación

Tutorial de código

El marco NUnit se utiliza para pruebas de automatización; nuestro blog anterior sobre la automatización de pruebas NUnit con Selenium C # puede ayudarlo a comenzar con el marco.

1. Include HttpClient

El espacio de nombres HttpClient se agrega para su uso a través de la directiva using. La clase HttpClient en C# proporciona una clase base para enviar solicitudes HTTP y recibir la respuesta HTTP de un recurso identificado por URI.

Microsoft recomienda usar System.Net.Http.HttpClient en lugar de System.Net.HttpWebRequest; HttpWebRequest también se puede usar para detectar enlaces rotos en Selenium C#.

1
2

el uso del Sistema.Net.Http;
uso del Sistema.Enhebrando.Tareas;

2. Definir un método asincrónico que devuelve una tarea

Un método de prueba asincrónico se define como el uso del método GetAsync que envía una solicitud GET al URI especificado como una operación asincrónica.

1
2

público async Tarea LT_Broken_Links_Test()
{

3. Recopilar los enlaces presentes en la página

En primer lugar, creamos una instancia de HttpClient.

1
el uso de var cliente = new HttpClient();

Los enlaces presentes en la URL bajo prueba (es decir, el Blog LambdaTest) se recopilan ubicando los elementos web en la propiedad tagName «a».

1
var enlaces = controlador.findElements (By.tagName («a»));

El método find_elements en Selenium se utiliza para localizar los enlaces en la página, ya que devuelve una matriz (o lista) que se puede iterar para verificar la funcionalidad de los enlaces.

4. Iterar a través de las URL para validación

Los enlaces ubicados utilizando el método find_elements se verifican en un bucle for.

1
2

foreach (var link en enlaces)
{

Podemos filtrar los enlaces que contienen /direcciones de correo electrónico/números de teléfono/LinkedIn direcciones. Los enlaces sin texto de enlace también se filtran.

1
2

si (!(enlace.Texto.Contiene («Correo electrónico») | | enlace.Texto.Contiene («https://www.linkedin.com») | | enlace.Texto = = «» / / enlace.Igual a (nulo)))
{

El método GetAsync de la clase HttpClient envía una solicitud GET al URI correspondiente como una operación asincrónica. El argumento del método GetAsync es el valor del atributo ‘href’ del ancla recopilado mediante el método getAttribute.

La evaluación del método asincrónico es suspendida por el operador await hasta la finalización de la operación asincrónica. Al finalizar la operación asíncrona, el operador await devuelve el mensaje HttpResponseMessage que incluye los datos y el código de estado.

1
2
3

/* Obtener la URI */
HttpResponseMessage respuesta = esperan cliente.GetAsync (enlace.getAttribute («href»));
Sistema.Consola.WriteLine (URL » URL: {enlace.getAttribute («href»)} el estado es: {response.Código de estado}»);

5. Valide los enlaces a través del Código de estado

Si el código de respuesta HTTP (es decir, respuesta.Código de estado) para la solicitud HTTP enviada en el paso(4) es HttpStatusCode.OK (es decir, 200), significa que la solicitud se completó con éxito.

1
2
3
4
5
6
7
8
9

Sistema.Console.WriteLine($»URL: {link.GetAttribute(«href»)} status is :{response.StatusCode}»);
if (response.StatusCode == HttpStatusCode.OK)
{
valid_links++;
}
else
{
broken_links++;
}

NotSupportedException and ArgumentNullException exceptions are handled as a part of exception handling.

1
2
3
4
5
6
7
8

catch (Exception ex)
{
if ((ex is ArgumentNullException) ||
(ex is NotSupportedException))
{
System.Console.WriteLine(«Exception occured\n»);
}
}

Ejecución

Aquí está la instantánea de ejecución, que muestra que la prueba se ejecutó correctamente.

 ejecución de la prueba de selenium webdriver

Se han producido excepciones para enlaces a los ‘iconos para compartir’, es decir, WhatsApp, Facebook, Twitter, etc. Aparte de estos enlaces, el resto de los enlaces en la página de blog de LambdaTest devuelven HttpStatusCode.OK (es decir, 200).

 Código de estado Http

Pruebas de enlaces rotos Utilizando PHP De Selenium

Implementación

Tutorial de código

1. Leer la fuente de página

La función file_get_contents en PHP se utiliza para leer la fuente HTML de la página en una variable de cadena (por ejemplo, html html).

1
2

$test_url = «https://www.lambdatest.com/blog/»;
$html = file_get_contents($test_url);

2. Crear instancias de la clase DOMDocument

La clase DOMDocument en PHP representa un documento HTML completo y sirve como raíz del árbol de documentos.

1
$htmlDom = new DOMDocument;

3. Analizar HTML de la página

La función DOMDocument::loadHTML () se utiliza para analizar el código fuente HTML contenido en html html. Si se ejecuta correctamente, la función devuelve un objeto DOMDocument.

1
@$htmlDom->loadHTML($html);

4. Extraer los enlaces de la página

Los enlaces presentes en la página se extraen utilizando el método getElementsByTagName de la clase DOMDocument. Los elementos (o enlaces) se buscan en función de la etiqueta ‘a’ de la fuente HTML analizada.

La función getElementsByTagName devuelve una nueva instancia de DOMNodeList que contiene los elementos (o enlaces) del nombre de la etiqueta local (p. ej. etiqueta)

1
$enlaces = $htmlDom->getElementsByTagName(‘un’);

5. Itera a través de las URL para la validación

La lista de dominios, que se creó en el Paso (4), se recorre para verificar la validez de los enlaces.

1
2
3

foreach($de los enlaces de $link)
{
$linkText = $link->nodeValue;

Los detalles del enlace correspondiente se obtienen mediante la ‘href’ atributo. El método getAttribute se utiliza para lo mismo.

1
$linkHref = $link->getAttribute(‘href’);

Omitir la comprobación de los enlaces si:

un. El enlace está vacía

1
2
3
4

if(strlen(trim($linkHref)) == 0)
{
continuar;
}

b. El enlace es un hashtag o un vínculo de anclaje

1
2
3
4

if($linkHref == ‘#’)
{
continuar;
}

c. El enlace contiene mailto o addtoany (es decir, de intercambio social, opciones).

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30

function check_nonlinks($test_url, $test_pattern)
{
if (preg_match($test_pattern, $test_url) == false)
{
return false;
}
otra cosa
{
return true;
}
}
de la función pública test_Broken_Links()
{
$pattern_1 = ‘/\baddtoany\b/’;
$pattern_2 = ‘/\bmailto\b/’;
…………………………………………………………..
…………………………………………………………..
…………………………………………………………..
if ((check_nonlinks($linkHref, $pattern_1))||(check_nonlinks($linkHref, $pattern_2)))
{
print(«\nAdd_To_Any o correo electrónico encontrado»);
continuar;
}
…………………………………………………………..
…………………………………………………………..
…………………………………………………………..
}

la función preg_match utiliza una expresión regular (expresión regular) para realizar una búsqueda que no distingue entre mayúsculas y minúsculas de mailto y addtoany. Las expresiones regulares para mailto & addtoany son ‘/\bmailto\b/’ & ‘/\baddtoany\b/’ respectivamente.

6. Validar el Código HTTP usando cURL

Utilizamos curl para obtener información sobre el estado del enlace correspondiente. El primer paso es inicializar una sesión cURL con el ‘enlace’ en el que se debe realizar la validación. El método devuelve una instancia cURL que se utilizará en la última parte de la implementación.

1
$curl = curl_init($linkHref);

El curl_setopt método se utiliza para la configuración de las opciones del cURL identificador de sesión (es decir, $curl).

1
curl_setopt($curl, CURLOPT_NOBODY, true);

Se llama al método curl_exec para la ejecución de la sesión cURL dada. Devuelve True en la ejecución exitosa.

1
$resultado = curl_exec($curl);

Esta es la parte más importante de la lógica de que los controles de la rotura de enlaces en la página. La función curl_getinfo que toma el identificador de sesión cURL (es decir, $curl) y el CÓDIGO CURLINFO_RESPONSE_CODE (es decir, CURLINFO_HTTP_CODE) se utilizan para obtener información sobre la última transferencia. Devuelve el código de estado HTTP en respuesta.

1
$statusCode = curl_getinfo (cur curl, CURLINFO_HTTP_CODE);

Al completar correctamente la solicitud, se devuelve el código de estado HTTP de 200 y se incrementa la variable que contiene el recuento de enlaces válidos (es decir ,links valid_links). Para enlaces que dan como resultado el Código de estado HTTP de 400 (o más), se realiza una comprobación si el ‘enlace en prueba’ era la página de LinkedIn de LambdaTest. Como se mencionó anteriormente, el código de estado de la página de LinkedIn será 999; por lo tanto, valid valid_links se incrementa.

Para todos los demás enlaces que devuelven un código de estado HTTP de 400 (o más), la variable que contiene el recuento de enlaces rotos (es decir ,links broken_links) se incrementa.

1
2
3
4
5
6
7
8
9
10

if (($linkedin_page_status) && ($statusCode == 999))
{
print(«\n-link » . lin linkHref . «is LinkedIn Page and status is» (en inglés).$statusCode);
$validlinks++;
}
otra cosa
{
print(«\n-link » . lin linkHref . «is broken link and status is» (en inglés).stat Código de estado);
links enlaces rotos++;
}

Ejecución

Utilizamos el framework PHPUnit para probar enlaces rotos en la página. Para descargar el framework PHPUnit, agregue el editor de archivos.json en la carpeta raíz y ejecute composer require en el terminal.

Ejecute el siguiente comando en el terminal para comprobar enlaces rotos en Selenium PHP.

1
vendedor\bin\tests de phpunit\BrokenLinksTest.php

Aquí está la instantánea de ejecución que muestra un total de 116 enlaces válidos y 0 enlaces rotos en el blog de LambdaTest. A medida que se ignoran los enlaces para compartir en redes sociales (es decir, addtoany) y la dirección de correo electrónico, el recuento total es de 116 (169 en la prueba de Python de Selenium).

 instantánea de ejecución

Conclusión

 Corregido

Fuente

Los enlaces rotos, también llamados enlaces muertos o enlaces podridos, pueden dificultar la experiencia del usuario si están presentes en el sitio web. Los enlaces rotos también pueden afectar los rankings en los motores de búsqueda. Por lo tanto, las pruebas de enlaces rotos deben realizarse periódicamente para actividades relacionadas con el desarrollo y las pruebas de sitios web.

En lugar de depender de herramientas de terceros o métodos manuales para verificar enlaces rotos en un sitio web, las pruebas de enlaces rotos se pueden hacer utilizando Selenium WebDriver con Java, Python, C# o PHP. El Código de estado HTTP, devuelto al acceder a cualquier página web, debe usarse para verificar enlaces rotos utilizando el marco de Selenium.

Preguntas frecuentes

¿Cómo encuentro enlaces rotos en Python de selenium?

Para comprobar los enlaces rotos, deberá recopilar todos los enlaces de la página web en función de la etiqueta. A continuación, envíe una solicitud HTTP para los enlaces y lea el código de respuesta HTTP. Averigüe si el enlace es válido o está roto en función del código de respuesta HTTP.

¿Cómo compruebo si hay enlaces rotos?

Para monitorear continuamente tu sitio en busca de enlaces rotos mediante Google Search Console, sigue estos pasos:

  1. Inicie sesión en su cuenta de Google Search Console.
  2. Haga clic en el sitio que desea supervisar.
  3. Haz clic en Rastrear y, a continuación, haz clic en Buscar como Google.
  4. Después de que Google rastree el sitio, para acceder a los resultados, haga clic en Rastrear y, a continuación, en Errores de rastreo.
  5. En Errores de URL, puedes ver los enlaces rotos que Google descubrió durante el proceso de rastreo.

¿Cómo encuentro imágenes rotas en la web usando selenio?

Visita la página. Recorre cada imagen del archivo HTTP y comprueba si tiene un código de estado 404. Almacene cada imagen rota en una colección. Compruebe que la colección de imágenes rotas está vacía.

¿Cómo obtengo todos los enlaces en selenio?

Puede obtener todos los enlaces presentes en una página web basados en la etiqueta <a> presente. Cada etiqueta < a> representa un enlace. Utilice los localizadores de selenio para encontrar fácilmente todas estas etiquetas.

¿Por qué son malos los enlaces rotos?

Pueden dañar la experiencia del usuario: cuando los usuarios hacen clic en enlaces y llegan a errores 404 sin salida, se frustran y es posible que nunca regresen. Devaluan tus esfuerzos de SEO: Los enlaces rotos restringen el flujo de equidad de enlaces en todo tu sitio, impactando negativamente en los rankings.

Himanshu Sheth

Himanshu Sheth es un experimentado técnico y blogger con más de 15 años de variada experiencia de trabajo. Actualmente trabaja como «Evangelista Desarrollador Principal» y «Gerente Senior» en LambdaTest. Es muy activo con la comunidad de startups en Bengaluru (y en el sur) y le encanta interactuar con fundadores apasionados en su blog personal (que ha mantenido desde los últimos 15 años).

Escrito por

Leave a Reply

Tu dirección de correo electrónico no será publicada.