CodeGym /Kurslar /Python SELF AZ /Veb-səhifədə elementləri axtarmaq və onlarla qarşılıqlı ə...

Veb-səhifədə elementləri axtarmaq və onlarla qarşılıqlı əlaqə yaratmaq üçün funksiyalar yaratmaq

Python SELF AZ
Səviyyə , Dərs
Mövcuddur

1. Səhifədə elementlərin axtarışının əsasları

Elementlərin axtarış metodlarının istifadəsi

Selenium-u real layihələrdə istifadə etməyə başlayanda əsas tapşırıqlardan biri səhifədə elementlərin axtarışı olacaq. Bu, oteldə lift düyməsini axtarmağa bənzəyir: hansı yerdə olduğunu bilmək lazımdır ki, basıb istədiyin mərtəbəyə qalxa biləsən.

Selenium, elementlərin axtarışı üçün bir neçə metod təqdim edir. Sənin üstünlüklərinə görə aşağıdakılardan istifadə edə bilərsən: find_element_by_id, find_element_by_name, find_element_by_xpath, find_element_by_css_selector, və s. Gəlin artıq bildiklərimizi xatırlayıb sadə bir nümunə yazaq:

Python

from selenium import webdriver

# Brauzer obyektini yaradırıq (burda Chrome istifadə olunur)
driver = webdriver.Chrome()

# Səhifəni açırıq
driver.get('http://example.com')

# ID ilə elementin axtarışı
element_by_id = driver.find_element_by_id('main')

# Ad ilə elementin axtarışı
element_by_name = driver.find_element_by_name('username')

# XPath ilə elementin axtarışı
element_by_xpath = driver.find_element_by_xpath('//div[@class="content"]')

# CSS-selektor ilə elementin axtarışı
element_by_css = driver.find_element_by_css_selector('div.content')

find_element və find_elements arasında fərqlər

Səhifədə bir neçə elementi tapmaq istəyirsənsə (məsələn, bütün btn sinifinə aid olan düymələr), find_elements metoduna ehtiyacın olacaq. find_elementfind_elements arasındakı fərq ondadır ki, birincisi tək bir element qaytarır, ikincisi isə elementlərin siyahısını qaytarır.

Python

# Tək elementin axtarışı
single_element = driver.find_element_by_class_name('btn')

# Bir neçə elementin axtarışı
multiple_elements = driver.find_elements_by_class_name('btn')

# Tapılmış elementlərə baxış
for element in multiple_elements:
    print(element.text)

Gördüyün kimi, find_elements səhifədə bir neçə ola biləcək elementlər kolleksiyası ilə işləmək üçün əladır. Hər bir find_element_xxx metodunun öz find_elements_xxx metodu var ki, bu da elementlərin siyahısını qaytarır.

2. Elementlərlə interaktiv qarşılıqlı əlaqə

Düymələr, linklər və daxil etmə sahələri ilə işləmək

İndi siz elementləri necə tapmağı xatırladınızsa, onlarla qarşılıqlı əlaqə qurmağın vaxtıdır! Bu, LEGO dəsti ilə oynamağa bənzəyir: düzgün elementləri birləşdirərək planınızı həyata keçirmək lazımdır.

Elementlərlə qarşılıqlı əlaqə Selenium tərəfindən təqdim edilən metodlar vasitəsilə həyata keçirilə bilər. Gəlin bunun necə edildiyini bir daha nəzərdən keçirək:

Python

# Düyməyə klik etmək
button = driver.find_element_by_id('submit')
button.click()

# Daxil etmə sahəsinə mətn yazmaq
input_field = driver.find_element_by_name('q')
input_field.send_keys('Python selenium dərsləri')

# Elementin mətnini əldə etmək
header = driver.find_element_by_tag_name('h1')
print(header.text)

Hadisələrin işlənməsi və dinamik elementlərlə hərəkətlər

Söhbət yalnız müəyyən bir hərəkətdən sonra görünən düymələr kimi dinamik elementlərlə işləməkdən gedirsə, gecikmələri və gözləmələri nəzərə almaq vacibdir. Selenium bu cür elementlərin yüklənməsini gözləmək yollarını təqdim edir. Onlardan biri — WebDriverWait sinfinin və expected_conditions ilə birlikdə istifadəsidir.

Python

from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

# Düymənin 10 saniyə ərzində görünməsini gözləmək
button = WebDriverWait(driver, 10).until(
    EC.presence_of_element_located((By.ID, 'submit'))
)

button.click()

Qeyd. Hər dəfə expected_conditions yazmamaq üçün onu import edərkən EC kimi adlandırdıq.

Gözləmələrdən istifadə skriptinizin daha etibarlı olmasına və səhifənin yavaş yüklənməsi və ya vaxt fərqlərinə görə çöküb qalmamasına kömək edir. Təcrübədə belə hallar olduqca tez-tez baş verir - demək olar ki, həmişə :)

3. Nələr səhv gedə bilər?

Hər şey. Hər şey səhv gedə bilər. Siz elementlərlə qarşılıqlı əlaqə yaratmağa hazırlaşırsınız, amma bax, qəfil nəsə səhv gedir. Gəlin bu yolda rastlaşa biləcəyiniz bəzi tipik səhvləri müzakirə edək.

İlk olaraq, NoSuchElementException — bu olduqca tez-tez qarşılaşacağınız bir xəta mesajıdır, xüsusən axtardığınız element səhifədə yoxdursa. Bu, olmayan bir elementi tapmaq istəsəniz yaranır. Belə situasiyaların qarşısını almaq üçün try-except metodundan istifadə edərək istisnaları idarə edə bilərsiniz.

Python

from selenium.common.exceptions import NoSuchElementException

try:
    element = driver.find_element_by_id('non_existent_id')
except NoSuchElementException:
    print("Oops, deyəsən, element tapılmadı!")

Həmçinin dinamik elementlər və yükləmə vaxtı ilə bağlı problemlər də mümkündür. Bu halda, elementlərin yüklənməsini gözləmək üçün WebDriverWait istifadə edin, bunu daha əvvəl müzakirə etdik.

Şərhlər
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION