Come trovare collegamenti interrotti usando Selenium WebDriver?

Quali pensieri ti vengono in mente quando ti imbatti in 404 / Pagina non trovata / Collegamenti ipertestuali morti su un sito web? Aargh! Lo troveresti fastidioso quando ti imbatti in collegamenti ipertestuali interrotti, che è l’unica ragione per cui dovresti concentrarti continuamente sulla rimozione dell’esistenza di collegamenti interrotti nel tuo prodotto web (o sito web). Invece di un’ispezione manuale, è possibile sfruttare l’automazione per il test dei collegamenti interrotti utilizzando Selenium WebDriver.

Rotto

Fonte

Quando un collegamento particolare è rotto e un visitatore atterra sulla pagina, influisce sulla funzionalità di quella pagina e si traduce in una scarsa esperienza utente. I collegamenti morti potrebbero danneggiare la credibilità del tuo prodotto, in quanto “potrebbe” dare l’impressione ai tuoi visitatori che ci sia un focus minimo sull’esperienza.

Se il tuo prodotto web ha molte pagine (o link) che provocano un errore 404 (o una pagina non trovata), anche le classifiche dei prodotti sui motori di ricerca (ad esempio, Google) saranno gravemente influenzate. La rimozione dei link morti è una delle parti integranti dell’attività SEO (Search Engine Optimization).

In questa parte della serie di tutorial Selenium WebDriver, ci immergiamo profondamente nella ricerca di collegamenti interrotti usando Selenium WebDriver. Abbiamo dimostrato il test dei collegamenti interrotti utilizzando Selenium Python, Selenium Java, Selenium C# e Selenium PHP.

Introduzione ai collegamenti interrotti nei test Web

In termini semplici, i collegamenti interrotti (o link morti) in un sito web (o web app) sono collegamenti non raggiungibili e non funzionano come previsto. I collegamenti potrebbero essere temporaneamente disattivati a causa di problemi del server o configurati erroneamente nel back-end.

404 - Pagina non trovata

Fonte

Oltre alle pagine che provocano l’errore 404, altri esempi importanti di collegamenti interrotti sono URL malformati, collegamenti a contenuti (ad esempio, documenti, pdf, immagini, ecc.) che sono stati spostati o cancellati.

Motivi importanti per i collegamenti interrotti

Ecco alcuni dei motivi più comuni dietro il verificarsi di collegamenti interrotti (collegamenti morti o marciumi di collegamento):

  • URL errato o errato inserito dall’utente.
  • I cambiamenti strutturali nel sito web (ad esempio, permalink) con reindirizzamenti URL o reindirizzamenti interni non sono configurati correttamente.
  • Collegamenti a contenuti come video, documenti, ecc. che vengono spostati o eliminati. Se il contenuto viene spostato, i “collegamenti interni” devono essere reindirizzati ai collegamenti designati.
  • Tempo di inattività temporaneo del sito Web a causa della manutenzione del sito che rende il sito temporaneamente inaccessibile.
  • Tag HTML rotti, errori JavaScript, personalizzazioni HTML/CSS errate, elementi incorporati rotti, ecc., all’interno della pagina principale, può portare a collegamenti interrotti.
  • Le restrizioni di geolocalizzazione impediscono l’accesso al sito web da determinati indirizzi IP (se sono nella lista nera) o da specifici paesi del mondo. Il test di geolocalizzazione con Selenium aiuta a garantire che l’esperienza sia fatta su misura per la posizione (o il paese) da cui si accede al sito.

Perché dovresti controllare i collegamenti interrotti?

Collegamenti interrotti sono un grande turn-off per i visitatori che atterrano sul tuo sito web. Ecco alcuni dei principali motivi per cui si dovrebbe verificare la presenza di collegamenti interrotti sul tuo sito web:

  • I collegamenti interrotti possono danneggiare l’esperienza dell’utente.
  • La rimozione di collegamenti interrotti (o morti) è essenziale per SEO (Search Engine Optimization), in quanto può influenzare il posizionamento del sito sui motori di ricerca (ad esempio, Google).

