XPATH enjeksiyonu
Əsas XPath İfadələri
XPath ifadələri HTML elementini tapmaq üçün olduqca faydalı olsa da, mürəkkəb və iç içə HTML/XML strukturları arasında dəqiq naviqasiya etmək çətin ola bilər. XPath ifadələrini yazmaqda çətinlik çəkirsinizsə, onları asanlıqla hazırlamaq üçün bu cheat sheet-den istifadə edin.
Əgər siz veb-səhifədən HTML elementini proqramlı şəkildə tapmağa çalışmış bir tərtibatçısınızsa, istər avtomatlaşdırılmış testlər, istərsə də veb kazıma və ya digər avtomatlaşdırılmış tapşırıqlar üçün olsun, XPath ilə qarşılaşmısınız. O , HTML/XML sənədində naviqasiya etmək üçün veb-brauzerlər, kitabxanalar, veb skreperlər və Selenium kimi avtomatlaşdırılmış sınaq çərçivələri daxil olmaqla geniş çeşidli alətlər və texnologiyalar tərəfindən təklif olunur .
Geniş tətbiqlərdə tətbiq oluna bildiyi üçün onu mənimsəmək tərtibatçılar üçün dəyərli bacarıq ola bilər. Bununla belə, sənəd strukturu mürəkkəb olduqda XPath ifadəsini qurmaq çətin ola bilər. Burada, vaxtınıza və məyusluğa qənaət etmək üçün sizə parmaklarınızın ucunda əsas XPath ifadələrinin siyahısını təqdim edən XPath fırıldaqçı vərəqini tərtib etdik. Gəlin içəri girək!
XPath nədir
XML Path Language kimi tanınan XPath, HTML və ya XML sənədində elementləri naviqasiya etmək və seçmək üçün istifadə edilən ifadə dilidir . O, sənədin iyerarxiyasındakı etiket adına, atributlarına, mövqeyinə, mətn məzmununa və s. əsasında veb-səhifədə elementləri tapmaq üçün bir yol təqdim edir.
XPath ifadəsi sənədin iyerarxiyasında HTML elementinin mövqeyinə uyğun olaraq qurulur. Bu, sizi başlanğıc nöqtədən hədəfə aparan xəritə kimidir.Buna görə də, onun ID, sinif, ad və digər atributları mövcud olmadıqda və DOM-dan istifadə edə bilməyəndə veb-səhifədə elementi tapmaq üçün XPath-dan istifadə edə bilərsiniz .
XPath Əsasları
XPath element/qovşaq tapmaq üçün HTML/XML sənədinin iyerarxik strukturunda naviqasiya etmək üçün URL-lərə bənzər yol qeydindən istifadə edir. XPath ifadəsindəki hər bir addım slash ( “/” və ya “//”) ilə ayrılır ki, bu da mövcud bir çox ox növlərindən biridir.
ox
HTML/XML sənədindəki elementlər arasındakı əlaqələri müəyyən etmək üçün ox istifadə olunur. Bu, sənəd strukturunda müəyyən bir istiqamət və ya nümunə ilə hərəkət etməyə və onların mövqeyinə və ya digər elementlərlə əlaqəsinə əsasən elementləri seçməyə imkan verir.
Kəsiklər ( “/” və ya “//” ) cari elementin uşaq və ya nəsli elementlərini seçmək üçün sənədi aşağı keçir.
ox | Təsvir | Misal |
/ | Cari elementin bütün uşaq elementlərini seçir. | /html/body/h1 - <body> elementinin birbaşa uşağı olan <h1> elementini seçir. |
// | Dərinliyindən asılı olmayaraq cari elementin bütün nəsil elementlərini seçir. | /html/body//h3 - Sənədin istənilən yerində <body> elementinin törəmələri olan bütün <h3> elementlərini seçir. |
Onlar XPath ifadəsinin əvvəlində istifadə edildikdə, ifadənin a/an olub olmadığını göstərir:
Sənədin kök elementindən başlayan və hədəf element tapılana qədər elementlərin iyerarxiyasında aşağıya doğru hərəkət edən mütləq XPath və ya...
Məlum elementdən başlayan və elementlə əlaqəsi əsasında hədəf elementə yol verən nisbi XPath .
ox | Təsvir | Misal |
/ | Mütləq XPath | /html/body/div - Kök <html> elementi daxilində <body> elementi daxilində yerləşdirilmiş bütün <div> elementlərini seçir. |
// | Nisbi XPath | //h1[@class='title'] - Sənəddəki mövqelərindən asılı olmayaraq sinif atributunun 'başlıq' olaraq təyin olunduğu bütün <h1> elementlərini seçir. |
Uşaq və ya nəsil elementləri tapmaq üçün sənədi aşağıya çevirmək üçün kəsik işarələrindən istifadə etməklə yanaşı, bu oxlardan istifadə edərək başqa istiqamətlərə də keçə bilərsiniz:
ox | Təsvir | Misal |
parent::/.. | Cari elementin əsas elementini seçir. | //a/parent:: və ya //a/.. - <a> elementlərinin əsas elementini seçir |
ancestor:: | Cari elementin bütün əcdad elementlərini seçir. | //a/ancestor::li - <a> elementlərinin əcdadları olan bütün <li> elementlərini seçir. |
following:: | Sənəd qaydasında cari elementdən sonra görünən bütün elementləri seçir. | //div/li[2]/following::a - İkinci <li> elementindən sonra görünən bütün <a> elementləri seçir. |
preceding:: | Sənəd qaydasında cari elementdən əvvəl görünən bütün elementləri seçir. | //div/li[2]/preceding::a - İkinci <li> elementindən əvvəl görünən bütün <a> elementlərini seçir. |
following-sibling:: | Cari elementdən sonra görünən bütün qardaş elementləri seçir. | //li/following-sibling::li - <li> elementlərinin qardaşları olan və onlardan sonra görünən bütün <li> elementləri seçir. |
preceding-sibling:: | Cari elementdən əvvəl görünən bütün qardaş elementləri seçir | //li/preceding-sibling::li - <li> elementlərinin qardaşları olan və onlardan əvvəl görünən bütün <li> elementləri seçir. |
self:: | Cari elementi seçir.(Bu, həmişə lazım deyil, lakin cari node ilə açıq şəkildə istinad etmək və əməliyyatları yerinə yetirmək və ya birbaşa predikatlar tətbiq etmək istədiyiniz hallarda faydalı ola bilər.) | //a/self::a - <a> elementlərinin özlərini seçir. |
@ | Cari elementin atributlarını seçir. | //a/@href - <a> elementlərinin href atributunu seçir. |
Düyün
Baltalardan sonra seçiləcək qovşağın növünü və ya adını təyin etməlisiniz. Bu element adı, atribut adı və ya mətn və ya şərh kimi digər qovşaq növləri ola bilər.
Nümunələr
Element adı - /html/body/ div
Predikatlı element adı - //a [@class=“link”] , //a [2]
Atribut adı - //a/ @href
Funksiya - // mətn()
Joker simvol - // * [@class=“xəbərdarlıq”]
XPath Nümunələri
XPath ifadələrini yazmaq xüsusilə yeni başlayanlar üçün çətin ola bilər. XPath-ın öz sintaksisi və effektiv ifadələr yaratmaq üçün başa düşməli olduğunuz qaydalar dəsti olduğundan, istinad edə biləcəyiniz qısa istinad kimi biz əsas XPath ifadələrinin siyahısını tərtib etdik.
Əsas Node Seçimi
İfadə | Təsvir |
Tag Adı ilə |
|
//E | Bütün <E> elementlərini seçin. |
Sinif və ya ID ilə |
|
//*[@class = 'sinif_adı'] |
|
//*[içerir(@sinif, 'sinif_adı')] | "class_name" sinfi olan bütün elementləri seçin. |
//*[@id = 'id_name'] | "id_name" ID ilə element seçin. |
Atribut üzrə |
|
//*[@attribute_name] | "atribut_adı" atributuna malik bütün elementləri seçin. |
//*[@attribute_name = 'attribute_value'] | Müəyyən bir atribut dəyəri olan bütün elementləri seçin. |
//*[starts-with(@attribute_name, 'value')] | Müəyyən bir dəyərlə başlayan atribut dəyəri olan bütün elementləri seçin. |
//*[ilə bitir(@atribut_adı, 'dəyər')] | Müəyyən bir dəyərlə bitən bir atribut dəyəri olan bütün elementləri seçin. |
//*[tərkibində (@attribute_name, 'dəyər')] | Müəyyən bir dəyəri ehtiva edən bir atribut dəyəri olan bütün elementləri seçin. |
//*[@attribute_name != 'dəyər'] | Müəyyən bir dəyərə bərabər olmayan bir atribut dəyəri olan bütün elementləri seçin. |
Vəzifə üzrə |
|
//E[1] | Elementin ilk baş verməsini seçin. |
//E[son ()] | Elementin son halını seçin. |
//E[n] | Elementin n-ci halını seçin. |
//E[mövqe() >= n] | n-ci mövqedən başlayaraq bütün elementləri seçin. |
//E[mövqe() <= n] | n-ci mövqeyə qədər bütün elementləri seçin. |
//E[mövqe() >= n və mövqe() <= m] | n-ci və m-ci mövqelər arasında bütün elementləri seçin. |
//E[mövqe() mod 2 = 1] | Elementin bütün tək nömrəli hadisələrini seçin. |
//E[mövqe() mod 2 = 0] | Elementin bütün cüt nömrəli hadisələrini seçin. |
Mətn məzmununa görə |
|
//*[mətn()] | Boş olmayan mətn məzmunlu bütün elementləri seçin. |
//*[text() = 'text_content'] | Dəqiq mətn məzmunu olan bütün elementləri seçin. |
//*[tərkibində(mətn(), 'alt sətir')] | Xüsusi alt sətirdən ibarət mətn məzmunu olan bütün elementləri seçin. |
//*[başlayır-ilə(mətn(), 'alt sətir')] | Müəyyən bir alt sətirlə başlayan mətn məzmunlu bütün elementləri seçin. |
//*[ilə bitir(mətn(), 'alt sətir')] |
|
//*[alt sətir(mətn(), sətir uzunluğu(mətn()) - sətir uzunluğu('alt sətir') + 1) = 'alt sətir'] | Xüsusi alt sətirlə bitən mətn məzmunlu bütün elementləri seçin. |
//*[mətn() != 'arzuolunmaz_mətn'] | Xüsusi dəyərə bərabər olmayan mətn məzmunlu bütün elementləri seçin. |
//*[uyğunlaşır(mətn(), 'regex_pattern')] | Normal ifadə nümunəsinə uyğun gələn mətn məzmunlu bütün elementləri seçin. |
Qeyd: Dəyərləri müqayisə etmək üçün istifadə olunan predikatdakı ifadələr üçün (məsələn, [mövqe() >= n]), siz , , , =
, !=
və <
daxil olmaqla digər müqayisə operatorlarından da istifadə edə bilərsiniz .><=>=
İfadələri birləşdirmək üçün operatorlardan istifadə
XPath məntiqi əməliyyatları yerinə yetirmək üçün çoxlu ifadələri birləşdirmək üçün istifadə edilə bilən bir neçə operator təqdim edir. Bu operatorlardan istifadə edərək, daha mürəkkəb şərtlər əsasında elementləri seçmək üçün XPath ifadələri yaza bilərsiniz.
İfadə | Təsvir |
Birlik (l) |
|
//E1 l //E2 | Bütün <E1> və <E2> elementlərini seçin. |
//(E1 l E2)/* | <E1> və ya <E2> elementlərinin birbaşa uşaqları olan bütün elementləri seçin. |
//*[@class='class1'] l //*[@class='class2'] | "class1" və ya "class2" sinfi olan bütün elementləri seçin. |
//*[@attribute1] l //*[@attribute2] | "atribut1" və ya "atribut2" atributlu bütün elementləri seçin. |
//*[text()='text1'] l //*[text()='text2'] | Mətn məzmunu "text1" və ya "text2" olan bütün elementləri seçin. |
//*[tərkibində(mətn(), 'mətn1')] l //*[tərkibində(mətn(), 'mətn2')] | "Mətn1" və ya "mətn2" mətnini ehtiva edən bütün elementləri seçin. |
VƏ |
|
//*[@class='class1' və @class='class2'] | Həm "class1" həm də "class2" sinfinə malik elementləri seçin. |
//*[@attribute1 və @attribute2] | Həm "atribut1" həm də "atribut2" atributuna malik elementləri seçin. |
//*[@attribute1='value1' və @attribute2='value2'] | Xüsusi dəyərləri olan "atribut1" və "atribut2" atributuna malik elementləri seçin. |
//*[tərkibində(mətn(), 'mətn1') və ehtiva edir(mətn(), 'mətn2')] | Həm "mətn1" həm də "mətn2" mətnini ehtiva edən elementləri seçin. |
YA |
|
//*[@class='class1' və ya @class='class2'] | Sinif "class1" və ya sinif "class2" olan elementləri seçin. |
//*[@attribute1 və ya @attribute2] | "atribut1" və ya "atribut2" atributuna malik elementləri seçin. |
//*[text()='text1' və ya text()='text2'] | Mətn məzmunu "text1" və ya mətn məzmunu "text2" olan elementləri seçin. |
//*[tərkibində(mətn(), 'mətn1') və ya ehtiva edir(mətn(), 'mətn2')] | "mətn1" və ya "mətn2" mətnini ehtiva edən elementləri seçin. |
YOX |
|
//*[not(@attribute_name)] | "atribut_adı" atributuna malik olmayan elementləri seçin. |
/*[not(text()='text_content')] | "text_content" mətni olmayan elementləri seçir. |
//*[not(@sinif)] | Sinif atributuna malik olmayan elementləri seçir. |
//*[deyil(self::E)] | <E> elementi olmayan elementləri seçir. |
Qeyd: Nəticələr oxşar olsa da, “l” istifadə edən ifadə şərtləri yerinə yetirən qovşaqları ayrıca qovşaq dəstləri kimi, “və ya” istifadə edən ifadə isə şərtlərdən birini yerinə yetirən qovşaqları seçir.
XPath ifadəsində funksiyalardan istifadə
XPath həmçinin elementlər/qovşaqlar və onların dəyərlərində müxtəlif əməliyyatları yerinə yetirmək üçün istifadə oluna bilən bəzi daxili funksiyaları təmin edir. Bu funksiyaları XPath ifadəsində istifadə edərək, onları daha səmərəli seçmək üçün HTML/XML strukturlarında naviqasiya edə və manipulyasiya edə bilərsiniz.
İfadə | Təsvir |
string uzunluğu() |
|
//*[sətir uzunluğu(mətn()) > n] | Mətn məzmununun uzunluğunun n-dən çox olduğu elementləri seçin. |
//*[sətir uzunluğu(mətn()) mod 2 = 0] | Mətn məzmun uzunluğunun bərabər olduğu elementləri seçin. |
//*[sətir uzunluğu(mətn()) mod 2 = 1] | Mətn məzmun uzunluğunun tək olduğu elementləri seçin. |
//*[@atribut_adı[sətir uzunluğu(.) < n]] | Atribut dəyəri uzunluğunun n-dən az olduğu elementləri seçin. |
normallaşdırmaq-boşluq() |
|
//*[normallaşdırmaq-boşluq(mətn()) = 'mətn_məzmunu'] | "text_content" normallaşdırılmış mətn məzmununa malik olan bütün elementləri seçin. |
yerli ad() |
|
//*[yerli ad() = 'element_adı'] | Ad sahəsindən asılı olmayaraq, "element_name" yerli adı olan bütün elementləri seçin. |
namespace-uri() |
|
//*[namespace-uri() = 'namespace_URI'] | Yerli addan asılı olmayaraq müəyyən edilmiş ad məkanı URI 'namespace_URI' olan elementləri seçin. |
saymaq() |
|
//*[count(*)=n] | Tam olaraq n uşaq elementi olan bütün elementləri seçin. |
//*[count(*)=0] | Uşaq elementləri olmayan bütün elementləri seçin |
//*[saymaq(E) = n] | Tam olaraq n <E> elementi olan bütün elementləri seçin. |
//valideyn[saymaq(uşaq) = n] | Tam olaraq n <child> elementi olan bütün <ana> elementləri seçin. |
//*[saymaq(@*) = n] | Tam olaraq n atributuna malik olan bütün elementləri seçin. |
Digər funksiyalar
Bütün funksiyalar birbaşa qovşaqları/elementləri seçmək üçün XPath ifadəsində istifadə edilə bilməz. Bununla belə, onlar məlumatların manipulyasiyası və alınması kimi xüsusi əməliyyatları yerinə yetirmək üçün istifadə edilə bilər:
Funksiya | Təsvir | Misal |
Simli funksiyalar |
|
|
concat() | Çoxlu sətirləri birləşdirir. | concat('Salam', ' ', 'Dünya') - 'Salam Dünya' sətrini qaytarır. |
substring() | Müəyyən edilmiş başlanğıc mövqeyinə və uzunluğa əsaslanan sətirin bir hissəsini alır. | substring('Salam Dünya', 7) - 'Dünya' sətrini qaytarır. |
substring-before() | Müəyyən edilmiş ayırıcıdan əvvəl alt sətri götürür. | substring-before("Salam, Dünya", ",") - "Salam" sətrini qaytarır. |
substring-after() | Müəyyən edilmiş ayırıcıdan sonra alt sətri götürür. | substring-after("Salam, Dünya", ",") - " Dünya" sətirini qaytarır. |
translate() | Sətirdəki simvolları digər simvollarla əvəz edir. | translate('Hello World', 'ol', 'OL' ) - 'HELLO WORLd' sətrini qaytarır. |
Riyaziyyat funksiyaları |
|
|
sum() | Bir qovşaq dəstinin və ya nömrələr ardıcıllığının cəmini hesablayır. | sum(//span) - Bütün <span> elementlərinin cəmini qaytarır. |
min() | Düyün dəsti və ya nömrələr ardıcıllığından minimum dəyəri tapır. | min(//span) - Bütün <span> elementlərindən ən kiçik span dəyərini qaytarır. |
max() | Düyün dəsti və ya nömrələr ardıcıllığından maksimum dəyəri tapır. | max(//span) - Bütün <span> elementlərindən ən böyük span dəyərini qaytarır. |
round() | Rəqəmsal dəyəri ən yaxın tam ədədə yuvarlaqlaşdırır. | round(3.8) - 4-ü qaytarır. |
floor() | Rəqəmsal dəyəri ən yaxın tam ədədə yuvarlaqlaşdırır. | mərtəbə(3.8) - 3-ü qaytarır. |
ceiling() | Rəqəmsal dəyəri ən yaxın tam ədədə yuvarlaqlaşdırır. | tavan(3.8) - 4-ü qaytarır. |
Dönüşüm növləri |
|
|
string() | Rəqəmsal dəyəri sətir təsvirinə çevirir. | string(123) - "123" sətrini qaytarır. |
number() | Ədədin sətir təsvirini ədədi dəyərə çevirir. | number('3.8') - 3.8 ədədi dəyərini qaytarır. |
boolean() | İfadəni qiymətləndirir və doğru və ya yanlışı qaytarır. İfadə rəqəmlərə, qovşaq dəstlərinə və ya booleanlara istinad edə bilər. | boolean(//a) - Sənəddə ən azı bir <a> elementi varsa doğru, əks halda yanlış qaytarır. |
Nəticə
Tərtibatçı olaraq, XPath öyrənmək sizi müxtəlif layihələr üçün HTML/XML sənədlərinin səmərəli naviqasiyasına imkan verən çox yönlü bacarıqlar dəsti ilə təchiz edə bilər. Bu XPath cheat sheet-i XPath ifadələrini asanlıqla qurmağınıza kömək etmək üçün lazımlı mənbə rolunu oynasa da, onları bir neçə kliklə yarada bilən alətlər də mövcuddur.
Last updated