Hoe Vind Ik Gebroken Links Met Selenium WebDriver?
wat denk je te denken als je de 404/Pagina niet gevonden/dode Hyperlinks op een website tegenkomt? Aargh! Je zou het vervelend vinden als je over gebroken hyperlinks, dat is de enige reden waarom je voortdurend moet richten op het verwijderen van het bestaan van gebroken links in uw web product (of website). In plaats van een handmatige inspectie, kunt u gebruik maken van automatisering voor broken link testen met behulp van Selenium WebDriver.
wanneer een bepaalde link is verbroken en een bezoeker op de pagina landt, beïnvloedt dit de functionaliteit van die pagina en resulteert dit in een slechte gebruikerservaring. Dode links kan de geloofwaardigheid van uw product te schaden, als het’ zou ‘ een indruk geven aan uw bezoekers dat er een minimale focus op de ervaring.
als uw webproduct veel pagina ‘ s (of links) heeft die resulteren in een 404-fout (of pagina niet gevonden), zal de productranglijst op zoekmachines (bijvoorbeeld Google) ook zwaar worden beïnvloed. Verwijdering van dode links is een van de integrale onderdelen van SEO (Search Engine Optimization) activiteit.
in dit deel van de Selenium WebDriver tutorial serie, duiken we diep in het vinden van gebroken links met behulp van Selenium WebDriver. We hebben broken link testen aangetoond met behulp van Selenium Python, selenium Java, Selenium C#, en Selenium PHP.
Inleiding tot gebroken Links in Web Testing
in eenvoudige termen, gebroken links (of dode links) in een website (of web app) zijn links die niet bereikbaar zijn en niet werken zoals verwacht. De links kunnen tijdelijk down als gevolg van server problemen of verkeerd geconfigureerd aan de back-end.
behalve pagina ’s die resulteren in 404-fout, zijn andere prominente voorbeelden van verbroken links misvormde URL’ s, links naar inhoud (bijv. documenten, pdf, afbeeldingen, enz.) die zijn verplaatst of verwijderd.
prominente redenen voor gebroken Links
hier zijn enkele van de veel voorkomende redenen achter het voorkomen van gebroken links (dode links of link Rotten):
- onjuiste of verkeerd gespelde URL ingevoerd door de gebruiker.
- structurele wijzigingen in de website (d.w.z. permalinks) met URL-omleidingen of interne omleidingen zijn niet correct geconfigureerd.
- Links naar inhoud zoals video ‘ s, documenten, enz. die worden verplaatst of verwijderd. Als de inhoud wordt verplaatst, moeten de ‘interne links’ worden doorgestuurd naar de aangewezen links.
- tijdelijke uitval van de website door onderhoud van de website waardoor de website tijdelijk ontoegankelijk wordt.
- gebroken HTML-tags, JavaScript-fouten, onjuiste html / CSS-aanpassingen, gebroken ingesloten elementen, enz., binnen de pagina die leidt, kan leiden tot gebroken links.
- geolocatiebeperkingen verhinderen de toegang tot de website vanaf bepaalde IP-adressen (als deze op de zwarte lijst staan) of specifieke landen in de wereld. Geolocatietesten met Selenium helpen ervoor te zorgen dat de ervaring op maat is gemaakt voor de locatie (of het land) van waaruit de site wordt geopend.
Waarom moet u gebroken Links controleren?
verbroken links zijn een grote turn-off voor de bezoekers die op uw website landen. Hier zijn enkele van de belangrijkste redenen waarom u moet controleren op gebroken links op uw website:
- gebroken Links kunnen de gebruikerservaring schaden.
- het verwijderen van gebroken (of dode) links is essentieel voor SEO (Search Engine Optimization), omdat het de ranglijst van de site op zoekmachines (bijvoorbeeld Google) kan beïnvloeden.
het testen van gebroken links kan worden gedaan met Selenium WebDriver op een webpagina, die op zijn beurt kan worden gebruikt om dode links van de site te verwijderen.
verbroken Links en HTTP-statuscodes
wanneer een gebruiker een website bezoekt, wordt een verzoek door de browser naar de server van de site gestuurd. De server reageert op het verzoek van de browser met een driecijferige code genaamd de ‘HTTP Status Code.’
een HTTP-statuscode is het antwoord van de server op een verzoek dat vanuit de webbrowser wordt verzonden. Deze HTTP-statuscodes worden beschouwd als gelijkwaardig aan het gesprek tussen de browser (van waaruit URL-aanvraag wordt verzonden) en de server.
hoewel verschillende HTTP-statuscodes voor verschillende doeleinden worden gebruikt, zijn de meeste codes nuttig voor het diagnosticeren van problemen in de site, het minimaliseren van de downtime van de site, het aantal dode links, en meer. Het eerste cijfer van elke driecijferige statuscode begint met nummers 1~5. De statuscodes worden weergegeven als 1xx, 2xx.., 5xx voor het aangeven van de statuscodes in dat specifieke bereik. Aangezien elk van deze bereiken uit een andere klasse van serverrespons bestaat, beperken we de discussie tot HTTP-statuscodes die worden gepresenteerd voor verbroken links.
hier zijn de Algemene statuscodeklassen die nuttig zijn bij het opsporen van verbroken verbindingen met Selenium:
klassen van HTTP-statuscode | beschrijving |
---|---|
1xx | de Server denkt nog steeds na over het verzoek. |
2xx | het verzoek dat door de browser werd verzonden, werd met succes voltooid en het verwachte antwoord werd door de server naar de browser gestuurd. |
3xx | dit geeft aan dat een redirect wordt uitgevoerd. Bijvoorbeeld, 301 redirect wordt in de volksmond gebruikt voor het implementeren van permanente omleidingen op een website. |
4xx | dit geeft aan dat een bepaalde pagina (of een volledige site) niet bereikbaar is. |
5xx | dit geeft aan dat de server het verzoek niet kon voltooien, hoewel een geldig verzoek door de browser werd verzonden. |
HTTP-statuscodes gepresenteerd bij detectie van gebroken Links
hier zijn enkele van de veel voorkomende HTTP-statuscodes gepresenteerd door de webserver bij het ontmoeten van een verbroken link:
HTTP-statuscode | beschrijving |
---|---|
400 (foutief verzoek) | de server kan het verzoek niet verwerken omdat de vermelde URL onjuist is. |
400 (Bad Request-Bad Host) | dit geeft aan dat de hostnaam ongeldig is waardoor het verzoek niet kan worden verwerkt. |
400 (Bad Request-Bad URL) | dit geeft aan dat de server het verzoek niet kan verwerken omdat de ingevoerde URL misvormd is (bijvoorbeeld ontbrekende haakjes, slashes, enz.). |
400 (ongeldige Request-Time-Out) | dit geeft aan dat de HTTP-verzoeken een time-out hebben. |
400 (Ongeldige aanvraag-leeg) | het antwoord dat door de server wordt geretourneerd is leeg zonder inhoud en geen antwoordcode. |
400 (Bad Request-Reset) | dit geeft aan dat de server het verzoek niet kan verwerken, omdat het bezig is met het verwerken van andere verzoeken of omdat het verkeerd is geconfigureerd door de site-eigenaar. |
403 (Forbidden) | een echt verzoek wordt naar de server gestuurd, maar het weigert hetzelfde te doen, omdat autorisatie vereist is. |
404 (Pagina niet gevonden) | de bron (of de pagina) is niet beschikbaar op de server. |
408 (Request Time Out) | de server heeft een time-out in afwachting van het verzoek. De client (dwz browser) kan hetzelfde verzoek verzenden binnen de tijd dat de server bereid is te wachten. |
410 (Gone) | een HTTP-statuscode die meer permanent is dan 404 (Pagina niet gevonden). 410 betekent dat de pagina weg is. de pagina is niet beschikbaar op de server, noch is er een forwarding (of omleiding) mechanisme ingesteld. De links naar een 410 pagina sturen bezoekers naar een dode bron. |
503 (Service niet beschikbaar) | dit geeft aan dat de server tijdelijk overbelast is, waardoor het verzoek niet kan worden verwerkt. Het kan ook betekenen dat er onderhoud wordt uitgevoerd op de server, met vermelding van de zoekmachines over de tijdelijke downtime van de site. |
Hoe vind ik gebroken Links met behulp van Selenium WebDriver?
ongeacht de taal die met Selenium WebDriver wordt gebruikt, blijven de leidende beginselen voor het testen van broken link met Selenium dezelfde. Hier zijn de stappen voor gebroken links testen met Selenium WebDriver:
- gebruik de tag om details te verzamelen van alle links die aanwezig zijn op de webpagina.
- stuur een HTTP-verzoek voor elke link.
- controleer de corresponderende responscode die is ontvangen in antwoord op het verzoek dat in de vorige stap is verzonden.
- valideren of de koppeling al dan niet verbroken is op basis van de antwoordcode die door de server is verzonden.
- herhaal de stappen (2-4) Voor elke link op de pagina.
in deze Selenium WebDriver tutorial laten we zien hoe je broken link testing kunt uitvoeren met Selenium WebDriver in Python, Java, C# en PHP. De tests worden uitgevoerd op (Chrome 85.0 + Windows 10) combinatie, en de uitvoering wordt uitgevoerd op de cloud-gebaseerde Selenium Grid die door LambdaTest.
om te beginnen met LambdaTest, Maak een account aan op het platform en noteer de gebruikersnaam & access-key die beschikbaar is in de sectie profiel op LambdaTest. De browser mogelijkheden worden gegenereerd met behulp van LambdaTest mogelijkheden Generator.
hier is het testscenario dat wordt gebruikt voor het vinden van gebroken links op een website met Selenium:
testscenario
- Ga naar LambdaTest Blog I.E. https://www.lambdatest.com/blog/ op Chrome 85.0
- Verzamel alle links op de pagina
- stuur HTTP-verzoek voor elke link
- Print of de link al dan niet verbroken is op de terminal
het is belangrijk op te merken dat de tijd die besteed wordt aan het testen van gebroken links met Selenium afhangt van het aantal links dat aanwezig is op de te testen webpagina.’Hoe meer het aantal links op de pagina, hoe meer tijd zal worden besteed aan het vinden van gebroken links. Bijvoorbeeld, LambdaTest heeft een groot aantal links (~150+); vandaar, het proces van het vinden van gebroken links kan enige tijd duren (ongeveer een paar minuten).
voer uw testscript uit op SELENIUM GRID
2000 + Browsers en OS
vrije aanmelding
Broken Link testen met Selenium Java
implementatie
Codewalkthrough
1. Importeer de vereiste pakketten
de methoden in het httpurlconnection-pakket worden gebruikt voor het verzenden van HTTP-verzoeken en het vastleggen van de HTTP-statuscode (of reactie).
de methoden in de regex.Patroon pakket controleer of de bijbehorende link bevat een e-mailadres of telefoonnummer met behulp van een gespecialiseerde syntaxis gehouden in een patroon.
1
2
|
java.net. httpurlconnection importeren;
java importeren.util.regex.Patroon;
|
2. Verzamel de links aanwezig op de pagina
de links aanwezig op de URL te testen (dat wil zeggen, LambdaTest Blog) zijn gelegen met behulp van tagname in Selenium. De tagnaam die wordt gebruikt voor de identificatie van het element (of de link) is ‘a’.
de links worden in een lijst geplaatst om door de lijst heen te gaan om gebroken links op de pagina te controleren.
1
|
List<WebElement> links = driver.findElements (door.tagnaam (“a”));
|
3. Itereren door de URL ‘ s
het object Iterator wordt gebruikt om door de lijst te bladeren die in stap is gemaakt (2)
1
|
Iterator<WebElement> link = links.iterator();
|
4. Identificeer en verifieer de URL ‘ s
een While loop wordt uitgevoerd totdat de time Iterator (dat wil zeggen, link) niet meer elementen heeft om te herhalen. De ‘href’ van de anker tag wordt opgehaald, en hetzelfde wordt opgeslagen in de URL variabele.
1
2
3
|
while (link.hasNext())
{
url = link.volgend().getAttribute (“href”);
|
sla de links over als:
a. De link is null of leeg
1
2
3
4
5
|
if ((url = = null) / / (url.isEmpty()))
{
systeem.uit.println (“URL is niet geconfigureerd voor anker tag of het is leeg”);
doorgaan;
}
|
b. De link bevat mailto of telefoonnummer
1
2
3
4
5
|
if ((url.startsWith (mail_to)) | | (url.startsWith (tel.)))
{
systeem.uit.println (“e-mailadres of telefoon gedetecteerd”);
doorgaan;
}
|
bij het controleren op de LinkedIn-pagina is de HTTP-statuscode 999. Een Booleaanse variabele (d.w.z., LinkedIn) is ingesteld op true om aan te geven dat het geen verbroken link is.
1
2
3
4
5
|
if (url.startsWith (LinkedInPage)))
{
systeem.uit.println (“URL begint met LinkedIn, verwachte status code is 999”);
bLinkedIn = waar;
}
|
5. Valideer de koppelingen via de statuscode
de methoden in de httpurlconnection klasse bieden de voorziening voor het verzenden van HTTP-verzoeken en het vastleggen van de HTTP-statuscode.
de openConnection methode van de URL-klasse opent de verbinding met de opgegeven URL. Het retourneert een URLConnection instantie die een verbinding vertegenwoordigt met het externe object dat wordt doorverwezen door de URL. Het is type-gegoten om HttpURLConnection.
1
2
3
4
5
6
7
|
HttpURLConnection urlconnection = null;
……………………………………….
……………………………………….
……………………………………….
urlconnection =(HttpURLConnection) (nieuwe URL (url).openConnection());
urlconnection.setRequestMethod (“HEAD”);
|
de setRequestMethod in httpurlconnection class stelt de methode in voor URL-aanvraag. Het aanvraagtype is ingesteld op HEAD, zodat alleen Headers worden geretourneerd. Aan de andere kant zou het aanvraagtype GET de documenttekst hebben geretourneerd, wat niet vereist is in dit specifieke testscenario.
de methode connect in httpurlconnection class maakt de verbinding met de URL en stuurt een HTTP-verzoek.
1
|
urlconnection.verbinden();
|
de methode getResponseCode geeft de HTTP-statuscode terug voor het eerder verzonden verzoek.
1
|
responseCode = urlconnection.getResponseCode();
|
voor HTTP-statuscode 400 (of meer), wordt de variabele die gebroken links count (dwz, broken_links) wordt verhoogd; anders, de variabele die geldige links (dwz, valid_links) wordt verhoogd.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
if (responseCode >= 400)
{
als ((bLinkedIn == true) && (responseCode == LinkedInStatus))
{
Systeem.uit.println (url + “is een LinkedIn-pagina en is geen verbroken link”);
valid_links++;
}
else
{
systeem.uit.println (url + “is a broken link”);
broken_links++;
}
}
else
{
systeem.uit.println (url + “is een geldige link”);
valid_links++;
}
|
uitvoering
voor broken links testen met Selenium Java, hebben we een project gemaakt in IntelliJ IDEA. De basis pom.xml-bestand was voldoende voor de taak!
hier is de execution snapshot, die 169 geldige links en 0 verbroken links op de LambdaTest Blog Pagina aangeeft.
de links met de e-mailadressen en telefoonnummers werden uitgesloten van de zoeklijst, zoals hieronder weergegeven.
u kunt zien dat de test wordt uitgevoerd in de onderstaande schermafbeelding en wordt voltooid in 2 min 35 seconden, zoals te zien is op LambdaTest ‘ s automation logs.
Broken Link Testing Using Selenium Python
Implementation
Code WalkThrough
1. Modules importeren
naast het importeren van de Python-modules voor Selenium WebDriver, importeren we ook de module aanvragen. Met de module verzoeken kunt u allerlei HTTP-verzoeken verzenden. Het kan ook worden gebruikt voor het doorgeven van parameters in URL, het verzenden van aangepaste headers, en meer.
1
2
3
|
import requests
importeren urllib3
van verzoeken.uitzonderingen import MissingSchema, InvalidSchema, InvalidURL
|
2. Verzamel de links die aanwezig zijn op de pagina
de links die aanwezig zijn op de URL die wordt getest (dat wil zeggen, LambdaTest Blog) worden gevonden door de webelementen te lokaliseren door de eigenschap “a” van de CSS-Selector.
1
|
links = driver.find_elements (door.CSS_SELECTOR, “a”)
|
omdat we willen dat het element iterbaar is, gebruiken we de methode find_elements (en niet de methode find_element).
3. Itereer door de URL ‘ s voor validatie
de head-methode van de module aanvragen wordt gebruikt om een head-aanvraag naar de opgegeven URL te sturen. De get_attribute methode wordt gebruikt op elke link voor het verkrijgen van’ href ‘ attribuut van de anker tag.
de head methode wordt voornamelijk gebruikt in scenario ‘ s waar alleen status_code of HTTP headers vereist zijn en de inhoud van het bestand (of URL) niet nodig is. De head methode retourneert aanvragen.Antwoordobject dat ook de HTTP-statuscode bevat (bijvoorbeeld request.status_code).
1
2
3
4
|
voor link in links:
probeer:
request = requests.hoofd (link.get_attribute (‘href’), data = {‘key’:’value’})
print (“Status of” + link.get_attribute (‘href’) + ” is ” + str (verzoek.status_code))
|
dezelfde set van bewerkingen worden iteratief uitgevoerd tot alle’ links ‘ aanwezig op de pagina zijn uitgeput.
4. Valideer de koppelingen met de statuscode
als de HTTP-antwoordcode voor het HTTP-verzoek in Stap(3) 404 is (Pagina niet gevonden), betekent dit dat de koppeling een verbroken koppeling is. Voor links die niet gebroken zijn, is de HTTP-statuscode 200.
1
2
3
4
|
indien (verzoek.status_code == 404):
broken_links = (broken_links + 1)
else:
valid_links =(valid_links + 1)
|
5. Irrelevante Verzoeken
overslaan wanneer toegepast op links die het ‘href’ – attribuut niet bevatten (bijv. mailto, telefoon, enz.), de head methode resulteert in een uitzondering (dwz, 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 (“een ander uitvoerprogramma tegengekomen”)
|
deze uitzonderingen worden gevangen, en hetzelfde wordt afgedrukt op de terminal.
uitvoering
we hebben hier de PyUnit (of unittest) gebruikt, het standaard testraamwerk in Python voor het testen van gebroken links met Selenium. Voer het volgende commando uit op de terminal:
1
|
python Broken_Links.py
|
de uitvoering zou ongeveer 2-3 minuten duren aangezien de LambdaTest Blog pagina bestaat uit ongeveer 150 + links. De uitvoering screenshot hieronder laat zien dat de pagina heeft 169 geldige links en nul gebroken links.
u zou getuige zijn van de InvalidSchema uitzondering of MissingSchema uitzondering op sommige plaatsen, wat aangeeft dat deze links worden overgeslagen uit de evaluatie.
de head-aanvraag naar LinkedIn (d.w.z.) resulteert in een HTTP-statuscode van 999. Zoals vermeld in deze thread op StackOverflow, LinkedIn filtert de verzoeken op basis van de user-agent, en het verzoek resulteerde in’ Access Denied ‘ (dat wil zeggen, 999 als HTTP-statuscode).
we hebben gecontroleerd of de LinkedIn-link op de LambdaTest-blogpagina al dan niet is verbroken door dezelfde test uit te voeren op het lokale Seleniumraster, wat resulteerde in HTTP/1.1 200 OK.
Broken Link Testing Using Selenium C#
implementatie
Code WalkThrough
het NUnit framework wordt gebruikt voor automatiseringstests; onze eerdere blog over NUnit test automation with Selenium C# kan u helpen aan de slag met het framework.
1. Inclusief HttpClient
de HttpClient namespace is toegevoegd voor gebruik via de using directive. De HttpClient-klasse in C# biedt een basisklasse voor het verzenden van HTTP-aanvragen en het ontvangen van het HTTP-antwoord van een bron die wordt geïdentificeerd door URI.
Microsoft raadt aan System.net.Http.HttpClient te gebruiken in plaats van System.net.HttpWebRequest; HttpWebRequest kan ook worden gebruikt om gebroken links in Selenium C#te detecteren.
1
2
|
System. Net. Http;
System gebruiken.Draadsnijden.Taken;
|
2. Definieer een Async methode die een taak
retourneert een async test methode wordt gedefinieerd als het gebruik van de GetAsync methode die een GET request stuurt naar de opgegeven URI als een asynchrone operatie.
1
2
|
public async Task LT_Broken_Links_Test()
{
|
3. Verzamel de links op de pagina
Ten eerste maken we een instantie van HttpClient.
1
|
var client = new HttpClient()gebruiken;
|
de links aanwezig op de URL te testen (dat wil zeggen, LambdaTest Blog) worden verzameld door het lokaliseren van de web-elementen door de tagname “a” eigenschap.
1
|
var links = driver.FindElements (Door.Tagnaam (“a”));
|
de find_elements methode in Selenium wordt gebruikt voor het lokaliseren van de links op de pagina als het retourneert een array (of lijst) die kan worden herhaald om de werkbaarheid van de links te controleren.
4. Itereer door de URL ‘ s voor validatie
de links die zich bevinden met behulp van de methode find_elements worden geverifieerd in een lus for.
1
2
|
foreach (var link in links)
{
|
We filteren de koppelingen /e-mail-adressen/telefoonnummers/LinkedIn adressen. De links zonder Link tekst worden ook uitgefilterd.
1
2
|
als (!(link.Tekst.Bevat (“Email”) | | link.Tekst.Bevat (“https://www.linkedin.com”) | | link.Text = = “” / / link.Is gelijk aan (null)))
{
|
de GetAsync methode van HttpClient klasse stuurt een GET request naar de corresponderende URI als een asynchrone operatie. Het argument voor de GetAsync methode is de waarde van het anker ‘s’ href ‘ attribuut verzameld met behulp van de GetAttribute methode.
de evaluatie van de Async-methode wordt door de Wait-operator opgeschort totdat de asynchrone werking is voltooid. Na voltooiing van de asynchrone operatie, de wacht operator retourneert de httpresponsemessage die de gegevens en statuscode bevat.
1
2
3
|
/* download de URI */
httpresponsemessage response = wait client.GetAsync (link.GetAttribute (“href”));
systeem.Console.WriteLine ($”URL: {link.GetAttribute (“href”)} status is: {response.StatusCode}”);
|
5. Valideer de koppelingen via de statuscode
als de HTTP-antwoordcode (d.w.z. respons.StatusCode) voor het HTTP verzoek verzonden in Stap (4) is HttpStatusCode.OK (dat wil zeggen, 200), het betekent dat het verzoek met succes is voltooid.
1
2
3
4
5
6
7
8
9
|
Systeem.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”);
}
}
|
Execution
hier is de execution snapshot, die laat zien dat de test succesvol is uitgevoerd.
er zijn uitzonderingen opgetreden voor links naar de’ share icons’, d.w.z. WhatsApp, Facebook, Twitter, enz. Afgezien van deze links, de rest van de links op de LambdaTest blog pagina terug httpstatuscode.OK (dat wil zeggen 200).
Broken Link Testing Using Selenium PHP
implementatie
Code WalkThrough
1. De functie file_get_contents in PHP wordt gebruikt voor het lezen van de HTML bron van de pagina in een String variabele (bijvoorbeeld $html).
1
2
|
$test_url = “https://www.lambdatest.com/blog/”;
$html = file_get_contents($test_url);
|
2. Instantiate de DOMDocument class
de DOMDocument class in PHP vertegenwoordigt een volledig HTML-document en dient als de document tree root.
1
|
$htmlDom = nieuw DOMDocument;
|
3. Ontleden van HTML van pagina
de functie DOMDocument:: loadHTML () wordt gebruikt voor het ontleden van de HTML-bron in $html. Bij succesvolle uitvoering geeft de functie een DOMDocument object terug.
1
|
@$htmlDom – >loadHTML ($html);
|
4. Extraheren van de links van de pagina
de links op de pagina worden geëxtraheerd met behulp van de getelementsbytagnamemethode van DOMDocument-klasse. De elementen (of links) worden gezocht op basis van de ‘a’ tag uit de ontleed HTML bron.
de functie getElementsByTagName geeft een nieuwe instantie van DOMNodeList terug die de elementen (of links) van de lokale tagnaam bevat (d.w.z. tag)
1
|
$links = $htmlDom – >getElementsByTagName (‘a’);
|
5. Itereer door de URL ‘ s voor validatie
de DOMNodeList, die is gemaakt in Step (4), wordt doorlopen om de geldigheid van de links te controleren.
1
2
3
|
foreach($links als $link)
{
$linkText = $link->nodeValue;
|
De details van de overeenkomstige link zijn verkregen met behulp van de ‘href’ – attribuut. De GetAttribute methode wordt gebruikt voor hetzelfde.
1
|
$linkHref = $link – >getAttribute (‘href’);
|
het Overslaan van het controleren van de links als:
een. De link is leeg
1
2
3
4
|
if(strlen(trim($linkHref)) == 0)
{
doorgaan;
}
|
b. De link is een hashtag of een anchor link
1
2
3
4
|
if($linkHref == ‘#’)
{
doorgaan;
}
|
c. De link bevat mailto of addtoany (d.w.z. sociale opties voor delen).
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;
}
anders
{
return true;
}
}
de publieke functie 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 of e-mail tegengekomen”);
doorgaan;
}
…………………………………………………………..
…………………………………………………………..
…………………………………………………………..
}
|
preg_match functie gebruikt een reguliere expressie (regex) voor het uitvoeren van een hoofdletterongevoelige zoekopdracht voor mailto en addtoany. De reguliere expressies voor mailto & addtoany zijn respectievelijk’/ \bmailto\b /’&’/ \baddtoany\b/’.
6. Valideer de HTTP-Code met behulp van cURL
we gebruiken curl om informatie te krijgen over de status van de bijbehorende link. De eerste stap is het initialiseren van een krul sessie met de ‘link’ waarop validatie moet worden gedaan. De methode geeft een cURL instantie die zal worden gebruikt in het laatste deel van de implementatie.
1
|
$curl = curl_init ($linkHref);
|
de curl_setopt methode wordt gebruikt voor het instellen van opties op de gegeven krul sessie handle (dwz $curl).
1
|
curl_setopt ($curl, CURLOPT_NOBODY, true);
|
de curl_exec methode wordt aangeroepen voor het uitvoeren van de gegeven krul sessie. Het retourneert waar bij succesvolle uitvoering.
1
|
$result = curl_exec($curl);
|
Dit is het belangrijkste onderdeel van de logica die controleert op gebroken links op de pagina. De curl_getinfo functie die de krul sessie handle (dwz $curl) en CURLINFO_RESPONSE_CODE (dwz. CURLINFO_HTTP_CODE) worden gebruikt voor het verkrijgen van informatie over de laatste overdracht. Het retourneert HTTP-statuscode als antwoord.
1
|
$statusCode = curl_getinfo($curl, CURLINFO_HTTP_CODE);
|
Op de succesvolle voltooiing van de aanvraag, de HTTP-statuscode 200 is geretourneerd, en de variabele die de geldige links graaf (i.e., $valid_links) wordt verhoogd. Voor links die resulteren in de HTTP Status Code van 400 (of meer), wordt een controle uitgevoerd als de ‘link onder test’ LambdaTest ‘ s, LinkedIn pagina was. Zoals eerder vermeld, de LinkedIn pagina ‘ s status code zal 999; vandaar, $valid_links wordt verhoogd.
voor alle andere links die HTTP-statuscode van 400 (of meer) retourneerden, wordt de variabele die het aantal verbroken links bevat (d.w.z. $broken_links) verhoogd.
1
2
3
4
5
6
7
8
9
10
|
if (($linkedin_page_status) && ($statusCode == 999))
{
print(“\nLink ” . $linkHref . “is LinkedIn pagina en status is”.$statusCode);
$validlinks++;
}
else
{
print (“\nllink”. $linkHref . “is gebroken link en status is”.$statusCode);
$brokenlinks++;
}
|
uitvoering
we gebruiken het PHPUnit framework voor het testen op gebroken links op de pagina. Voor het downloaden van de PHPUnit framework, voeg de file composer.json in de hoofdmap en run composer vereisen op de terminal.
voer het volgende commando uit op de terminal om gebroken links in Selenium PHP te controleren.
1
|
vendor \ bin \ phpunit tests \ BrokenLinksTest.php
|
hier is de uitvoering snapshot die een totaal van 116 geldige links en 0 gebroken links op de LambdaTest Blog toont. Aangezien links voor sociaal delen (dat wil zeggen, addtoany) en e-mailadres worden genegeerd, is het totale aantal 116 (169 in de selenium Python test).
conclusie
verbroken links, ook wel dode links of rot-links genoemd, kunnen de gebruikerservaring belemmeren als ze op de website aanwezig zijn. Gebroken links kunnen ook invloed hebben op de rankings op zoekmachines. Daarom moet het testen van broken link periodiek worden uitgevoerd voor activiteiten die verband houden met de ontwikkeling en het testen van websites.
in plaats van te vertrouwen op Hulpmiddelen van derden of handmatige methoden voor het controleren van gebroken links op een website, kan het testen van gebroken links worden gedaan met Selenium WebDriver met Java, Python, C# of PHP. De HTTP-statuscode, geretourneerd bij het openen van een webpagina, moet worden gebruikt om gebroken links te controleren met behulp van het selenium framework.
Veelgestelde vragen
hoe vind ik verbroken links in seleniumpython?
om de verbroken links te controleren, moet u alle links in de webpagina verzamelen op basis van de tag. Stuur dan een HTTP-aanvraag voor de links en lees de HTTP-reactiecode. Ontdek of de link geldig of verbroken is op basis van de HTTP-antwoordcode.
Hoe controleer ik op gebroken links?
volg deze stappen om uw site continu te controleren op verbroken links met behulp van de Google Search Console:
- Meld u aan bij uw Google Search Console-account.
- klik op de site die u wilt controleren.
- klik op Crawl en klik vervolgens op ophalen als Google.
- nadat Google de site heeft doorzocht, klikt u op Crawl om toegang te krijgen tot de resultaten en vervolgens op Crawl Errors.
- onder URL-fouten kunt u gebroken links zien die Google ontdekte tijdens het crawl-proces.
hoe vind ik gebroken afbeeldingen op het web met selenium?
bezoek de pagina. Itereer door elke afbeelding in het HTTP-archief en kijk of het een 404-statuscode heeft. Bewaar elke gebroken afbeelding in een collectie. Controleer of de verzameling gebroken afbeeldingen leeg is.
Hoe krijg ik alle links in selenium?
u kunt alle links op een webpagina krijgen op basis van de aanwezige<a > tag. Elke<a > tag vertegenwoordigt een link. Gebruik de selenium locators om al deze tags gemakkelijk te vinden.
Waarom zijn gebroken links slecht?
ze kunnen de gebruikerservaring schaden – wanneer gebruikers op links klikken en dead-end 404-fouten bereiken, raken ze gefrustreerd en keren mogelijk nooit meer terug. Ze devalueren uw SEO inspanningen – gebroken links beperken de stroom van link equity in uw site, negatieve invloed rankings.
Himanshu Sheth
Himanshu Sheth is een doorgewinterde technoloog en blogger met meer dan 15 jaar werkervaring. Momenteel werkt hij als’ Lead Developer Evangelist ‘en’ Senior Manager ‘ bij LambdaTest. Hij is zeer actief met de startup gemeenschap in Bengaluru (en het zuiden) en houdt van interactie met gepassioneerde oprichters op zijn persoonlijke blog (die hij heeft onderhouden sinds de laatste 15+ jaar).