Il test dei collegamenti interrotti può essere eseguito utilizzando Selenium WebDriver su una pagina Web, che a sua volta può essere utilizzato per rimuovere i collegamenti morti del sito.

Collegamenti interrotti e codici di stato HTTP

Quando un utente visita un sito web, una richiesta viene inviata dal browser al server del sito. Il server risponde alla richiesta del browser con un codice a tre cifre chiamato ‘ Codice di stato HTTP.’

Un codice di stato HTTP è la risposta del server a una richiesta inviata dal browser web. Questi codici di stato HTTP sono considerati equivalenti alla conversazione tra il browser (da cui viene inviata la richiesta URL) e il server.

Sebbene diversi codici di stato HTTP siano utilizzati per scopi diversi, la maggior parte dei codici sono utili per diagnosticare problemi nel sito, riducendo al minimo i tempi di inattività del sito, il numero di collegamenti morti e altro ancora. La prima cifra di ogni codice di stato a tre cifre inizia con i numeri 1~5. I codici di stato sono rappresentati come 1xx, 2xx.., 5xx per indicare i codici di stato in quell’intervallo particolare. Poiché ciascuno di questi intervalli consiste in una diversa classe di risposta del server, limiteremo la discussione ai codici di stato HTTP presentati per i collegamenti interrotti.

Ecco le classi di codice di stato comuni che sono utili per rilevare collegamenti interrotti con il selenio:

Classi di codice di stato HTTP Descrizione
1xx Il Server sta ancora pensando alla richiesta.
2xx La richiesta inviata dal browser è stata completata con successo e la risposta prevista è stata inviata al browser dal server.
3xx Indica che viene eseguito un reindirizzamento. Ad esempio, 301 redirect viene comunemente utilizzato per implementare reindirizzamenti permanenti su un sito web.
4xx Indica che una pagina particolare (o un sito completo) non è raggiungibile.
5xx Ciò indica che il server non è stato in grado di completare la richiesta, anche se una richiesta valida è stata inviata dal browser.

Codici di Stato HTTP presentato in caso di rilevamento di Collegamenti Interrotti

Qui sono alcuni dei più comuni Codici di Stato HTTP presentato dal web server in presenza di un collegamento interrotto:

HTTP Status Code Descrizione
400 (Bad Request) Il server non è in grado di elaborare la richiesta in quanto il citato URL non è corretto.
400 (Bad Request-Bad Host) Indica che il nome host non è valido a causa del quale la richiesta non può essere elaborata.
400 (Richiesta errata-URL errato) Indica che il server non può elaborare la richiesta poiché l’URL immesso è malformato (ad esempio parentesi mancanti, barre, ecc.).
400 (Non valido Request – Timeout) Indica che le richieste HTTP sono scadute.
400 (Richiesta errata-Vuota) La risposta restituita dal server è vuota senza contenuto e senza codice di risposta.
400 (Richiesta errata-Reset) Indica che il server non è in grado di elaborare la richiesta, poiché è impegnato nell’elaborazione di altre richieste o è stato configurato in modo errato dal proprietario del sito.
403 (Vietato) Una richiesta autentica viene inviata al server ma si rifiuta di soddisfare la stessa, in quanto è richiesta l’autorizzazione.
404 (Pagina non trovata) La risorsa (o la pagina) non è disponibile sul server.
408 (Timeout della richiesta) Il server ha timeout in attesa della richiesta. Il client (cioè il browser) può inviare la stessa richiesta entro il tempo che il server è pronto ad attendere.
410 (Gone) Un codice di stato HTTP più permanente di 404 (Pagina non trovata). 410 significa che la pagina non c’è più.
La pagina non è disponibile sul server, né è stato impostato alcun meccanismo di inoltro (o reindirizzamento). I link che puntano a una pagina 410 stanno inviando i visitatori a una risorsa morta.
503 (Servizio non disponibile) Indica che il server è temporaneamente sovraccarico, a causa del quale non è possibile elaborare la richiesta. Può anche significare che la manutenzione viene eseguita sul server, indicando i motori di ricerca sui tempi di inattività temporanei del sito.

Come trovare collegamenti interrotti usando Selenium WebDriver?

