Miten Löytää Rikkinäiset Linkit Selenium Webdriverin Avulla?

mitä ajatuksia tulee mieleen, kun törmää 404/Page Not Found/Dead-hyperlinkkiin verkkosivulla? Aargh! Sinun olisi ärsyttävää, kun törmäät rikki Hyperlinkit, joka on ainoa syy, miksi sinun pitäisi jatkuvasti keskittyä poistamaan olemassaolo rikki linkkejä web-tuotteen (tai verkkosivuilla). Manuaalisen tarkastuksen sijaan voit hyödyntää automaatiota rikkoutuneiden linkkien testaukseen Selenium Webdriverin avulla.

 rikki

lähde

kun tietty linkki katkeaa ja vierailija laskeutuu sivulle, se vaikuttaa kyseisen sivun toimivuuteen ja johtaa huonoon käyttökokemukseen. Kuolleet linkit voivat vahingoittaa tuotteen uskottavuutta, koska se ”saattaa” antaa vaikutelman kävijöille, että kokemus on minimaalinen.

jos web-tuotteessasi on useita sivuja (tai linkkejä), jotka johtavat 404 virheeseen (tai sivua ei löydy), myös hakukoneiden (esim.Google) tuoterankingit kärsivät pahasti. Kuolleiden linkkien poistaminen on yksi olennainen osa SEO (Hakukoneoptimointi) toimintaa.

tässä Selenium WebDriver-opetussarjan osassa sukellamme syvälle Rikkinäisten linkkien löytämiseen Selenium Webdriverin avulla. Olemme osoittaneet broken link testing käyttäen Selenium Python, Selenium Java, Selenium C#, ja Selenium PHP.

broken Links in Web Testing

Yksinkertaisesti sanottuna, broken links (or dead links) in a website (or web app) are links that are not reachable and do not work as expected. Linkit voivat olla tilapäisesti poissa käytöstä palvelinongelmien vuoksi tai väärin määritettynä loppupäässä.

404 - Sivua ei löydy

lähde

lukuun ottamatta sivuja, jotka johtavat 404 virheeseen, muita näkyviä esimerkkejä rikkinäisistä linkeistä ovat epämuodostuneet URL-osoitteet, linkit sisältöön (esim.dokumentit, pdf, kuvat jne.) jotka on siirretty tai poistettu.

huomattavat syyt Katkenneille linkeille

Tässä muutamia yleisiä syitä katkenneiden linkkien esiintymiseen (kuolleet linkit tai linkkien mätänemiset):

  • käyttäjän syöttämä virheellinen tai väärin kirjoitettu URL.
  • verkkosivuston (eli permalinkkien) rakenteellisia muutoksia, joissa on URL-uudelleenohjauksia tai sisäisiä uudelleenohjauksia, ei ole määritetty oikein.
  • linkkejä sisältöihin, kuten videoihin, asiakirjoihin jne. jotka joko siirretään tai poistetaan. Jos sisältöä siirretään, ”Sisäiset linkit” olisi ohjattava nimettyihin linkkeihin.
  • sivuston tilapäinen käyttökatko, joka johtuu sivuston kunnossapidosta, minkä vuoksi sivusto on tilapäisesti esteellinen.
  • rikkinäiset HTML-tagit, JavaScript-virheet, virheelliset HTML/CSS-muokkaukset, rikkinäiset upotetut elementit jne., sisällä sivun johtava, voi johtaa rikki linkkejä.
  • Paikannusrajoitukset estävät pääsyn verkkosivustolle tietyistä IP-osoitteista (jos ne ovat mustalla listalla) tai tietyistä maailman maista. Geolocation testing with Selenium auttaa varmistamaan, että kokemus on räätälöity paikkaan (tai maahan), josta sivustoon pääsee.

miksi Rikkinäiset linkit kannattaa tarkistaa?

Rikkinäiset linkit ovat suuri turn-off kävijöille, jotka laskeutuvat sivustollesi. Tässä muutamia tärkeimpiä syitä, miksi sinun pitäisi tarkistaa rikki linkkejä sivustossasi:

  • rikkoutuneet linkit voivat vahingoittaa käyttäjäkokemusta.
  • rikkinäisten (tai kuolleiden) linkkien poistaminen on tärkeää hakukoneoptimoinnissa (Hakukoneoptimointi), sillä se voi vaikuttaa sivuston rankingiin hakukoneista (esim.Google).

murrettujen linkkien testaus voidaan tehdä Selenium WebDriver-ohjelmalla verkkosivulla, jolla puolestaan voidaan poistaa sivuston kuolleet linkit.

