Hogyan Lehet Megtalálni A Törött Linkeket A Selenium WebDriver Segítségével?

milyen gondolatok jutnak eszembe, amikor 404/oldal nem található/halott hiperhivatkozásokkal találkozik egy weboldalon? Aargh! Bosszantónak találná, ha törött hiperhivatkozásokkal találkozik, ez az egyetlen oka annak, hogy folyamatosan összpontosítson a törött linkek létezésének eltávolítására a webes termékében (vagy webhelyén). Ahelyett, hogy a kézi ellenőrzés, akkor tőkeáttétel automatizálás törött link tesztelés szelén WebDriver.

törött

forrás

ha egy adott link megszakad, és egy látogató az oldalra kerül, az hatással van az oldal funkcionalitására, és gyenge felhasználói élményt eredményez. A halott linkek károsíthatják a termék hitelességét, mivel azt a benyomást keltheti a látogatóknak, hogy minimális hangsúlyt fektetnek az élményre.

ha webes termékében sok olyan oldal (vagy link) található, amelyek 404-es hibát eredményeznek (vagy az oldal nem található), akkor a keresőmotorok (például a Google) termékrangsora is súlyosan érintett lesz. A halott linkek eltávolítása a SEO (Search Engine Optimization) tevékenység egyik szerves része.

a Selenium WebDriver bemutató sorozat ezen részében mélyen belemerülünk a törött linkek megtalálásába a Selenium WebDriver segítségével. A Selenium Python, a Selenium Java, a Selenium C# és a Selenium PHP használatával bizonyítottuk a megszakadt kapcsolat tesztelését.

Bevezetés a megszakadt linkekbe a webes tesztelésben

egyszerűen fogalmazva: a weboldalon (vagy webalkalmazásban) megszakadt (vagy elhalt) linkek olyan linkek, amelyek nem érhetők el, és nem a várt módon működnek. A linkek átmenetileg leállhatnak a szerverproblémák miatt, vagy rosszul konfigurálhatók a hátsó végén.

404 - Az oldal nem található

forrás

a 404-es hibát eredményező oldalakon kívül a hibás hivatkozások más kiemelkedő példái a hibás URL-ek, a tartalomra mutató linkek (pl. dokumentumok, pdf, képek stb.), amelyeket áthelyeztek vagy töröltek.

a megszakadt linkek kiemelkedő okai

Íme néhány a megszakadt linkek előfordulásának gyakori okai (halott linkek vagy link rothadások):

  • a felhasználó által megadott helytelen vagy hibásan írt URL.
  • strukturális változások a honlapon (azaz permalinks) URL átirányítások vagy belső átirányítások nincsenek megfelelően konfigurálva.
  • linkek olyan tartalmakhoz, mint videók, dokumentumok stb. azokat vagy áthelyezik, vagy törlik. Ha a tartalom áthelyezésre kerül, a’ belső linkek ‘ átirányításra kerülnek a kijelölt linkekre.
  • a webhely karbantartása miatt a webhely ideiglenesen elérhetetlenné vált.
  • törött HTML-címkék, JavaScript-hibák, helytelen HTML/CSS-testreszabások, törött beágyazott elemek stb., a vezető oldalon belül megszakadt linkekhez vezethet.
  • a helymeghatározási korlátozások megakadályozzák a webhelyhez való hozzáférést bizonyos IP-címekről (ha feketelistára kerülnek) vagy a világ bizonyos országaiból. A szelénnel végzett földrajzi helymeghatározási tesztelés segít biztosítani, hogy a tapasztalat az adott helyhez (vagy országhoz) igazodjon, ahonnan a webhelyet elérik.

miért érdemes ellenőrizni a törött linkeket?

