1. Zaloglama
Bu gün əsəblərinizə və dəyərli vaxtınıza böyük fayda verə biləcək bir mövzuya dalacağıq — zaloglama və səhvlərin emalı. Hətta ən təcrübəli proqramçıların belə səhvlərdən sığortası yoxdur və sizin işiniz bu səhvləri proqnozlaşdırılan və idarə edilən etməkdir. Təsəvvür edin ki, siz arxeoloqsunuz və sizin işiniz ekspedisiyanızı gözlənilməz uçqunlardan və hiyləgər tələlərdən qorumaqdır — zaloglama və səhvlərin emalı bu təhlükəli işdə sizin etibarlı xəritəniz və qalxanınızdır!
Proqramlaşdırmada zaloglama haqqında danışırıqsa, proqramın işi ilə bağlı məlumatların yazılmasından söhbət gedir. Kodunuzun içində baş verən, amma bəzən bir baxışla görünməyən proseslərdir bu. Loglar yazaraq siz özünüzə ipucu qoyursunuz, sanki Hansel və Gretel meşədə evə qayıtmaq üçün çörək qırıntıları buraxırdılar.
Zaloglama quraşdırılması və tənzimlənməsi
Əsas alətlərlə başlayaq. Python-da zaloglama üçün daxili logging
modulundan istifadə edəcəyik. Bu, proqramın icrası ilə bağlı məlumat yazmaq üçün sizin İsveçrə bıçağınızdır.
import logging
# Zaloglamanın tənzimlənməsi
logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s')
# İstifadəyə nümunə
logging.info("Script işinin başlanması")
logging.error("Bu bir səhvdir")
Zaloglamanın hansı səviyyələri var?
- DEBUG: ən detallı məlumat, adətən problemlərin diaqnostikasında maraqlı ola bilər.
- INFO: proseslərin gözlənildiyi kimi işlədiyini təsdiqləyir.
- WARNING: gözlənilməz bir şey və potensial problemə işarə edir, lakin proqram hələ də işləyir.
- ERROR: funksiyanın icrasında uğursuzluğa səbəb olan ciddi səhvlər.
Zaloglama səviyyəsini tənzimləməklə informasiyanı filtr edə bilərsiniz. Məsələn, yalnız səhvlər və xəbərdarlıqlar sizi maraqlandırırsa, səviyyəni logging.WARNING
olaraq təyin edin.
Selenium-da zaloglama nümunəsi
Gəlin zaloglamanın Selenium layihəsində necə tətbiq oluna biləcəyinə baxaq:
from selenium import webdriver
# Zaloglamanın tənzimlənməsi
logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s')
try:
logging.info("Chrome sürücüsünün ilkinləşdirilməsi")
driver = webdriver.Chrome()
logging.info("Python.org səhifəsinin açılması")
driver.get("https://www.python.org")
logging.info("İşin uğurla başa çatması")
except Exception as e:
logging.error(f"Xəta baş verdi: {e}")
finally:
driver.quit()
Bu nümunə sizin Selenium scriptinizdə zaloglamanı necə inteqrasiya edə biləcəyinizi göstərir. Biz try
, except
və finally
səhvlərin emalı üçün istifadə edirik — bu barədə daha ətraflı aşağıda.
2. Selenium-da xətaların idarə olunması
Proqramlaşdırmada, eləcə də həyatda, xətalar qaçınılmazdır. Amma biz onların necə idarə olunmasını nəzarətdə saxlaya bilərik. try
, except
, else
və finally
-dən istifadə edərək xətaları eleqant şəkildə tutmaq və idarə etmək olar.
İstisnaları idarə etməyi xatırlayırıq
Gəlin, istisnaları necə idarə etdiyimizi xatırlayaq:
try:
# Xəta çıxara bilən kod
result = 10 / 0
except ZeroDivisionError as e:
# Əgər ZeroDivisionError istisnası yaranarsa icra olunacaq kod
logging.error("Sıfıra bölmək mümkün deyil!")
else:
# Əgər istisna yaranmazsa icra olunacaq kod
logging.info("Əməliyyat uğurla başa çatdı")
finally:
# Hər halda icra olunacaq kod
logging.info("Əməliyyatlar tamamlandı")
try
blokundakı kod icra olunacaq. Əgər ZeroDivisionError
tipli xəta baş verərsə, except
blokundakı kod icra olunacaq və proqram dayandırılmayacaq. else
bloku, əgər istisna yaranmayıbsa, kodun icrasını nəzərdə tutur. Sonda isə, finally
bloku hər zaman, xətanın olub-olmamasından asılı olmayaraq, icra olunur.
Selenium-da xətaların idarə olunması
Selenium müxtəlif situasiyaları idarə etmək üçün daxili istisnalar təklif edir. Gəlin onlardan bir neçəsi ilə tanış olaq və necə istifadə olunacağını öyrənək.
-
NoSuchElementException
— əgər element tapılmasa yaranır. Elementlərin mövcudluğunu yoxlamaq üçün istifadə edin.Pythontry: element = driver.find_element(By.ID, "element_id") except NoSuchElementException: logging.warning("ID 'element_id' olan element tapılmadı.")
-
TimeoutException
— əgər gözlənilən element səhifədə müəyyən zaman ərzində meydana çıxmazsa yaranır. Gözləməni idarə etmək üçün istifadə olunur.Pythonfrom selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC try: element = WebDriverWait(driver, 10).until( EC.presence_of_element_located((By.ID, "element_id")) ) except TimeoutException: logging.error("ID 'element_id' olan elementi gözləmə xətası baş verdi.")
-
ElementClickInterceptedException
— əgər element başqa bir element tərəfindən bloklanıbsa və klik etmək mümkün deyilsə yaranır. Popup-larla örtülə bilən elementlərə klik edərkən faydalıdır.Pythonfrom selenium.common.exceptions import ElementClickInterceptedException try: driver.find_element(By.ID, "button_id").click() except ElementClickInterceptedException: logging.warning("Element başqa element tərəfindən bloklanıb və klik edilə bilməz.")
Təkrar cəhdlər və bərpa məntiqi
Scriptinizin dayanıqlılığını artırmaq üçün xətalar baş verən zaman təkrar cəhd mexanizmi tətbiq edə bilərsiniz. Məsələn, əgər sayt müvəqqəti olaraq əlçatmazdırsa və ya element tapılmayıbsa, script səhvlə tamamlanmadan öncə bir neçə dəfə həmin əməliyyatı yerinə yetirməyə cəhd edə bilər.
import time
def retry_find_element(driver, by, value, retries=3):
attempt = 0
while attempt < retries:
try:
element = driver.find_element(by, value)
logging.info(f"Element tapıldı: {value}")
return element
except NoSuchElementException:
attempt += 1
logging.warning(f"{attempt} cəhd uğursuz oldu, 2 saniyə sonra təkrar...")
time.sleep(2)
logging.error(f"{retries} cəhd sonra element tapılmadı.")
return None
Scriptlərin dayanıqlılığı və etibarlılığı haqqında tövsiyələr
- Aydın gözləmələrdən istifadə edin: Tədricən görünən elementlər üçün aydın gözləmələr təyin edin. Bu, yükləmə gecikmələrindən yaranan səhvlərin sayını azaldacaq.
- Hər bir mərhələdə try-except blokları tətbiq edin: Bu, xətaları logging etməyə və kiçik nasazlıqlar zamanı scriptin dayanmasının qarşısını almağa imkan verir.
- Vacib mərhələlər üçün təkrar cəhdlər tətbiq edin: Əgər xəta müvəqqəti ola bilərsə, bir neçə saniyəlik fasilə ilə təkrar cəhdlər qurun.
- Hər bir addımı logging edin: Hər bir əsas mərhələni logging etmək, scriptin icra edilmə prosesini təhlil etməyə və gizli səhvləri tapmağa kömək edir.
- Kritik xətalar üçün bildirişləri təyin edin: Məsələn, əgər loglarda CRITICAL səviyyəsində xəta qeydə alınarsa, email və ya chat mesajı göndərə bilərsiniz.
3. Logları faydalı şəkildə aparmaq
İndi ki, biz loglama və səhvlərin emalını öyrəndik, gəlin növbəti addımı ataq və loglardan maksimum faydanı necə çıxarmaq olar, baxaq.
Logların yeri və formatının seçilməsi
Logları analiz etmək üçün saxlamaq istəyirsinizsə, fayldan istifadə edin. Bu, sanki bir gündəlik aparmaq kimidir ki, onu təkrar oxuyub analiz edərək gələcək səhvlərdən qaça bilərsiniz. Loglamanı fayla yazmaq üçün quraşdıraq:
logging.basicConfig(filename='app.log', filemode='w', level=logging.INFO)
# İndi bütün loglar app.log faylına yazılacaq
logging.info("Logların fayla yazılması başlandı.")
Logların analizi
Loglarınızı analiz edərək, tez-tez rast gəlinən səhvləri və ya performans problemlərini müəyyən edin. Bəlkə də sizin skriptiniz yalnız müəyyən günlərdə və ya saatlarda problemlərlə qarşılaşır və bunu yalnız logların detallı araşdırılması zamanı bilmək olar. Bu analiz — sizin şəxsi detektiv prosesinizdir ki, tətbiqinizin necə işlədiyini daha yaxşı başa düşməyə kömək edir.
GO TO FULL VERSION