Rikkinäiset linkit ja HTTP-tilakoodit

kun käyttäjä vierailee verkkosivustolla, selain lähettää pyynnön sivuston palvelimelle. Palvelin vastaa selaimen pyyntöön KOLMINUMEROISELLA koodilla, jota kutsutaan HTTP-Tilakoodiksi.”

HTTP-tilakoodi on palvelimen vastaus verkkoselaimelta lähetettyyn pyyntöön. Näiden HTTP-Tilakoodien katsotaan vastaavan selaimen (josta URL-pyyntö lähetetään) ja palvelimen välistä keskustelua.

vaikka eri HTTP-tilakoodeja käytetään eri tarkoituksiin, suurin osa koodeista on hyödyllisiä sivuston ongelmien diagnosoinnissa, sivuston seisokkien minimoinnissa, kuolleiden linkkien määrässä jne. Jokaisen kolminumeroisen tilakoodin ensimmäinen numero alkaa numeroilla 1~5. Tilakoodit esitetään 1xx, 2xx.., 5xx kyseisellä alueella olevien tilakoodien ilmoittamiseen. Koska jokainen näistä alueista koostuu eri luokan palvelimen vastaus, rajoittaisimme keskustelun HTTP – tilakoodeja esitetään rikki linkkejä.

tässä ovat yleiset tilakoodiluokat, joista on hyötyä havaittaessa katkenneita yhteyksiä seleeniin:

HTTP-tilakoodin luokat kuvaus
1xx palvelin miettii vielä pyynnön läpi.
2xx selaimen lähettämä pyyntö toteutettiin onnistuneesti ja palvelin lähetti selaimelle odotetun vastauksen.
3xx tämä viittaa siihen, että uudelleenohjaus on käynnissä. Esimerkiksi 301 redirectiä käytetään yleisesti pysyvien uudelleenohjausten toteuttamiseen verkkosivustolla.
4xx tämä osoittaa, että tiettyä sivua (tai täydellistä sivustoa) ei ole tavoitettavissa.
5xx tämä osoittaa, että palvelin ei kyennyt täyttämään pyyntöä, vaikka selain oli lähettänyt kelvollisen pyynnön.

HTTP – tilakoodit, jotka esitetään katkenneiden linkkien havaitsemisessa

Tässä muutamia yleisiä HTTP-tilakoodeja, jotka WWW-palvelin esittää katkenneen linkin kohtaamisessa:

HTTP-tilakoodi kuvaus
400 (Bad Request) palvelin ei voi käsitellä pyyntöä, koska mainittu URL on virheellinen.
400 (Bad Request-Bad Host) tämä osoittaa, että palvelimen nimi on virheellinen, minkä vuoksi pyyntöä ei voida käsitellä.
400 (huono pyyntö-huono URL) tämä osoittaa, että palvelin ei voi käsitellä pyyntöä, koska syötetty URL on virheellinen (eli puuttuvat sulut, viillot jne.).
400 (Bad Request-Timeout) tämä osoittaa, että HTTP-pyynnöt ovat aikakatkaistuja.
400 (Bad Request-Empty) palvelimen palauttama vastaus on tyhjä ilman sisältöä eikä vastauskoodia.
400 (Bad Request-Reset) tämä osoittaa, että palvelin ei pysty käsittelemään pyyntöä, koska se on kiireinen muiden pyyntöjen käsittelyssä tai sivuston omistaja on määritellyt sen väärin.
403 (Kielletty) palvelimelle lähetetään aito pyyntö, mutta se kieltäytyy täyttämästä samaa, koska siihen tarvitaan lupa.
404 (Sivua ei löydy) resurssi (tai sivu) ei ole käytettävissä palvelimella.
408 (pyynnön aikalisä) palvelimella on aikalisä odottamassa pyyntöä. Asiakas (eli selain) voi lähettää saman pyynnön siinä ajassa, että palvelin on valmis odottamaan.
410 (poissa) HTTP-tilakoodi, joka on pysyvämpi kuin 404 (Sivua ei löytynyt). 410 tarkoittaa, että sivu on poissa.
sivu ei ole käytettävissä palvelimella, eikä mitään huolinta (tai uudelleenohjaus) mekanismia ole perustettu. 410-sivulle viittaavat linkit lähettävät kävijöitä kuolleeseen resurssiin.
503 (Palvelu ei ole käytettävissä) tämä osoittaa, että palvelin on tilapäisesti ylikuormitettu, minkä vuoksi se ei voi käsitellä pyyntöä. Se voi tarkoittaa myös sitä, että palvelimella on käynnissä huolto, joka kertoo hakukoneille sivuston tilapäisestä seisokista.