a törött linkek nagy kikapcsolást jelentenek a webhelyére érkező látogatók számára. Íme néhány fő oka annak, hogy miért érdemes ellenőrizni a törött linkeket a webhelyén:

  • a megszakadt linkek károsíthatják a felhasználói élményt.
  • a törött (vagy halott) linkek eltávolítása elengedhetetlen a SEO-hoz (Keresőoptimalizálás), mivel befolyásolhatja a webhely rangsorolását a keresőmotorokban (pl.

a törött linkek tesztelése a Selenium WebDriver segítségével végezhető el egy weboldalon, amely viszont felhasználható a webhely halott linkjeinek eltávolítására.

megszakadt linkek és HTTP-állapotkódok

amikor egy felhasználó meglátogat egy webhelyet, a böngésző kérést küld a webhely szerverének. A szerver a böngésző kérésére egy háromjegyű kóddal válaszol, amelyet HTTP Állapotkódnak hívnak.’

a HTTP-állapotkód a szerver válasza a webböngészőből küldött kérésre. Ezek a HTTP-állapotkódok egyenértékűnek tekinthetők a böngésző (ahonnan az URL-kérést elküldik) és a szerver közötti beszélgetéssel.

bár különböző HTTP-állapotkódokat használnak különböző célokra, a legtöbb kód hasznos a webhely problémáinak diagnosztizálására, a webhely leállásának minimalizálására, az elhalt linkek számára stb. Minden háromjegyű állapotkód első számjegye 1~5 számmal kezdődik. Az állapotkódok 1xx, 2xx formában jelennek meg.., 5xx az adott tartomány állapotkódjainak jelzésére. Mivel ezen tartományok mindegyike a szerver válaszának különböző osztályából áll, a vitát a megszakadt linkekre bemutatott HTTP Állapotkódokra korlátoznánk.

itt vannak a közös állapotkód osztályok, amelyek hasznosak a szelénnel való megszakadt kapcsolatok észlelésében:

a HTTP állapotkód osztályai leírás
1xx A szerver még mindig gondolkodik a kérésen.
2xx a böngésző által küldött kérés sikeresen befejeződött, és a szerver a várt választ küldte a böngészőnek.
3xx ez azt jelzi, hogy átirányítás történik. Például a 301 átirányítást népszerűen használják állandó átirányítások végrehajtására egy webhelyen.
4xx ez azt jelzi, hogy egy adott oldal (vagy teljes oldal) nem érhető el.
5xx ez azt jelzi, hogy a szerver nem tudta teljesíteni a kérést, annak ellenére, hogy a böngésző érvényes kérést küldött.

Íme néhány a webkiszolgáló által a megszakadt link észlelésekor bemutatott általános HTTP állapotkódok közül:

HTTP állapotkód leírás
400 (Hibás kérés) a szerver nem tudja feldolgozni a kérést, mivel az említett URL helytelen.
400 (Bad Request-Bad Host) ez azt jelzi, hogy a gazdagép neve érvénytelen, ami miatt a kérést nem lehet feldolgozni.
400 (Bad Request-Bad URL) ez azt jelzi, hogy a kiszolgáló nem tudja feldolgozni a kérést, mivel a megadott URL hibás (azaz hiányzó zárójelek, perjel stb.).
400 (Hibás kérés-időtúllépés) ez azt jelzi, hogy a HTTP-kérések időtúlléptek.
400 (Hibás kérés-üres) a szerver által visszaadott válasz üres, tartalom és válaszkód nélkül.
400 (Bad Request-Reset) ez azt jelzi, hogy a szerver nem tudja feldolgozni a kérést, mivel más kérések feldolgozásával van elfoglalva, vagy a webhely tulajdonosa rosszul konfigurálta.
403 (tiltott) valódi kérést küldünk a szervernek, de megtagadja annak teljesítését, mivel engedély szükséges.
404 (Az oldal nem található) az erőforrás (vagy az oldal) nem érhető el a szerveren.
408 (időtúllépés kérése) a szerver időtúllépéssel várja a kérést. Az ügyfél (azaz a böngésző) ugyanazt a kérést küldheti azon az időn belül, ameddig a szerver készen áll a várakozásra.
410 (Gone) egy HTTP állapotkód, amely állandóbb, mint a 404 (Az oldal nem található). A 410 azt jelenti, hogy az oldal eltűnt.
az oldal nem érhető el a szerveren, és semmilyen továbbítási (vagy átirányítási) mechanizmus nem lett beállítva. A 410 oldalra mutató linkek egy halott erőforráshoz küldik a látogatókat.
503 (a szolgáltatás nem érhető el) ez azt jelzi, hogy a szerver ideiglenesen túlterhelt, ami miatt nem tudja feldolgozni a kérést. Ez azt is jelentheti, hogy a karbantartást a szerveren végzik, jelezve a keresőmotorokat a webhely ideiglenes leállásáról.

hogyan lehet megtalálni a törött linkeket a Selenium WebDriver segítségével?

a Selenium Webdriverrel használt nyelvtől függetlenül a Selenium használatával végzett megszakadt kapcsolat tesztelésének irányadó elvei ugyanazok maradnak. Itt vannak a törött linkek tesztelésének lépései a Selenium WebDriver használatával:

  1. a címke segítségével gyűjtheti össze a weboldalon található összes link részleteit.
  2. HTTP kérés küldése minden linkhez.
  3. ellenőrizze az előző lépésben elküldött kérésre kapott megfelelő válaszkódot.
  4. ellenőrizze, hogy a kapcsolat megszakadt-e vagy sem a kiszolgáló által küldött válaszkód alapján.
  5. ismételje meg a lépéseket (2-4) az oldalon található minden hivatkozáshoz.

ebben a Selenium WebDriver oktatóanyagban bemutatjuk, hogyan kell elvégezni a törött link tesztelést a Selenium WebDriver használatával Python, Java, C# és PHP nyelven. A teszteket (Chrome 85.0 + Windows 10) kombinációval hajtják végre, a végrehajtást pedig a LambdaTest által biztosított felhőalapú Selenium rácson hajtják végre.

a LambdaTest használatának megkezdéséhez hozzon létre egy fiókot a platformon, és jegyezze fel a & hozzáférési kulcsot, amely elérhető a LambdaTest profil részében. A böngésző képességeit segítségével generált LambdaTest képességek generátor.

itt van a teszt forgatókönyv használt megállapítás törött linkeket a honlapon a szelén:

teszt forgatókönyv

  1. menj LambdaTest Blog azaz https://www.lambdatest.com/blog/ a Chrome 85.0
  2. Gyűjtsd össze az összes link jelen van az oldalon
  3. HTTP kérés küldése minden link
  4. print függetlenül attól, hogy a link megszakadt-e vagy sem a terminálon

fontos megjegyezni, hogy a Selenium használatával végzett törött linkekkel töltött idő a teszt alatt lévő weboldalon található linkek számától függ. Minél több a linkek száma az oldalon, annál több időt töltenek a törött linkek megtalálásával. Például a LambdaTest hatalmas számú hivatkozással rendelkezik (~150+); ezért a törött linkek megtalálásának folyamata eltarthat egy ideig (kb.

teszt Selenium Grid

futtassa a tesztelési SCRIPT SELENIUM GRID

2000+ böngészők és OS

ingyenes regisztráció

törött Link tesztelés Selenium Java

végrehajtás

Kód WalkThrough

1. A szükséges csomagok importálása

a HttpURLConnection csomag módszerei HTTP kérések küldésére és a HTTP állapotkód (vagy válasz) rögzítésére szolgálnak.

a regex módszerei.Minta csomag ellenőrizze, hogy a megfelelő link tartalmaz-E E-mail címet vagy telefonszámot egy mintában tárolt speciális szintaxis segítségével.

1
2

Java.net.HttpURLConnection importálása;
Java importálása.util.regex.Minta;

2. Gyűjtse össze az oldalon található linkeket

a vizsgált URL-en található linkek (azaz a LambdaTest Blog) a szelénben található tagname használatával találhatók. Az elem (vagy link) azonosításához használt címke neve ‘a’.

a hivatkozások egy listába kerülnek, hogy végigmenjenek a listán, hogy ellenőrizzék a hibás linkeket az oldalon.

1
List< WebElement> linkek = vezető.findElements(által.tagName (“a”));

3.

az Iterátorobjektum a lépésben létrehozott lista hurkolására szolgál(2)

1
Iterator< WebElement> link = linkek.iterátor();

4. Azonosítsa és ellenőrizze az URL-eket

egy while ciklus fut, amíg az idő Iterátornak (azaz a linknek) nincs több eleme az iterációhoz. A horgonycímke’ href ‘ – je visszakeresésre kerül, és az URL-változóban tárolódik.

1
2
3

míg (link.hasNext())
{
url = link.következő ().getAttribute (“href”);

kihagyja a linkek ellenőrzését, ha:

a. A link null vagy üres

1
2
3
4
5

ha ((url = = null) / / (url.isEmpty()))
{
rendszer.kifelé.println (“az URL vagy nincs konfigurálva a horgonycímkéhez, vagy üres”);
folytatás;
}

b. A link tartalmaz mailto vagy telefonszámot

1
2
3
4
5

ha ((url.startsWith (mail_to)) / / (url.startwith (tel)))
{
rendszer.kifelé.println (“e-mail cím vagy telefon észlelve”);
folytatás;
}

a LinkedIn oldal ellenőrzésekor a HTTP állapotkód 999. Logikai változó (pl., LinkedIn) értéke true, jelezve, hogy ez nem törött link.

1
2
3
4
5

ha (url.startsWith (LinkedInPage))
{
rendszer.kifelé.println (“az URL a LinkedIn-nel kezdődik, a várható állapotkód 999”);
bLinkedIn = igaz;
}

5.

a HttpURLConnection osztály metódusai biztosítják a HTTP kérések küldését és a HTTP állapotkód rögzítését.

az URL osztály openConnection metódusa megnyitja a kapcsolatot a megadott URL-lel. Egy URLConnection példányt ad vissza, amely az URL által hivatkozott távoli objektumhoz való kapcsolatot képviseli. Ez Típus-öntött HttpURLConnection.

1
2
3
4
5
6
7

HttpURLConnection urlconnection = null;
……………………………………….
……………………………………….
……………………………………….
urlconnection = (HttpURLConnection) (új URL(url).openConnection());
URL kapcsolat.setRequestMethod (“fej”);

a Setrequestmethod a HttpURLConnection osztályban beállítja az URL-kérés módszerét. A kérés típusa fejre van állítva, így csak a fejlécek kerülnek visszaadásra. Másrészt a GET kéréstípus visszaadta volna a dokumentum törzsét, amelyre ebben a konkrét tesztforgatókönyvben nincs szükség.

a httpurlconnection osztály connect metódusa létrehozza a kapcsolatot az URL-lel, és HTTP kérést küld.

1
URL kapcsolat.csatlakozás();

a getresponsecode metódus a korábban elküldött kérés HTTP-Állapotkódját adja vissza.

1
responseCode = urlconnection.getResponseCode();

ha a HTTP állapotkód 400 (vagy több), a törött linkeket tartalmazó változó száma (azaz broken_links) növekszik; különben az érvényes linkeket tartalmazó változó (azaz valid_links) növekszik.

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))
{
rendszer.kifelé.println (url + “egy LinkedIn oldal, és nem törött link”);
valid_links++;
}
else
{
rendszer.kifelé.println (url + “egy törött link”);
broken_links++;
}
}
else
{
rendszer.kifelé.println (url + “egy érvényes link”);
valid_links++;
}

