Ինչպե՞ս եք գտնելու էլեմենտների լոկատորները վեբ էջում։
sobes.tech AI
Պատասխան AI-ից
Լոկալիզացիայի տարրերի համար օգտագործում եմ հետևյալ մոտեցումները, սկսած ամենահուսալիներից.
-
ID-ի միջոցով: Տարրի եզակի նույնականիչ։ Ամենահաստատ տարբերակն է, եթե ID-ն սահմանված է ծրագրավորողների կողմից։
# Տարրի որոնում ID-ի միջոցով driver.find_element(By.ID, "element_id") -
Կլասի (կլասի անուն) միջոցով: Որոնում
classատրիբուտի արժեքով։ Կարող է լինել ոչ այնքան եզակի, քան ID-ն։# Տարրի որոնում կլասի անունով driver.find_element(By.CLASS_NAME, "element_class") -
CSS սելեկտորի միջոցով: Ուժեղ գործիք, որը թույլ է տալիս գտնել տարրեր տարբեր ատրիբուտներով, DOM-ի կառուցվածքով, псևդոկլասներով և այլն։ Գործունակությունը համեմատելի է XPath-ի հետ, բայց սինտաքսը հաճախ պարզ է և արագ է։
# Տարրի որոնում CSS սելեկտորի միջոցով driver.find_element(By.CSS_SELECTOR, "div.container > button[type='submit']") -
XPath-ի միջոցով: Հարցման լեզու XML փաստաթղթում (ներառյալ HTML) հանգույցներ որոնելու համար։ Позволяет находить элементы по их положению в DOM, атрибутам, текстам։ Լավ է առանց եզակի ID/կլասների կամ հորինվածքների համար։ Կարող է լինել ավելի քիչ արդյունավետ, քան CSS սելեկտորները։
# XPath-ի միջոցով որոնում driver.find_element(By.XPATH, "//div[@class='form']//input[@name='password']") -
Տեգի անունով (Tag Name): Բոլոր տեգի տարրերը։ Զրոյական է օգտագործվում կոնկրետ տարր գտնելու համար, ավելի հաճախ՝ ցանկի համար։
# Բոլոր div տարրերը driver.find_elements(By.TAG_NAME, "div") -
Հղման տեքստով (Link Text/Partial Link Text): Մասնավորապես
<a>տարրերի համար։# Հղման որոնում ըստ ճշգրիտ տեքստի driver.find_element(By.LINK_TEXT, "Կլիկեք այստեղ") # Հղման որոնում մասամբ տեքստով driver.find_element(By.PARTIAL_LINK_TEXT, "Կլիկեք") -
Անվամբ (Name): Ատրիբուտի
nameարժեքով։ Շատ հաճախ օգտագործվում է ձևերի դաշտերի համար։# Տարրի որոնում `name`-ով driver.find_element(By.NAME, "username")
Ընտրելիս օգտագործում եմ հետևյալ սկզբունքները:
- Ենթադրվում է եզակիություն: Լոկալիզատորը պետք է եզակիորեն նույնականացնի անհրաժեշտ տարրին։
- Տևականություն: Ընտրում եմ այն լոկալիզատորները, որոնք ամենահավանական է, որ չեն փոխվի էջի դիզայնի կամ կառուցվածքի փոփոխությունների դեպքում (առաջնահերթություն տալիս եմ ID և ատրիբուտներին, ոչ թե դիրքային XPath-ին):
- Կարդացվողություն և պահպանելիություն: Լոկալիզատորը պետք է լինի հասկանալի։
Օգտագործելով CSS սելեկտորներ կամ XPath, փորձում եմ խուսափել խոր կամ ամբողջական ներմուծումից DOM-ի կառուցվածքում, նախընտրում եմ որոնել տարրերը մոտակա եզակի ծնողի կամ իրենց սեփական ատրիբուտների հարաբերությամբ։ Բրաուզերի DevTools-ով իրականացնում եմ DOM-ի ինսպեկցիա և լոկալիզատորների սխալների թեստավորում։