Indipendentemente dal linguaggio utilizzato con Selenium WebDriver, i principi guida per il test dei collegamenti interrotti utilizzando Selenium rimangono gli stessi. Ecco i passaggi per il test dei collegamenti interrotti utilizzando Selenium WebDriver:

  1. Utilizzare il tag per raccogliere i dettagli di tutti i link presenti sulla pagina web.
  2. Invia una richiesta HTTP per ogni collegamento.
  3. Verificare il codice di risposta corrispondente ricevuto in risposta alla richiesta inviata nel passaggio precedente.
  4. Convalida se il collegamento è interrotto o meno in base al codice di risposta inviato dal server.
  5. Ripetere i passaggi (2-4) per ogni link presente nella pagina.

In questo tutorial Selenium WebDriver, dimostreremo come eseguire test di collegamento interrotti utilizzando Selenium WebDriver in Python, Java, C# e PHP. I test sono condotti su (Chrome 85.0 + Windows 10) combinazione, e l’esecuzione viene effettuata sulla griglia di selenio cloud-based fornito da LambdaTest.

Per iniziare con LambdaTest, creare un account sulla piattaforma e prendere nota del nome utente & chiave di accesso disponibile dalla sezione profilo su LambdaTest. Le funzionalità del browser vengono generate utilizzando LambdaTest Capabilities Generator.

questo è lo scenario di test per trovare i collegamenti rotti su un sito web utilizzando il Selenio:

Scenario di Test

  1. Vai a LambdaTest Blog cioè https://www.lambdatest.com/blog/ su Chrome 85.0
  2. Raccogliere tutti i link presenti sulla pagina
  3. Invia richiesta HTTP per ogni link
  4. Stampa se il link è rotto o non sul terminale

È importante notare che il tempo trascorso nel link rotti il test di Selenio dipende dal numero di link presenti sulla pagina web sotto test.’Più il numero di link sulla pagina, più tempo sarà speso trovare collegamenti interrotti. Ad esempio, LambdaTest ha un numero enorme di collegamenti (~150+); quindi, il processo di ricerca di collegamenti interrotti potrebbe richiedere del tempo (circa pochi minuti).

Test su Selenium Grid

ESEGUI LO SCRIPT DI TEST SU SELENIUM GRID

2000+ Browser E SISTEMA OPERATIVO

ISCRIZIONE GRATUITA

Test di collegamento interrotto utilizzando Selenium Java

Implementazione

Codice WalkThrough

1. Importare i pacchetti richiesti

I metodi nel pacchetto HttpURLConnection vengono utilizzati per inviare richieste HTTP e acquisire il codice di stato HTTP (o la risposta).

I metodi nella regex.Pacchetto pattern verificare se il collegamento corrispondente contiene un indirizzo email o un numero di telefono utilizzando una sintassi specializzata contenuta in un pattern.

1
2

import java.net.HttpURLConnection;
import java.util.regex.Modello;

2. Raccogli i link presenti sulla pagina

I link presenti sull’URL in prova (ad esempio, LambdaTest Blog) si trovano usando tagname in Selenium. Il nome del tag utilizzato per l’identificazione dell’elemento (o collegamento) è ‘a’.

I collegamenti vengono inseriti in un elenco per scorrere l’elenco per verificare i collegamenti interrotti sulla pagina.

1
Elenco<WebElement> link = driver.findElements(Da.tagName (“a”));

3. Scorrere l’Url

L’Iteratore oggetto è usato per collegare l’elenco creato nel Passaggio (2)

1
Iterator<WebElement> link = link.iteratore();

4. Identificare e verificare gli URL

Un ciclo while viene eseguito fino a quando l’iteratore temporale (cioè il collegamento) non ha più elementi da iterare. Il’ href ‘ del tag di ancoraggio viene recuperato e lo stesso viene memorizzato nella variabile URL.

1
2
3