végrehajtás

a Selenium Java használatával végzett törött linkek teszteléséhez létrehoztunk egy projektet az IntelliJ IDEA-ban. Az alap pom.az xml fájl elegendő volt a munkához!

itt van a végrehajtási pillanatkép, amely 169 érvényes linket és 0 törött linket jelez a LambdaTest Blogoldalon.

Selenium Java Test Execution

az e-mail címeket és telefonszámokat tartalmazó linkeket kizárták a keresési listából, az alábbiak szerint.

automatizálási teszt végrehajtása

láthatja, hogy a teszt az alábbi képernyőképen fut, és 2 perc 35 másodperc alatt befejeződik, amint az a LambdaTest automatizálási naplóin látható.

LambdaTest automatizálási naplók

törött kapcsolat tesztelése szelén Python használatával

megvalósítás

Kód áttekintés

1. Modulok importálása

a Selenium WebDriver Python moduljainak importálásán kívül a kérések modult is importáljuk. A kérések modul lehetővé teszi, hogy küldjön mindenféle HTTP kéréseket. Használható paraméterek URL-ben történő továbbítására, egyéni fejlécek küldésére stb.

1
2
3

kérések importálása
urllib3 importálása
kérésekből.kivételek import MissingSchema, InvalidSchema, InvalidURL

