1. Texniki əsaslar
Formaları doldurmaq və göndərmək
Formalarla işləmək tez-tez istifadəçilərin qeydiyyatı, anketlərin doldurulması, məlumatların toplanması və daha çox şeylərin avtomatlaşdırılması üçün tələb olunur. Əllə yüzlərlə forma doldurmaq — bu, sanki qarpızı samanla yeməyə çalışmaq kimidir. Amma bizim Selenium vasitəsilə super güclərimizlə bunu saniyələrdə edəcəyik.
Gəlin əvvəlcə, necə mətn sahələrini doldurmaq və formaları göndərmək məsələsini analiz edək. Sayta daxil olma formasının nümunəsində əsas addımları öyrənəcəyik:
from selenium import webdriver
# Driver-i tənzimləmək (məsələn, ChromeDriver)
driver = webdriver.Chrome()
try:
# Veb-səhifəni açmaq
driver.get("https://example.com/login")
# İstifadəçi adı üçün giriş sahəsini tapıb mətn daxil etmək
username_input = driver.find_element_by_name("username")
username_input.send_keys("mənim_loginim")
# Şifrə üçün giriş sahəsini tapıb mətn daxil etmək
password_input = driver.find_element_by_name("password")
password_input.send_keys("mənim_şifrə")
# Formanı göndərmək üçün düyməni tapıb klikləmək
submit_button = driver.find_element_by_name("submit")
submit_button.click()
finally:
# Driver-i bağlamaq
driver.quit()
Validasiya və səhvlərin emalı
Proqramçı gününü ən çox korlayan şeylərdən biri də lazımsız anlarda meydana çıxan səhvlərdir. Buna görə öncədən onları emal edirik. Səhvləri tutmaq üçün try/except
istifadə edirik və nəyin tərs getdiyini anlamaq üçün logları saxlayırıq.
try:
username_input = driver.find_element_by_name("username")
username_input.send_keys("mənim_loginim")
except Exception as e:
print(f"İstifadəçi adını doldurarkən səhv: {e}")
logging.error("İstifadəçi adını doldurarkən səhv", exc_info=True)
2. Checkbox-lar (Checkboxes)
Artıq düymələrə necə klik etməyi öyrəndiyimizə görə, gəlin siyahıdan bir neçə seçim edək. Checkbox-u seçmək və ya seçimi ləğv etmək üçün click()
metodundan istifadə edə bilərik. Əgər checkbox-un seçilib-seçilmədiyini yoxlamaq lazımdırsa, is_selected()
atributundan istifadə olunur.
checkbox = driver.find_element_by_id("checkbox_id")
if not checkbox.is_selected():
checkbox.click()
3. Seçicilər (Radio Buttons)
Seçicilər yalnız bir neçə seçim arasından birini seçməyə imkan verir. Onlarla bayraqlar kimi işləyə bilərsiniz: metodu click()
istifadə edərək seçim edin və vəziyyəti is_selected()
vasitəsilə yoxlayın.
radio_button = driver.find_element_by_id("radio_button_id")
if not radio_button.is_selected():
radio_button.click()
4. Açılan siyahılar (Dropdowns)
Açılan siyahılar seçim üçün bir neçə variant təqdim edir. Selenium-da Select
sinifi var, hansı ki, bu siyahılarla işləmək üçün metodlar təqdim edir.
from selenium.webdriver.support.ui import Select
dropdown = Select(driver.find_element_by_id("dropdown_id"))
dropdown.select_by_visible_text("Variant 1")
Həmçinin, variantları select_by_index()
və ya select_by_value()
vasitəsilə seçə bilərsiniz.
5. Mətn sahələri (Text Areas)
Mətn sahələri mətn xanalarına bənzəyir, lakin adətən çoxlu miqdarda mətn daxil etmək üçün istifadə olunur. Onlarla işləmək mətn xanaları ilə işləmək kimi eynidir.
text_area = driver.find_element_by_id("textarea_id")
text_area.send_keys("Bu, mətn sahəsi üçün nümunə mətnidir.")
6. Təqvim (Date Picker)
Təqvim sahələri istifadəçilərə tarixləri seçməyə imkan verir. Əgər bu, sadə bir mətn sahəsidirsə, tarix formatını dəstəkləyərək, send_keys()
funksiyası ilə lazım olan formatda dəyər daxil etmək olar.
date_field = driver.find_element_by_id("date_field_id")
date_field.send_keys("2023-12-25") # Tarix formatı saytdan asılı olaraq dəyişə bilər
Ancaq bəzi təqvim sahələri əlavə hərəkətlər tələb edir, məsələn, pop-up təqvimini açmaq və tarix seçmək.
7. Fayl sahələri (File Upload)
Bu sahələr serverə fayllar yükləməyə imkan verir. Onlarla send_keys()
metodu vasitəsilə də qarşılıqlı fəaliyyət göstərmək olar, yəni lokal kompüterdə faylın yolunu göstərməklə.
file_input = driver.find_element_by_id("file_upload_id")
file_input.send_keys("/path/to/file.txt")
8. Gizli sahələr (Hidden Fields)
Gizli sahələr səhifədə görünmür, lakin formanın göndərilməsi üçün lazım olan məlumatları saxlamaq üçün istifadə oluna bilər. Onlarla yalnız onların dəyərinə çıxışınız olduqda (məsələn, dəyəri yoxlamaq və ya dəyişmək üçün) əlaqə saxlamaq mümkündür.
hidden_field = driver.find_element_by_id("hidden_field_id")
value = hidden_field.get_attribute("value")
print("Gizli sahənin dəyəri:", value)
9. Hərəkətlərin uğurlu icrasının yoxlanılması
Hərəkətlərin necə icra olunduğuna dair məlumat əldə etmək — uğurun göstəricisidir. Formanı göndərdikdən sonra mütləq əmin olmaq istəyirsiniz ki, sorğu uğurla qəbul edilib, düzdür? Bunu belə etmək olar:
># Saytda uğurlu avtorizasiya yoxlanışı
if "Xoş gəldiniz" in driver.page_source:
print("Avtorizasiya uğurla başa çatdı!")
else:
print("Avtorizasiya zamanı səhv baş verdi.")
10. Problemlər və həllər
Problemlər
- İşin qeyri-sabitliyi: Veb-səhifələr tez-tez dəyişir. Səhifə strukturunun dəyişməsi skriptlərin işləməsində nasazlıqlara səbəb ola bilər, buna görə də kodun aktuallığını mütəmadi yoxlamaq lazımdır.
- Şəbəkə sürətindən asılılıq: Səhifələrin və elementlərin yüklənmə vaxtı fərqli ola bilər. Gecikmələri idarə etmək üçün explicit waits istifadə edin.
Həllər
- Log yazma: Problemləri daha yaxşı başa düşmək üçün bütün fəaliyyətlərin logunu aparın.
logging
kitabxanası logların aparılmasını xeyli asanlaşdıracaq. - Kodun modularlığı: Dəyişiklikləri daha rahat etmək və test etmək üçün mürəkkəb fəaliyyətləri funksiyalar və modullara bölün.
GO TO FULL VERSION