mentre (collegamento.hasNext())
{
url = collegamento.prossimo().getAttribute (“href”);

Salta il controllo dei collegamenti se:

a. Il link è null o vuoto

1
2
3
4
5

if ((url == null) || (url.isEmpty()))
{
Sistema.fuori.println (“L’URL non è configurato per il tag di ancoraggio o è vuoto”);
continua;
}

b. Il link contiene di posta elettronica o numero di telefono

1
2
3
4
5

if ((url.startsWith (mail_to)) / / (url.startsWith (tel)))
{
Sistema.fuori.println (“Indirizzo email o Telefono rilevato”);
continua;
}

Quando si controlla la pagina LinkedIn, il codice di stato HTTP è 999. Una variabile booleana (cioè, LinkedIn) è impostato su true per indicare che non è un collegamento interrotto.

1
2
3
4
5

if(url.startsWith (LinkedInPage))
{
Sistema.fuori.println (“L’URL inizia con LinkedIn, il codice di stato previsto è 999”);
bLinkedIn = vero;
}

5. Convalidare i collegamenti tramite il codice di stato

I metodi nella classe HttpURLConnection forniscono la disposizione per l’invio di richieste HTTP e l’acquisizione del codice di stato HTTP.

Il metodo openConnection della classe URL apre la connessione all’URL specificato. Restituisce un’istanza URLConnection che rappresenta una connessione all’oggetto remoto a cui fa riferimento l’URL. È digitato su HttpURLConnection.

1
2
3
4
5
6
7

HttpURLConnection urlconnection = null;
……………………………………….
……………………………………….
……………………………………….
urlconnection = (HttpURLConnection) (nuovo URL (url).Connessione aperta());
urlconnection.setRequestMethod (“HEAD”);

Il setRequestMethod in HttpURLConnection classe imposta il metodo per la richiesta URL. Il tipo di richiesta è impostato su HEAD in modo che vengano restituite solo le intestazioni. D’altra parte, il tipo di richiesta GET avrebbe restituito il corpo del documento, che non è richiesto in questo particolare scenario di test.

Il metodo connect nella classe HttpURLConnection stabilisce la connessione all’URL e invia una richiesta HTTP.

1
urlconnection.connetti();

Il metodo getResponseCode restituisce il codice di stato HTTP per la richiesta inviata in precedenza.

1
responseCode = urlconnection.getResponseCode();

Per il codice di stato HTTP è 400 (o più), la variabile contenente il conteggio dei collegamenti interrotti (cioè, broken_links) viene incrementata; altrimenti, la variabile contenente collegamenti validi (cioè, valid_links) viene incrementata.

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

if (risposta >= 400)
{
if ((bLinkedIn == true) && (risposta == LinkedInStatus))
{
Sistema.fuori.println (url + “è una pagina LinkedIn e non è un collegamento interrotto”);
valid_links++;
}
altro
{
Sistema.fuori.println (url + “è un collegamento interrotto”);
broken_links++;
}
}
altro
{
Sistema.fuori.println (url + “è un collegamento valido”);
valid_links++;
}

Esecuzione

Per il test dei collegamenti interrotti utilizzando Selenium Java, abbiamo creato un progetto in IntelliJ IDEA. Il pom di base.il file xml era sufficiente per il lavoro!

Ecco l’istantanea di esecuzione, che indica 169 collegamenti validi e 0 collegamenti interrotti nella pagina del blog LambdaTest.

Esecuzione del test Selenium Java

I link contenenti gli indirizzi email e i numeri di telefono sono stati esclusi dall’elenco di ricerca, come mostrato di seguito.

Esecuzione del test di automazione

Puoi vedere il test in esecuzione nello screenshot qui sotto e completato in 2 minuti e 35 secondi, come mostrato nei log di automazione di LambdaTest.

LambdaTest automation logs

Broken Link Testing utilizzando Selenium Python

Implementazione

Codice WalkThrough

1. Importa moduli

Oltre a importare i moduli Python per Selenium WebDriver, importiamo anche il modulo requests. Il modulo richieste consente di inviare tutti i tipi di richieste HTTP. Può anche essere utilizzato per il passaggio di parametri in URL, l’invio di intestazioni personalizzate, e altro ancora.

1
2
3

le richieste di importazione
importa urllib3
da richieste.le eccezioni importano MissingSchema, InvalidSchema, InvalidURL

2. Raccogliere i link presenti sulla pagina

I link presenti sull’URL in prova (ad esempio, LambdaTest Blog) si trovano individuando gli elementi web dal Selettore CSS “a” proprietà.

1
collegamenti = driver.find_elements (Di.CSS_SELECTOR, “a”)

Poiché vogliamo che l’elemento sia iterabile, usiamo il metodo find_elements (e non il metodo find_element).

3. Iterare gli URL per la convalida

Il metodo head del modulo requests viene utilizzato per inviare una richiesta HEAD all’URL specificato. Il metodo get_attribute viene utilizzato su ogni collegamento per ottenere l’attributo ‘href’ del tag di ancoraggio.

Il metodo head viene utilizzato principalmente in scenari in cui sono richieste solo intestazioni status_code o HTTP e il contenuto del file (o dell’URL) non è necessario. Il metodo head restituisce le richieste.Oggetto Response che contiene anche il codice di stato HTTP (ad esempio request.status_code).

1
2
3
4

di link in link:
provare:
richiesta = richieste.testa (collegamento.get_attribute (‘href’), data = {‘key’:’valore’})
stampa (“Stato di” + collegamento.get_attribute (‘href’) + ” is ” + str (request._codice di stato))

Lo stesso insieme di operazioni viene eseguito iterativamente fino a quando tutti i “link” presenti sulla pagina sono stati esauriti.

4. Convalidare i collegamenti tramite il codice di stato

Se il codice di risposta HTTP per la richiesta HTTP inviata nel passaggio(3) è 404 (cioè Pagina non trovata), significa che il collegamento è un collegamento interrotto. Per i collegamenti non interrotti, il codice di stato HTTP è 200.

1
2
3
4

if (request.status_code == 404):
broken_links = (broken_links + 1)
altro:
valid_links = (valid_links + 1)

5. Salta le richieste irrilevanti

Quando applicate su collegamenti che non contengono l’attributo ‘href ‘(ad esempio, mailto, telefono, ecc.), il metodo head risulta in un’eccezione (cioè, 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:
stampa (“Incontrato qualche altro execption”)

Queste eccezioni sono catturati, e lo stesso viene stampato sul terminale.

Esecuzione

Abbiamo usato PyUnit (o unittest) qui, il framework di test predefinito in Python per il test dei collegamenti interrotti usando Selenium. Eseguire il seguente comando sul terminale:

1
python Broken_Links.py

L’esecuzione richiederebbe circa 2-3 minuti poiché la pagina del blog LambdaTest è composta da circa 150+ link. La schermata di esecuzione qui sotto mostra che la pagina ha 169 collegamenti validi e zero collegamenti interrotti.

Si verificherebbe l’eccezione InvalidSchema o l’eccezione MissingSchema in alcuni punti, il che indica che tali collegamenti vengono ignorati dalla valutazione.

Eccezione schema non valida

La richiesta HEAD a LinkedIn (cioè) genera un codice di stato HTTP di 999. Come indicato in questo thread su StackOverflow, LinkedIn filtra le richieste in base all’agente utente e la richiesta ha portato a “Accesso negato” (cioè 999 come codice di stato HTTP).

Codice di stato HTTP

Abbiamo verificato se il link LinkedIn presente nella pagina del blog LambdaTest è rotto o meno eseguendo lo stesso test sulla griglia di selenio locale, che ha portato a HTTP/1.1 200 OK.

Test di collegamento interrotto utilizzando Selenium C#

Implementazione

Codice WalkThrough

Il framework NUnit viene utilizzato per i test di automazione; il nostro precedente blog su NUnit Test automation con Selenium C # può aiutarti a iniziare con il framework.

1. Includi HttpClient

Lo spazio dei nomi HttpClient viene aggiunto per l’utilizzo tramite la direttiva using. La classe HttpClient in C# fornisce una classe base per l’invio di richieste HTTP e la ricezione della risposta HTTP da una risorsa identificata dall’URI.

Microsoft consiglia di utilizzare System.Net.Http.HttpClient invece di System.Net.HttpWebRequest; HttpWebRequest potrebbe anche essere utilizzato per rilevare collegamenti interrotti in Selenium C#.

1
2

utilizzando Sistema.Net.Http;
uso del Sistema.Infilare.Compiti;

2. Definire un metodo asincrono che restituisce un’attività

Un metodo di test asincrono è definito come l’utilizzo del metodo GetAsync che invia una richiesta GET all’URI specificato come operazione asincrona.

1
2

pubblico async Task LT_Broken_Links_Test()
{

3. Raccogliere i link presenti nella pagina

In primo luogo, creiamo un’istanza di HttpClient.

1
utilizzando var client = nuovo HttpClient ();

I link presenti sull’URL in prova (ad esempio, LambdaTest Blog) vengono raccolti individuando gli elementi web dalla proprietà TagName “a”.

1
collegamenti var = driver.FindElements(Da.TagName (“a”));

Il metodo find_elements in Selenium viene utilizzato per localizzare i collegamenti sulla pagina in quanto restituisce un array (o un elenco) che può essere iterato per verificare la lavorabilità dei collegamenti.

4. Iterare gli URL per la convalida

I collegamenti che si trovano utilizzando il metodo find_elements vengono verificati in un ciclo for.

1
2

foreach (var link in link)
{

Si filtra i link che contengono /e-mail-indirizzi, i numeri di telefono/LinkedIn indirizzi. Anche i collegamenti senza testo di collegamento vengono filtrati.

1
2

if (!(link.Testo.Contiene (“E-mail”) | | collegamento.Testo.Contiene (“https://www.linkedin.com”) | | collegamento.Testo = = “” / / collegamento.Uguale(null)))
{

Il metodo GetAsync della classe HttpClient invia una richiesta GET all’URI corrispondente come operazione asincrona. L’argomento del metodo GetAsync è il valore dell’attributo ‘href’ dell’ancora raccolto utilizzando il metodo GetAttribute.

La valutazione del metodo asincrono viene sospesa dall’operatore await fino al completamento dell’operazione asincrona. Al termine dell’operazione asincrona, l’operatore await restituisce HttpResponseMessage che include i dati e il codice di stato.

1
2
3

/* Ottenere l’URI */
HttpResponseMessage risposta = attendono client.GetAsync (collegamento.GetAttribute (“href”));
Sistema.Console.WriteLine (URL ” URL: {collegamento.Lo stato di GetAttribute(“href”)} è: {response.Codice di stato}”);

5. Convalidare i collegamenti tramite il codice di stato

Se il codice di risposta HTTP (cioè risposta.StatusCode) per la richiesta HTTP inviata nel passaggio(4) è HttpStatusCode.OK (cioè, 200), significa che la richiesta è stata completata con successo.

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”);
}
}

Esecuzione

Ecco l’istantanea di esecuzione, che mostra che il test è stato eseguito correttamente.

Esecuzione del test selenium webdriver

Si sono verificate eccezioni per i collegamenti alle “icone di condivisione”, ad esempio WhatsApp, Facebook, Twitter, ecc. Oltre a questi link, il resto dei link sulla pagina del blog LambdaTest restituisce HttpStatusCode.OK (cioè 200).

Codice di stato Http

Test di collegamento interrotto utilizzando Selenium PHP

Implementazione

Codice WalkThrough

1. Leggi il sorgente della pagina

La funzione file_get_contents in PHP viene utilizzata per leggere il sorgente HTML della pagina in una variabile Stringa (ad esempio html html).

1
2

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

2. Istanziare la classe DOMDocument

La classe DOMDocument in PHP rappresenta un intero documento HTML e funge da radice dell’albero del documento.

1
$htmlDom = new DOMDocument;

3. Analisi HTML della pagina

La funzione DOMDocument::loadHTML() viene utilizzata per analizzare il sorgente HTML contenuto in html html. Al termine dell’esecuzione, la funzione restituisce un oggetto DOMDocument.

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

4. Estrarre i collegamenti dalla pagina

I collegamenti presenti nella pagina vengono estratti utilizzando il metodo getElementsByTagName della classe DOMDocument. Gli elementi (o collegamenti) vengono cercati in base al tag ‘a’ dalla sorgente HTML analizzata.

La funzione getElementsByTagName restituisce una nuova istanza di DOMNodeList che contiene gli elementi (o i collegamenti) del nome del tag locale (ad es. tag)

1
$link = $htmlDom->getElementsByTagName(‘a’);

5. Scorrere gli URL per la convalida

Il DOMNodeList, che è stato creato nel passaggio (4), viene attraversato per verificare la validità dei collegamenti.

1
2
3

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

I dettagli del link corrispondente sono ottenuti utilizzando il ‘href’ attributo. Il metodo GetAttribute viene utilizzato per lo stesso.

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

evitare di cercare il link, se:

un. Il link è vuoto

1
2
3
4

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

b. Il link è un hashtag o un link di ancoraggio

1
2
3
4

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

c. Il link contiene mailto o addtoany (cioè, sociale opzioni di condivisione).

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;
}
altro
{
return true;
}
}
funzione pubblica test_Broken_Links()
{
$pattern_1 = ‘/\baddtoany\b/’;
$pattern_2 = ‘/\bmailto\b/’;
…………………………………………………………..
…………………………………………………………..
…………………………………………………………..
if ((check_nonlinks (check linkHref, pat pattern_1))||(check_nonlinks (check linkHref, pat pattern_2)))
{
stampa (“\nAdd_To_Any o email incontrato”);
continua;
}
…………………………………………………………..
…………………………………………………………..
…………………………………………………………..
}

la funzione preg_match utilizza un’espressione regolare (regex) per eseguire una ricerca senza distinzione tra maiuscole e minuscole per mailto e addtoany. Le espressioni regolari per mailto & addtoany sono’/\bmailto\b /’&’/\baddtoany \ b / ‘ rispettivamente.

6. Convalidare il codice HTTP usando cURL

Usiamo curl per ottenere informazioni sullo stato del collegamento corrispondente. Il primo passo è inizializzare una sessione di cURL con il ‘link’ su cui deve essere eseguita la convalida. Il metodo restituisce un’istanza cURL che verrà utilizzata nell’ultima parte dell’implementazione.

1
$curl = curl_init($linkHref);

Il curl_setopt metodo è usato per impostare le opzioni della sessione cURL manico (cioè $curl).

1
curl_setopt($curl, CURLOPT_NOBODY, true);

Il metodo curl_exec viene chiamato per l’esecuzione della sessione di cURL specificata. Restituisce True in caso di esecuzione riuscita.

1
$risultato = curl_exec($curl);

Questa è la parte più importante della logica, che verifica il funzionamento dei link sulla pagina. La funzione curl_getinfo che accetta l’handle della sessione cURL (cioè curl curl) e CURLINFO_RESPONSE_CODE (cioè CURLINFO_HTTP_CODE) vengono utilizzati per ottenere informazioni sull’ultimo trasferimento. Restituisce il codice di stato HTTP in risposta.

1
$statusCode = curl_getinfo($curl, “CURLINFO_HTTP_CODE”);

A completamento della richiesta, il Codice di Stato HTTP 200 è tornato, e la variabile che tiene il link validi conte (cioè, $valid_links) è incrementato. Per i collegamenti che comportano il codice di stato HTTP di 400 (o più), viene eseguito un controllo se il “collegamento in prova” era la pagina LinkedIn di LambdaTest. Come accennato in precedenza, il codice di stato della pagina LinkedIn sarà 999; quindi, val valid_links viene incrementato.

Per tutti gli altri collegamenti che hanno restituito il codice di stato HTTP di 400 (o più), la variabile che contiene il conteggio dei collegamenti interrotti (cioè bro broken_links) viene incrementata.

1
2
3
4
5
6
7
8
9
10

if (($linkedin_page_status) && ($statusCode == 999))
{
print(“\nLink ” . linkHref . “è la pagina LinkedIn e lo stato è”.stat statusCode);
links validlinks++;
}
altro
{
stampa (“\nLink”. linkHref . “è rotto collegamento e lo stato è”.stat Codice di stato);
bro brokenlinks++;
}

Esecuzione

Usiamo il framework PHPUnit per testare i collegamenti interrotti sulla pagina. Per scaricare il framework PHPUnit, aggiungere il file composer.json nella cartella principale ed eseguire compositore richiedono sul terminale.

Eseguire il seguente comando sul terminale per controllare i collegamenti interrotti in Selenium PHP.

1
vendor \ bin \ phpunit tests \ BrokenLinksTest.php

Ecco l’istantanea di esecuzione che mostra un totale di 116 collegamenti validi e 0 collegamenti interrotti sul blog LambdaTest. Poiché i collegamenti per la condivisione sociale (cioè addtoany) e l’indirizzo email vengono ignorati, il conteggio totale è 116 (169 nel test Selenium Python).

esecuzione snapshot

Conclusione

Fisso

Fonte

Collegamenti interrotti, chiamati anche link morti o rot link, possono ostacolare l’esperienza dell’utente se sono presenti sul sito web. Collegamenti interrotti possono anche influenzare le classifiche sui motori di ricerca. Quindi, il test dei collegamenti interrotti dovrebbe essere effettuato periodicamente per le attività relative allo sviluppo e ai test del sito web.

Invece di affidarsi a strumenti di terze parti o metodi manuali per controllare i collegamenti interrotti su un sito Web, il test dei collegamenti interrotti può essere eseguito utilizzando Selenium WebDriver con Java, Python, C# o PHP. Il codice di stato HTTP, restituito quando si accede a qualsiasi pagina Web, deve essere utilizzato per controllare i collegamenti interrotti utilizzando il framework Selenium.

Domande frequenti

Come faccio a trovare collegamenti interrotti in selenium Python?

Per controllare i collegamenti interrotti, è necessario raccogliere tutti i collegamenti nella pagina Web in base al tag. Quindi inviare una richiesta HTTP per i collegamenti e leggere il codice di risposta HTTP. Scopri se il collegamento è valido o rotto in base al codice di risposta HTTP.

Come faccio a controllare i collegamenti interrotti?

Per monitorare continuamente il tuo sito alla ricerca di collegamenti interrotti utilizzando Google Search Console, segui questi passaggi:

  1. Accedi al tuo account Google Search Console.
  2. Fare clic sul sito che si desidera monitorare.
  3. Fare clic su Scansione, quindi fare clic su Recupera come Google.
  4. Dopo che Google esegue la scansione del sito, per accedere ai risultati fare clic su Scansione, quindi fare clic su Scansione errori.
  5. In Errori URL, puoi vedere tutti i collegamenti interrotti che Google ha scoperto durante il processo di scansione.

Come faccio a trovare immagini rotte sul web usando il selenio?

Visita la pagina. Scorrere ogni immagine nell’archivio HTTP e vedere se ha un codice di stato 404. Memorizzare ogni immagine rotta in una raccolta. Verificare che la raccolta di immagini interrotte sia vuota.

Come ottengo tutti i collegamenti in selenio?

È possibile ottenere tutti i link presenti su una pagina web basata sul tag < a> presente. Ogni tag<a > rappresenta un collegamento. Usa i localizzatori di selenio per trovare facilmente tutti questi tag.

Perché i collegamenti interrotti sono cattivi?

Possono danneggiare l’esperienza utente – Quando gli utenti fanno clic sui link e raggiungono gli errori 404 senza uscita, si sentono frustrati e potrebbero non tornare mai più. Svalutano i tuoi sforzi SEO-I collegamenti interrotti limitano il flusso di link equity in tutto il tuo sito, influenzando negativamente le classifiche.

Himanshu Sheth

Himanshu Sheth è un tecnologo esperto e blogger con più di 15+ anni di esperienza lavorativa diversificata. Attualmente lavora come “Lead Developer Evangelist” e “Senior Manager” presso LambdaTest. È molto attivo con la comunità di startup a Bengaluru (e down South) e ama interagire con i fondatori appassionati sul suo blog personale (che ha mantenuto dagli ultimi 15+ anni).

Scritto da

Leave a Reply

Il tuo indirizzo email non sarà pubblicato.