2. Gyűjtse össze az oldalon található linkeket

a vizsgált URL-en található linkeket (azaz a LambdaTest blogot) úgy találja meg, hogy a webes elemeket a CSS választó “a” tulajdonságával találja meg.

1
linkek = vezető.find_elements(által.CSS_SELECTOR, “a”)

mivel azt akarjuk, hogy az elem iterálható legyen, a find_elements metódust használjuk (nem pedig a find_element metódust).

3. Ismételje meg az URL-eket az ellenőrzéshez

a requests modul head metódusa a HEAD kérés elküldésére szolgál a megadott URL-re. A get_attribute metódust minden linken használják a horgonycímke ‘href’ attribútumának megszerzéséhez.

a head metódust elsősorban olyan esetekben használják, ahol csak status_code vagy HTTP fejlécek szükségesek, és a fájl (vagy URL) tartalma nem szükséges. A head módszer visszaadja a kéréseket.Válaszobjektum, amely a HTTP állapotkódot is tartalmazza (azaz kérés.status_code).

1
2
3
4

a link a linkek:
próbálja:
request = kérések.fej (link.get_attribute (‘href’), data = {‘kulcs’:’érték’})
nyomtatás (“állapota” + link.get_attribute (‘href’) + “jelentése” + str (kérés.status_code))