Miten löytää rikki linkkejä Selenium WebDriver?

riippumatta Selenium Webdriverin kanssa käytetystä kielestä, seleeniä käyttävän broken link-testauksen pääperiaatteet pysyvät samoina. Tässä ovat vaiheet rikki linkkejä testaus Selenium WebDriver:

  1. käytä tag kerätä tietoja kaikista linkkejä läsnä verkkosivun.
  2. lähetä HTTP-pyyntö jokaisesta linkistä.
  3. Tarkista vastaava vastauskoodi, joka on saatu vastauksena edellisessä vaiheessa lähetettyyn pyyntöön.
  4. validoi palvelimen lähettämän vastauskoodin perusteella, onko linkki katkennut vai ei.
  5. Toista vaiheet (2-4) jokaiselle sivulla olevalle Linkille.

tässä Selenium WebDriver-opetusohjelmassa osoitamme, miten broken link-testaus tehdään Selenium Webdriverillä Pythonissa, Javassa, C#: ssa ja PHP: ssä. Testit tehdään (Chrome 85.0 + Windows 10)-yhdistelmällä, ja suoritus suoritetaan lambdatestin tarjoamalla pilvipohjaisella Seleeniruudukolla.

jos haluat aloittaa Lambdatestin käytön, Luo tili alustalle ja huomaa käyttäjänimi & access-key, joka on saatavilla lambdatestin profiili-osiosta. Selainominaisuudet luodaan LambdaTest-ominaisuuksien generaattorin avulla.

tässä on testiskenaario, jota käytetään Rikkinäisten linkkien löytämiseen seleeniä käyttävältä sivustolta:

Testiskenaario

  1. mene LambdaTest-blogiin eli https://www.lambdatest.com/blog/ Chrome 85.0
  2. kerää kaikki sivulla olevat linkit
  3. lähetä HTTP-pyyntö jokaisesta linkistä
  4. print whether the link is broken or Not On the terminal

on tärkeää huomata, että aika, joka kuluu Rikkinäisten linkkien testaamiseen seleenillä, riippuu testattavan verkkosivun linkkien määrästä.’Mitä enemmän linkkejä sivulla on, sitä enemmän aikaa kuluu Rikkinäisten linkkien etsimiseen. Esimerkiksi LambdaTest on valtava määrä linkkejä (~150+); näin ollen prosessi löytää rikki linkkejä voi kestää jonkin aikaa (noin muutaman minuutin).

Test on Selenium Grid

RUN your TESTING SCRIPT ON SELENIUM GRID

2000+ selaimet ja käyttöjärjestelmä

FREE SIGNUP

Broken Link Testing Using Selenium Java

Implementation

Code WalkThrough

1. Tuo tarvittavat paketit

httpurlconnection-paketin menetelmiä käytetään HTTP-pyyntöjen lähettämiseen ja HTTP-tilakoodin (tai vastauksen) kaappaamiseen.

Regexin menetelmät.Pattern package tarkista, jos vastaava linkki sisältää sähköpostiosoitteen tai puhelinnumeron käyttäen erityistä syntaksia pidetään kuvio.

1
2

tuo java. net. HttpURLConnection;
tuo java.util.regex.Kuvio;

2. Kerää sivulla

olevat linkit testattavan URL-osoitteen (eli LambdaTest-blogin) linkit sijaitsevat seleenin tagnaamin avulla. Elementin (tai linkin) tunnistamisessa käytetty tunnisteen nimi on ”a”.

linkit on sijoitettu luetteloon, josta voi iteroida listan läpi tarkistaakseen sivulla olevat Rikkinäiset linkit.

1
luettelo<WebElement> links = driver.findElements(tekijä.tagName (’a’);

3. Iteroidaan URL-osoitteiden kautta

Iteraattoriobjektia käytetään silmukointiin vaiheessa luodun luettelon läpi (2)

1
iteraattori<Webelementti> link = links.iteraattori();

4. Tunnista ja Todenna URL-osoitteet

kun silmukka suoritetaan, kunnes aikaseraattorilla (eli linkillä) ei ole enempää iteroitavia elementtejä. Ankkuritunnisteen ”href” haetaan, ja sama tallennetaan URL-muuttujaan.

1
2
3

while (linkki.hasNext())
{
url = linkki.seuraava().getAttribute(”href”);

Ohita linkkien tarkistus, jos:

a. Linkki on tyhjä tai tyhjä

1
2
3
4
5

if ((url == null) | | (url.isEmpty()))
{
järjestelmä.ulos.println (”verkko-osoitetta ei ole määritetty ankkuri-tunnisteelle tai se on tyhjä”);
continue;
}

b. Linkki sisältää mailto tai puhelinnumero

1
2
3
4
5

if ((url.startsWith (mail_to)) | /(url.startwith (tel)))
{
järjestelmä.ulos.println (”sähköpostiosoite tai puhelin havaittu”);
continue;
}

LinkedIn-sivua tarkistettaessa HTTP-tilakoodi on 999. Boolen muuttuja (ts., LinkedIn) on asetettu true osoittamaan, että se ei ole rikki linkki.

1
2
3
4
5

if(url.startwith(täsmennyssivu))
{
järjestelmä.ulos.println (”URL alkaa LinkedInillä, odotettu tilakoodi on 999”);
bLinkedIn = true;
}

5. Validoi linkit Tilakoodilla

HttpURLConnection-luokan menetelmät mahdollistavat HTTP-pyyntöjen lähettämisen ja HTTP-tilakoodin tallentamisen.

URL-luokan avointen yhteyksien menetelmä avaa yhteyden määriteltyyn URL-osoitteeseen. Se palauttaa URLConnection-ilmentymän, joka edustaa URL-osoitteen tarkoittamaa yhteyttä etäobjektiin. Se on tyyppi-valettu HttpURLConnection.

1
2
3
4
5
6
7

HttpURLConnection urlconnection = null;
……………………………………….
……………………………………….
……………………………………….
urlconnection = (HttpURLConnection) (Uusi URL (url).avoimuus());
urlconnection.set requestmethod (’Pää’);

setRequestMethod HttpURLConnection-luokassa määrittää menetelmän URL-pyyntöön. Pyynnön tyyppi on asetettu HEAD niin, että vain otsikot palautetaan. Toisaalta pyynnön tyyppi GET olisi palauttanut asiakirjarungon, mitä ei vaadita tässä nimenomaisessa testiskenaariossa.

httpurlconnection-luokan connect-menetelmä muodostaa yhteyden URL-osoitteeseen ja lähettää HTTP-pyynnön.

1
urlconnection.yhdistä();

Getresponsecode-menetelmä palauttaa aiemmin lähetetyn pyynnön HTTP-tilakoodin.

1
responseCode = urlconnection.getResponseCode();

jos HTTP-tilakoodi on 400 (tai enemmän), rikkinäisiä linkkejä sisältävä muuttuja (broken_links) kasvaa; muussa tapauksessa valideja linkkejä sisältävä muuttuja (valid_links) kasvaa.

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

if (responseCode >= 400)
{
if ((bLinkedIn == true) & & (responseCode == LinkedInStatus))
{
järjestelmä.ulos.println (url + ”is a LinkedIn Page and is not a broken link”);
valid_links++;
}
else
{
järjestelmä.ulos.println (url + ”is a broken link”);
broken_links++;
}
}
else
{
järjestelmä.ulos.println (url + ”is a valid link”);
valid_links++;
}

toteutus

murtuneiden linkkien testaukseen Selenium Javalla loimme projektin IntelliJ idealla. Peruspom.xml-tiedosto riitti tehtävään!

tässä on toteutuskuva, joka ilmoittaa LambdaTest-Blogisivulla 169 kelvollista linkkiä ja 0 rikkinäistä linkkiä.

Selenium Java-testin suoritus

sähköpostiosoitteet ja puhelinnumerot sisältävät linkit jätettiin hakulistan ulkopuolelle, kuten alla on esitetty.

Automaatiotestin suoritus

voit nähdä testin suorittamisen alla olevasta kuvakaappauksesta ja valmistumisen 2 min 35 sekunnissa, kuten Lambdatestin automaatiolokeista käy ilmi.

LambdaTest automaatiolokit

Broken Link Testing Using Selenium Python

Implementation

Code WalkThrough

1. Tuo moduulit

sen lisäksi, että tuomme Python-moduulit Selenium Webdriverille, tuomme myös pyynnöt-moduulin. Pyynnöt-moduulin avulla voit lähettää kaikenlaisia HTTP-pyyntöjä. Sitä voidaan käyttää myös parametrien siirtämiseen URL-osoitteissa, mukautettujen otsikoiden lähettämiseen ja muuhun.

1
2
3

tuo pyyntöjä
tuo urlib3
pyynnöistä.poikkeukset tuo MissingSchema, InvalidSchema, InvalidURL

2. Kerää sivulla

testattavan URL-osoitteen (eli LambdaTest-blogin) linkit löytyvät paikallistamalla web-elementit CSS-valitsimen ”a” ominaisuuden avulla.

1
linkit = ajuri.find_elements(tekijä.CSS_VALITSIN, ”a”)

koska haluamme elementin olevan iteroitavissa, käytämme find_elements-menetelmää (eikä find_element-menetelmää).

3. Iteroidaan URL-osoitteiden kautta validointia varten

pyynnöt-moduulin head-menetelmää käytetään pään pyynnön lähettämiseen määritettyyn URL-osoitteeseen. Get_attribute-menetelmää käytetään jokaisessa linkissä anchor tagin ”href” – attribuutin saamiseksi.

head-menetelmää käytetään ensisijaisesti tilanteissa, joissa tarvitaan vain status_code-tai HTTP-otsikoita, eikä tiedoston (tai URL-osoitteen) sisältöä tarvita. Head-menetelmä palauttaa pyynnöt.Vastausobjekti, joka sisältää myös HTTP-tilakoodin (eli pyynnön.tilakoodi).

1
2
3
4

link in links:
try:
request = requests.head(lyh.get_attribute (”href”), data = {”key”:”arvo”})
print (”Status of” + linkki.get_attribute (’href’) + ” is ” + str (pyyntö.tilan_koodi))

sama joukko operaatioita suoritetaan iteratiivisesti, kunnes kaikki ”linkit” läsnä sivulla on käytetty loppuun.

4. Validoi linkit Tilakoodilla

jos vaiheessa(3) lähetetyn HTTP-pyynnön HTTP-vastauskoodi on 404 (eli sivua ei löydy), se tarkoittaa, että linkki on rikki. Jos linkit eivät ole rikki, HTTP-tilakoodi on 200.

1
2
3
4

jos (pyyntö.tilan_koodi == 404):
broken_links = (broken_links + 1)
else:
valid_links = (valid_links + 1)

5. Ohita epäolennaiset pyynnöt

, kun niitä käytetään linkeissä, jotka eivät sisällä määritettä ”href” (esim.mailto, telephone jne.).), head-menetelmä johtaa poikkeukseen (eli 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 (”kohdannut joitakin muita suorituksia”)

nämä poikkeukset on pyydetty, ja sama on painettu päätteeseen.

toteutus

olemme käyttäneet Pyunitia (tai unittestia) tässä, Pythonin oletustestikehystä Rikkinäisten linkkien testaukseen seleenin avulla. Suorita seuraava komento päätteessä:

1
python Broken_Links.py

toteutus kestäisi noin 2-3 minuuttia, sillä LambdaTest-blogisivu koostuu noin 150+ linkistä. Alla oleva suorituskaappaus näyttää, että sivulla on 169 kelvollista linkkiä ja nolla rikkinäistä linkkiä.

joissakin kohdissa on voimassa InvalidSchema-poikkeus tai MissingSchema-poikkeus, mikä osoittaa, että nämä linkit on jätetty arvioinnin ulkopuolelle.

virheellinen Skeemapoikkeus

pään pyyntö LinkedIniin (ts.) johtaa HTTP-Tilakoodiin 999. Kuten tässä StackOverflow-ketjussa todetaan, LinkedIn suodattaa pyynnöt käyttäjäagentin perusteella, ja pyyntö johti ’Access Denied’ (eli 999 HTTP-Tilakoodina).

HTTP-tilakoodi

varmistimme, onko Lambdatestin blogisivulla oleva LinkedIn-linkki rikki vai ei suorittamalla saman testin paikallisella Seleeniruudukolla, jonka tuloksena HTTP/1.1 200 OK.

Broken Link Testing Using Selenium C#

Implementation

Code WalkThrough

the nunit framework is used for automation testing; aiempi blogimme nunit-testiautomaatiosta seleeni C#: llä voi auttaa sinua pääsemään alkuun kehyksen kanssa.

1. Include HttpClient

httpclient-nimiavaruus lisätään käyttöä varten käyttämällä direktiiviä. HttpClient-luokka C#: ssä tarjoaa perusluokan HTTP-pyyntöjen lähettämiseen ja HTTP-vastauksen vastaanottamiseen URI: n tunnistamasta resurssista.

Microsoft suosittelee System. Net. Http.Httpclientin käyttöä System.Net.Httpwebrequestin sijaan; Httpwebrequestia voitaisiin käyttää myös seleeni C#: n rikkoutuneiden linkkien havaitsemiseen.

1
2

using System. Net. Http;
using System.Ketjuttaminen.Tehtävät;

2. Määrittele Async-menetelmä, joka palauttaa tehtävän

Async-Testimenetelmä määritellään käyttämällä GetAsync-menetelmää, joka lähettää GET-pyynnön määriteltyyn URI: ään asynkronisena operaationa.

1
2

Julkinen async-tehtävä LT_Broken_Links_Test()
{

3. Kerää sivulla

olevat linkit ensin luomme HttpClient-instanssin.

1
käyttämällä var client = Uusi HttpClient();

linkit läsnä URL alla testi (eli, LambdaTest blogi) kerätään paikallistamalla web elementtejä TagName ”a” ominaisuus.

1
var links = driver.FindElements(Tekijä.TagName (”a”));

seleenin find_elements-menetelmää käytetään sivun linkkien paikantamiseen, kun se palauttaa taulukon (tai luettelon), jota voidaan iteroida linkkien toimivuuden varmistamiseksi.

4. Iteroidaan URL-osoitteiden kautta validointia varten

find_elements-menetelmällä sijoitetut linkit todennetaan for-silmukassa.

1
2

foreach (var-linkki linkeissä)
{

suodatamme linkit, jotka sisältävät / email-osoitteet/puhelinnumerot / LinkedIn-osoitteet. Myös linkit, joissa ei ole Linkkitekstiä, suodatetaan pois.

1
2

jos (!(linkki.Teksti.Sisältää (”sähköposti”) | | linkin.Teksti.Sisältää (”https://www.linkedin.com”) / / linkin.Text = = ”” / / link.Yhtä suuri (null)))
{

HttpClient-luokan getasync-menetelmä lähettää GET-pyynnön vastaavalle URI: lle asynkronisena operaationa. Argumentti GetAsync-menetelmälle on getattribute-menetelmällä kerätyn ankkurin ”href” – attribuutin arvo.

odottava operaattori keskeyttää Async-menetelmän arvioinnin, kunnes asynkroninen toiminta on saatu päätökseen. Asynkronisen toiminnon päätyttyä odottava operaattori palauttaa httpresponsemessagen, joka sisältää tiedot ja tilakoodin.

1
2
3

/* Hanki URI * /
Httponsemessage response = odota asiakasta.GetAsync(lyh.GetAttribute(”href”));
järjestelmä.Lohduttaa.WriteLine ($”URL: {linkki.GetAttribute (”href”)} status on :{response.StatusCode}”);

5. Validoi linkit Tilakoodilla

, jos HTTP-vastauskoodi (ts.StatusCode) vaiheessa(4) lähetetylle HTTP-pyynnölle on httpstatuscode.OK (eli 200), se tarkoittaa, että pyyntö valmistui onnistuneesti.

1
2
3
4
5
6
7
8
9

järjestelmä.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”);
}
}

suoritus

tässä on suorituksen tilannekuva, joka osoittaa, että testi suoritettiin onnistuneesti.

selenium webdriver-testin suoritus

” Jaa-kuvakkeisiin ” eli WhatsAppiin, Facebookiin, Twitteriin jne. Näiden lisäksi linkit, loput linkit LambdaTest blogisivu palauttaa HttpStatusCode.OK (eli 200).

 Http-tilakoodi

Broken Link Testing Using Selenium PHP

Implementation

Code WalkThrough

1. Lue sivun lähde

PHP: n file_get_contents-funktiota käytetään sivun HTML-lähteen lukemiseen Merkkijonomuuttujaksi (esimerkiksi $html).

1
2

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

2. Instantiate DOMDocument-Luokka

PHP: n DOMDocument-luokka edustaa kokonaista HTML-dokumenttia ja toimii dokumenttipuun juurena.

1
$htmlDom = Uusi Domdokumentti;

3. Sivun

DOMDocument:: loadHTML () – funktiota käytetään $html: n sisältämän HTML-lähteen jäsentämiseen. Onnistuneessa suorituksessa funktio palauttaa DOMDocument-objektin.

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

4. Ote linkit sivulta

sivulla olevat linkit uutetaan DOMDocument-luokan getelementsbytagname-menetelmällä. Elementit (tai linkit) etsitään jäsennetyn HTML-lähteen ” a ” – tagin perusteella.

getelementsbytagname-funktio palauttaa uuden domnodelist-ilmentymän, joka sisältää paikallisen tagin nimen elementit (tai linkit) (ts. tagi)

1
$links = $htmlDom – >getElementsByTagName (”a’);

5. Iteroidaan URL-osoitteiden kautta validointia varten

vaiheessa (4) luotu DOMNodeList käydään läpi linkkien oikeellisuuden tarkistamiseksi.

1
2
3

foreach($links as $link)
{
$linkText = $link – >nodeValue;

vastaavan linkin yksityiskohdat saadaan käyttämällä attribuuttia ”href”. Samaan käytetään getattribute-menetelmää.

1
$linkHref = $link – >getAttribute(”href”);

Ohita linkkien tarkistus, jos:

a. linkki on tyhjä

1
2
3
4

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

b. Linkki on hashtag tai ankkurilinkki

1
2
3
4

if ($linkHref == ’#’)
{
jatka;
}

C. linkki sisältää mailto tai addtoany (eli sosiaalisen jakamisen vaihtoehdot).

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)
{
palauta epätosi;
}
else
{
return true;
}
}
public function test_Broken_Links()
{
$pattern_1 = ” / \baddtoany\b/’;
$pattern_2 = ” / \bmaillo\b/’;
…………………………………………………………..
…………………………………………………………..
…………………………………………………………..
if ((check_nonlinks($linkHref, $pattern_1))||(check_nonlinks ($linkHref, $pattern_2)))
{
print (”\nAdd_To_Any or email sensed”);
continue;
}
…………………………………………………………..
…………………………………………………………..
…………………………………………………………..
}

preg_match-funktio käyttää säännöllistä lauseketta (regex) mailto-ja addtoany-kirjainhaun suorittamiseen. Mailto & addtoanyn säännölliset lausekkeet ovat vastaavasti ”/ \bmaillo\b / ”& ” / \baddtoany\b/”.

6. Vahvista HTTP-koodi käyttämällä cURL

käytämme curlia saadaksemme tietoa vastaavan linkin tilasta. Ensimmäinen vaihe on cURL-istunnon alustaminen ”linkillä”, jolle validointi on tehtävä. Menetelmä palauttaa cURL-instanssin, jota käytetään toteutuksen loppupuolella.

1
$curl = curl_init ($linkHref);

curl_setopt-menetelmää käytetään asetettaessa asetuksia annettuun cURL-istuntokahvaan (eli $curl).

1
curl_setopt ($curl, CURLOPT_NOBODY, true);

curl_exec-menetelmää kutsutaan annetun cURL-istunnon suorittamiseen. Se palauttaa True onnistuneen suorittamisen.

1
$tulos = curl_exec ($curl);

tämä on tärkein osa logiikkaa, joka tarkistaa rikki linkkejä sivulla. Curl_getinfo-toiminto, joka vie cURL – istuntokahvan (eli $curl) ja CURLINFO_RESPONSE_CODE (ts. CURLINFO_HTTP_CODE) käytetään tiedon saamiseksi viimeisestä siirrosta. Se palauttaa HTTP-tilakoodin vastauksena.

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

kun pyyntö on suoritettu onnistuneesti, HTTP-tilakoodi 200 palautetaan, ja muuttuja, jolla on voimassa olevien linkkien määrä (eli $valid_links), kasvaa. Linkit, joiden HTTP-tilakoodi on 400 (tai enemmän), tarkistetaan, jos ”linkki testattavana” oli Lambdatestin, LinkedIn-sivu. Kuten aiemmin mainittiin, LinkedIn-sivun tilakoodi on 999; näin ollen $valid_links kasvaa.

kaikkien muiden sellaisten linkkien osalta, jotka palauttivat HTTP-tilakoodin 400 (tai enemmän), muuttuja, jolla on Rikkinäisten linkkien määrä (eli $broken_links), kasvaa.

1
2
3
4
5
6
7
8
9
10

if (($linkedin_page_status) & & ($statusCode == 999))
{
print (”\nlink”. $ linkHref . ”on LinkedIn sivu ja status on”.$statusCode);
$validlinks++;
}
else
{
print (”\nlink”. $ linkHref . ”on rikki linkki ja tila on”.$statusCode);
$brokenlinks++;
}

suoritus

käytämme PHPUnit Frameworkia sivun Rikkinäisten linkkien testaamiseen. Lataa phpunit framework, lisää tiedoston säveltäjä.JSON pääkansiossa ja suorita säveltäjä vaativat päätteellä.

Suorita päätteessä seuraava komento Selenium PHP: n Rikkinäisten linkkien tarkistamiseksi.

1
toimittaja\bin\phpunit testit\BrokenLinksTest.php

tässä on toteutuskuva, joka näyttää yhteensä 116 voimassa olevaa linkkiä ja 0 rikkoutunutta linkkiä LambdaTest-blogissa. Koska sosiaalisen jakamisen linkit (eli addtoany) ja sähköpostiosoite jätetään huomiotta, kokonaislukumäärä on 116 (169 Seleenipython-testissä).

toteutuksen tilannekuva

johtopäätös

kiinteä

lähde

Rikkinäiset linkit, joita kutsutaan myös kuolleiksi linkeiksi tai lahoiksi linkeiksi, voivat haitata käyttökokemusta, jos niitä on sivustolla. Rikkinäiset linkit voivat vaikuttaa myös hakukoneiden rankingiin. Siksi rikkoutuneiden linkkien testaus olisi suoritettava määräajoin verkkosivujen kehittämiseen ja testaamiseen liittyvissä toimissa.

sen sijaan, että turvauduttaisiin kolmannen osapuolen työkaluihin tai manuaalisiin menetelmiin Rikkinäisten linkkien tarkistamiseksi verkkosivustolla, Rikkinäisten linkkien testaus voidaan tehdä Selenium WebDriver-ohjelmalla Java -, Python -, C# – tai PHP-ohjelmalla. HTTP-Tilakoodia, joka palautetaan, kun käytät mitä tahansa web-sivua, tulee käyttää Rikkinäisten linkkien tarkistamiseen Selenium Frameworkin avulla.

Frequently Asked Questions

Miten löydän murtuneita linkkejä seleenipytonista?

Rikkinäisten linkkien tarkistamista varten on kerättävä kaikki verkkosivun linkit tagin perusteella. Lähetä sitten HTTP-pyyntö linkeistä ja lue HTTP-vastauskoodi. Selvitä HTTP-vastauskoodin perusteella, onko linkki kelvollinen vai rikki.

Miten tarkistan Rikkinäiset linkit?

jos haluat jatkuvasti seurata sivustoasi katkenneiden linkkien varalta Google Search Consolella, noudata näitä ohjeita:

  1. Kirjaudu Google Search Console-tilillesi.
  2. Napsauta sivustoa, jota haluat seurata.
  3. Napsauta Crawl ja valitse sitten nouda Googlena.
  4. kun Google on ryöminyt sivustoa, pääset tuloksiin napsauttamalla Ryömintävirheet ja valitsemalla sitten Ryömintävirheet.
  5. kohdassa URL-virheet näet kaikki rikkoutuneet linkit, jotka Google löysi ryömintäprosessin aikana.

Miten löydän rikkinäisiä kuvia verkosta seleenin avulla?

käy sivulla. Iteroi jokaisen HTTP-arkiston kuvan läpi ja katso, onko siinä 404-tilakoodi. Säilytä jokainen rikkinäinen kuva kokoelmassa. Tarkista, että rikkinäisten kuvien kokoelma on tyhjä.

Miten saan kaikki seleenin linkit?

voit saada kaikki paikalla olevat linkit verkkosivulle <a> – tägin perusteella. Jokainen <a> tagi edustaa linkkiä. Käytä seleeni paikantimet löytää kaikki tällaiset tunnisteet helposti.

miksi rikkinäiset lenkit ovat pahasta?

ne voivat vahingoittaa käyttäjäkokemusta-kun käyttäjät klikkaavat linkkejä ja päätyvät umpikujaan 404 virheeseen, he turhautuvat eivätkä välttämättä koskaan palaa. Ne devalvoivat SEO pyrkimyksiä-Rikkinäiset linkit rajoittavat virtaa linkin pääoman koko sivuston, mikä vaikuttaa rankingissa negatiivisesti.

Himanshu Sheth

Himanshu Sheth on kokenut teknikko ja bloggaaja, jolla on yli 15 vuotta monipuolista työkokemusta. Hän työskentelee tällä hetkellä Lambdatestin ”Pääkehittäjävangelistina” ja ”Senior managerina”. Hän on erittäin aktiivinen startup-yhteisössä Bengaluru (ja alas etelään) ja rakastaa vuorovaikutuksessa intohimoinen perustajat hänen henkilökohtainen blogi (jota hän on ylläpitänyt viime 15+ vuotta).

kirjoittanut

Leave a Reply

Sähköpostiosoitettasi ei julkaista.