ugyanazokat a műveleteket hajtják végre iteratív módon, amíg az oldalon található összes link ki nem merül.

4. A hivatkozások érvényesítése a

állapotkód segítségével ha a(3) lépésben elküldött HTTP-kérelem HTTP-válaszkódja 404 (azaz az oldal nem található), ez azt jelenti, hogy a link megszakadt link. A nem törött linkek esetében a HTTP állapotkód 200.

1
2
3
4

if (kérés.status_code == 404):
broken_links = (broken_links + 1)
else:
valid_links = (valid_links + 1)

5. A

irreleváns kérések kihagyása olyan hivatkozásokon, amelyek nem tartalmazzák a ‘href’ attribútumot (pl. mailto, telefon stb.), a fej módszer kivételt eredményez (azaz 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 (“találkozott néhány más execption”)

ezeket a kivételeket elkapják, és ugyanezt nyomtatják a terminálra.

végrehajtás

itt a PyUnit (vagy unittest) – et használtuk, amely a Python alapértelmezett tesztkerete a Selenium használatával végzett törött linkek teszteléséhez. Futtassa a következő parancsot a terminálon:

1
python Broken_Links.py

a végrehajtás körülbelül 2-3 percet vesz igénybe, mivel a LambdaTest Blogoldal körülbelül 150+ linkből áll. Az alábbi végrehajtási képernyőkép azt mutatja, hogy az oldal 169 érvényes hivatkozással és nulla törött hivatkozással rendelkezik.

egyes helyeken tanúja lehet az InvalidSchema kivételnek vagy a MissingSchema kivételnek, ami azt jelzi, hogy ezek a linkek kihagyásra kerülnek az értékelésből.

érvénytelen Sémakivétel

a LinkedIn-hez intézett FEJKÉRELEM (azaz) 999-es HTTP-állapotkódot eredményez. Amint azt a StackOverflow ezen szálában elmondtuk, a LinkedIn a felhasználói ügynök alapján szűri a kéréseket, és a kérés eredményeként ‘Hozzáférés megtagadva’ (azaz 999 HTTP állapotkód).

HTTP állapotkód

ellenőriztük, hogy a LambdaTest blogoldalon található LinkedIn link megszakadt-e vagy sem, ha ugyanazt a tesztet futtattuk a helyi Selenium rácson, ami HTTP/1.1 200 OK-t eredményezett.

törött kapcsolat tesztelése szelén C #

implementáció

Kód áttekintés

a NUnit keretrendszert használják automatizálási teszteléshez; korábbi blogunk a NUnit teszt automatizálásáról a Selenium c# segítségével segíthet a keretrendszer elindításában.

1. Include HttpClient

a HttpClient névtér a using direktíván keresztül kerül felhasználásra. A C# HttpClient osztálya egy alaposztályt biztosít a HTTP-kérések küldéséhez és a HTTP-válaszok fogadásához egy URI által azonosított erőforrástól.

a Microsoft a System.Net.Http.HttpClient használatát javasolja a System.Net.HttpWebRequest helyett; a HttpWebRequest felhasználható a Selenium C#hibás linkjeinek észlelésére is.

1
2

a System.Net.Http használata;
a System használata.Threading.Feladatok;

2. Adjon meg egy aszinkron metódust, amely egy feladatot ad vissza

az aszinkron teszt metódus a GetAsync metódust használja, amely aszinkron műveletként GET kérést küld a megadott URI-nak.

1
2

nyilvános aszinkron feladat LT_Broken_Links_Test()
{

3. Gyűjtse össze az oldalon található linkeket

először létrehozunk egy HttpClient példányt.

1
a var client = new HttpClient()használata;

a tesztelt URL-en található linkeket (azaz a LambdaTest blogot) úgy gyűjtjük össze, hogy a webes elemeket a TagName “a” tulajdonság segítségével keressük meg.

1
var linkek = vezető.FindElements(Által.TagName (“a”));

a szelénben található find_elements metódust az oldalon található linkek megkeresésére használják, mivel egy tömböt (vagy listát) ad vissza, amely iterálható a linkek működőképességének ellenőrzésére.

4. Ismételje meg az URL-eket az ellenőrzéshez

a find_elements metódus segítségével található linkeket a for ciklus ellenőrzi.

1
2

foreach (var link a Linkekben)
{

szűrjük az /e-mail címeket/telefonszámokat/LinkedIn címeket tartalmazó linkeket. A Linkszöveg nélküli linkeket is kiszűrjük.

1
2

ha (!(link.SMS.Tartalmaz (“e-mail”) | | link.SMS.Tartalmaz (“https://www.linkedin.com”) / / link.Szöveg = = ” | / / link.Egyenlő (null)))
{

a HttpClient osztály GetAsync metódusa aszinkron műveletként GET kérést küld a megfelelő URI-nak. A getasync metódus argumentuma a horgony ‘href’ attribútumának értéke, amelyet a getattribute metódussal gyűjtöttek össze.

az aszinkron művelet befejezéséig a wait operátor felfüggeszti az aszinkron módszer kiértékelését. Az aszinkron művelet befejezése után a wait operátor visszaadja a HttpResponseMessage-t, amely tartalmazza az adatokat és az állapotkódot.

1
2
3

/* Szerezd meg az URI * /
HttpResponseMessage response = várja az ügyfelet.GetAsync (link.GetAttribute (“href”));
rendszer.Konzol.WriteLine ($”URL: {link.GetAttribute (“href”)} állapot: {válasz.StatusCode}”);

5. Ellenőrizze a linkeket a

Állapotkódon keresztül, ha a HTTP válaszkód (azaz válasz.StatusCode) a(4) lépésben elküldött HTTP kérés HttpStatusCode.OK (azaz 200), ez azt jelenti, hogy a kérés sikeresen befejeződött.

1
2
3
4
5
6
7
8
9

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

végrehajtás

itt látható a végrehajtás pillanatképe, amely azt mutatja, hogy a tesztet sikeresen végrehajtották.

selenium webdriver Test Execution

kivételek történtek a ‘megosztás ikonokra’, azaz a WhatsApp, a Facebook, a Twitter stb. Ezeken a linkeken kívül a LambdaTest blogoldal többi linkje visszatér HttpStatusCode.OK (azaz 200).

Http állapotkód

törött kapcsolat tesztelése szelén PHP használatával

végrehajtás

Kód áttekintés

1. Olvassa el az oldal forrását

a file_get_contents függvény A PHP-ben arra szolgál, hogy az oldal HTML forrását egy String változóba (pl. $html) olvassa.

1
2

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

2. A DOMDOCUMENT osztály példányosítása

a DOMDOCUMENT osztály A PHP-ben egy teljes HTML dokumentumot képvisel, és a dokumentumfa gyökereként szolgál.

1
$htmlDom = új DOMDocument;

3. Az oldal HTML elemzése

a DOMDocument::loadHTML() függvény a $html-ben található HTML forrás elemzésére szolgál. Sikeres végrehajtás esetén a függvény egy DOMDocument objektumot ad vissza.

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

4. A linkek kibontása az oldalról

az oldalon található linkek kibontása a DOMDocument osztály getElementsByTagName módszerével történik. Az elemek (vagy linkek) keresése az elemzett HTML forrás ‘a’ címkéje alapján történik.

a Getelementsbytagname függvény a DOMNodeList új példányát adja vissza, amely a helyi címkenév elemeit (vagy linkjeit) tartalmazza (pl. címke)

1
$linkek = $ htmlDom – > getElementsByTagName (‘a’);

5.

a DOMNodeList, amelyet a (4) lépésben hoztak létre, áthalad a linkek érvényességének ellenőrzésére.

1
2
3

foreach ($linkek mint $link)
{
$linkText = $link – > nodeValue;

a megfelelő hivatkozás részleteit a ‘href’ attribútum segítségével kapjuk meg. A getattribute módszert használják az azonos.

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

kihagyja a linkek ellenőrzését, ha:

a. A link üres

1
2
3
4

ha (strlen (trim ($linkHref)) == 0)
{
tovább;
}

b. A link egy hashtag vagy egy horgony link

1
2
3
4

if ($linkHref == ‘#’)
{
tovább;
}

c. a link tartalmazza mailto vagy addtoany (azaz közösségi megosztási lehetőségek).

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) == hamis)
{
vissza hamis;
}
else
{
vissza igaz;
}
}
nyilvános funkció 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 vagy e-mail találkozott”);
folytatás;
}
…………………………………………………………..
…………………………………………………………..
…………………………………………………………..
}

a preg_match függvény reguláris kifejezést (regex) használ a mailto és addtoany kis-és nagybetűérzékeny keresésére. A mailto & addtoany reguláris kifejezései a következők: ‘/\bmailto\b/’ & ‘/\baddtoany\b/’.

6. A HTTP-Kód érvényesítése a cURL

használatával a curl segítségével információkat kapunk a megfelelő link állapotáról. Az első lépés egy cURL munkamenet inicializálása a’ link ‘ segítségével, amelyen érvényesíteni kell. A módszer egy cURL példányt ad vissza, amelyet a megvalósítás második részében használnak.

1
$curl = curl_init ($linkHref);

a curl_setopt módszer az adott cURL session fogantyú (azaz $curl) beállításainak beállítására szolgál.

1
curl_setopt ($curl, CURLOPT_NOBODY, true);

a curl_exec metódust az adott cURL munkamenet végrehajtására hívják meg. Sikeres végrehajtás esetén True értéket ad vissza.

1
$eredmény = curl_exec ($curl);

ez a logika legfontosabb része, amely ellenőrzi az oldal törött linkjeit. A curl_getinfo függvény, amely a cURL munkamenet fogantyúját (azaz $curl) és a CURLINFO_RESPONSE_CODE (azaz. CURLINFO_HTTP_CODE) az utolsó átvitelre vonatkozó információk beszerzésére szolgálnak. Válaszként HTTP állapotkódot ad vissza.

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

a kérés sikeres teljesítése után a rendszer a 200-as HTTP-állapotkódot adja vissza, és az érvényes linkek számát tartalmazó változó (azaz $valid_links) növekszik. Azoknál a Linkeknél, amelyek 400 (vagy annál nagyobb) HTTP állapotkódot eredményeznek, ellenőrizni kell, hogy a ‘teszt alatt lévő link’ a LambdaTest LinkedIn oldala volt-e. Mint korábban említettük, a LinkedIn oldal állapotkódja 999 lesz; ezért a $valid_links növekszik.

az összes többi hivatkozás esetében, amely 400 (vagy annál nagyobb) HTTP-állapotkódot adott vissza, a törött linkek számát (azaz $broken_links) tartó változó növekszik.

1
2
3
4
5
6
7
8
9
10

if (($linkedin_page_status) &&($statusCode == 999))
{
print (“\nLink”. $ linkHref . “a LinkedIn oldal és az állapot”.$ statusCode);
$validlinks++;
}
else
{
print (“\nLink”. $ linkHref . “megszakadt a kapcsolat és az állapot”.$statusCode);
$ törött linkek++;
}

végrehajtás

a PHPUnit keretrendszert használjuk az oldal hibás linkjeinek tesztelésére. A PHPUnit keretrendszer letöltéséhez adja hozzá a fájl zeneszerzőt.json a gyökérmappában, majd futtassa a composer require parancsot a terminálon.

futtassa a következő parancsot a terminálon a Selenium PHP hibás linkjeinek ellenőrzéséhez.

1
szállító \ bin \ phpunit tesztek \ BrokenLinksTest.php

itt van a végrehajtási pillanatkép, amely összesen 116 érvényes linket és 0 törött linket mutat a LambdaTest blogon. Mivel a közösségi megosztás (azaz az addtoany) és az e-mail cím linkjeit figyelmen kívül hagyják, a teljes szám 116 (169 a Selenium Python tesztben).

végrehajtás pillanatkép

következtetés

Fix

forrás

a megszakadt linkek, más néven halott linkek vagy rothadó linkek, akadályozhatják a felhasználói élményt, ha jelen vannak a weboldalon. A megszakadt linkek hatással lehetnek a keresőmotorok rangsorolására is. Ezért a megszakadt linkek tesztelését rendszeresen el kell végezni a weboldal fejlesztésével és tesztelésével kapcsolatos tevékenységek esetében.

ahelyett, hogy harmadik féltől származó eszközökre vagy kézi módszerekre támaszkodna a webhely törött linkjeinek ellenőrzésére, a törött linkek tesztelése elvégezhető a Selenium WebDriver segítségével Java, Python, C# vagy PHP használatával. A HTTP állapotkódot, amelyet bármely weboldal elérésekor adtak vissza, a Selenium framework segítségével ellenőrizni kell a megszakadt linkeket.

Gyakran Ismételt Kérdések

hogyan találok törött linkeket a selenium Pythonban?

a törött linkek ellenőrzéséhez a címke alapján össze kell gyűjtenie az összes linket a weboldalon. Ezután küldjön egy HTTP kérést a hivatkozásokra, és olvassa el a HTTP válaszkódot. A HTTP válaszkód alapján megtudhatja, hogy a link érvényes vagy megszakadt-e.

Hogyan ellenőrizhetem a törött linkeket?

ha a Google Search Console segítségével folyamatosan figyelemmel szeretné kísérni webhelye hibás hivatkozásait, kövesse az alábbi lépéseket:

  1. jelentkezzen be Google Search Console-fiókjába.
  2. kattintson a figyelni kívánt webhelyre.
  3. kattintson a feltérképezés, majd a Lekérés Google-ként elemre.
  4. miután a Google feltérképezte a webhelyet, az eredmények eléréséhez kattintson a feltérképezés, majd a feltérképezési hibák elemre.
  5. az URL-hibák alatt láthatja a Google által a feltérképezési folyamat során felfedezett törött linkeket.

Hogyan találhatok törött képeket az interneten a selenium használatával?

látogasson el az oldalra. Ismételje meg a HTTP-archívum minden képét, és nézze meg, hogy van-e 404-es állapotkódja. Tárolja az egyes törött képeket egy gyűjteményben. Ellenőrizze, hogy a törött képek gyűjteménye üres-e.

Hogyan kaphatom meg az összes linket a szelénben?

a weboldalon található összes linket a < a> címke alapján kaphatja meg. Minden < a> címke egy linket képvisel. A szelén lokátorok segítségével könnyen megtalálhatja az összes ilyen címkét.

miért rosszak a törött linkek?

árthatnak a felhasználói élménynek – amikor a felhasználók linkekre kattintanak, és elérik a 404-es zsákutcát, csalódottak lesznek, és soha nem térhetnek vissza. Leértékelik a SEO erőfeszítéseit – a megszakadt linkek korlátozzák a link tőke áramlását az egész webhelyen, negatívan befolyásolva a rangsorolást.

Himanshu Sheth

Himanshu Sheth tapasztalt technológus és blogger, több mint 15 éves változatos munkatapasztalattal. Jelenleg a LambdaTest ‘lead Developer Evangelist’ és ‘Senior Manager’ – ként dolgozik. Nagyon aktív a Bengalurui startup közösséggel (és délen), és szereti a szenvedélyes alapítókkal való kapcsolatot személyes blogján (amelyet az elmúlt 15 év óta tart fenn).

írta:

Leave a Reply

Az e-mail-címet nem tesszük közzé.