1. Hərəkətlər ssenarisi və onun ardıcıllığı
Avtomatlaşdırma ssenarisini planlaşdırmağa başlayanda, nağıllardakı kimi sadədən mürəkkəbə doğru getməyin vacib olduğunu anlamaq lazımdır. Təsəvvür edin ki, sizin skriptiniz veb-səhifələrdə səyahətə çıxan qəhrəmandır. Hər addım düşünülmüş və düzgün qurulmuşdur ki, yolunuzdan sapmayasınız.
Avtomatlaşdırma üçün addım-addım ssenari yaratmaq
Plan tərtib etməkdən başlamaq lazımdır. Nəyə nail olmaq istəyirsiniz? Səhifə yükləmək, formanı doldurmaq, düyməni klik etmək? Necə deyərlər: "Planlaşdırmayan planı iflasa uğrayır." Biz iflas istəmirik, gəlin ehtimal olunan addımları qeyd edək.
from selenium import webdriver
from selenium.webdriver.common.by import By
# Driver instansiyasını yaradırıq. Brauzerinizə uyğun driver istifadə edin.
driver = webdriver.Chrome()
# Səhifəni açırıq
driver.get('https://example.com/login')
# Login-i doldururuq
driver.find_element(By.NAME, 'username').send_keys('my_username')
# Şifrəni doldururuq
driver.find_element(By.NAME, 'password').send_keys('my_secure_password')
# Login düyməsini klik edirik
driver.find_element(By.ID, 'login-button').click()
Gördüyünüz kimi, biz ritmi təyin edirik. Ssenarinin hər bir addımı ardıcıl yerinə yetirilir ki, sizin skriptiniz saytda asanlıqla hərəkət edə bilsin.
Addımların icrasını loglama
Hər özünə hörmət edən qəhrəman kimi, bizim skriptimiz də izlər qoymalıdır ki, harada olduğunu və nə etdiyini bilək. Loglama — skriptinizin gündəliyi kimidir. Bu, addımların icrasını izləməyə və bir şey səhv gedərsə, səhvləri aşkar etməyə kömək edir.
import logging
# Loglamanı qururuq
logging.basicConfig(level=logging.INFO)
# Hərəkət loglama nümunəsi
logging.info("Giriş səhifəsini açırıq")
driver.get('https://example.com/login')
Loglama təkcə debuggingdə kömək etmir, həm də sakitlik verir, bilirsiniz ki, sizin skript hər addımı düzgün yerinə yetirir. Əgər birdən bir şey səhv gedərsə, geriyə qayıdıb hansı məqamda nə baş verdiyini görə bilərsiniz.
2. Kodun oxunması və modifikasiyası üçün təşkilatlanma
Ssenari daha mürəkkəb olduqda, kodu nizama salmaq vacibdir. Böyük qonaqlı bir yubiley mərasimini təsəvvür edin: hər şey öz yerində deyilsə, xaos yaranır. Bizim situasiyada bu, kodda xaos olacaq.
Kodun strukturunun tənzimlənməsi
Koda dəyişiklikləri minimal səy ilə etmək üçün, kod yaxşı təşkil edilməlidir. Ayaqqabı tənzimləyici kimi hər şeyi qaydasına salmaq lazımdır. Təkrarlanan hərəkətləri ayrıca bloklara ayırmaq üçün funksiyalardan istifadə edin.
def login_to_site(driver, username, password):
logging.info("Login daxil edirik")
driver.find_element(By.NAME, 'username').send_keys(username)
logging.info("Şifrə daxil edirik")
driver.find_element(By.NAME, 'password').send_keys(password)
logging.info("Login düyməsini basırıq")
driver.find_element(By.ID, 'login-button').click()
# Login üçün funksiyanı istifadə edirik
login_to_site(driver, 'my_username', 'my_secure_password')
Funksiyalardan istifadə kodu daha nizama salır və dəyişiklikləri asanlıqla etmək imkanı verir. Məsələn, əgər ID
giriş düyməsi dəyişərsə, sadəcə bir funksiyada dəyişiklik edirsiniz, kodun hər yerində yox.
3. Nümunə: Saytda alış prosesinin avtomatlaşdırılması
Təsəvvür edək ki, bizə veb-saytda alış prosesini avtomatlaşdırmaq lazımdır, və bu aşağıdakı addımları əhatə edir:
- Saytın açılması və istifadəçi hesabına daxil olunması.
- Məhsul kataloquna keçid və məhsulun səbətə əlavə edilməsi.
- Səbətə keçid və alış-verişin tamamlanması.
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
# Driver-i tənzimləmələrlə başlatma
def initialize_driver():
driver = webdriver.Chrome()
driver.implicitly_wait(10) # Səssiz gözləmə
return driver
# İstifadəçi hesabına daxil olmaq üçün funksiya
def login(driver, username, password):
driver.get("https://example.com")
driver.find_element_by_id("username").send_keys(username)
driver.find_element_by_id("password").send_keys(password)
driver.find_element_by_id("login_button").click()
# Məhsul kataloquna keçid və məhsulun səbətə əlavə olunması üçün funksiya
def add_product_to_cart(driver):
driver.get("https://example.com/catalog")
product = WebDriverWait(driver, 10).until(
EC.presence_of_element_located((By.CLASS_NAME, "product_item"))
)
product.click()
add_to_cart_button = driver.find_element_by_id("add_to_cart")
add_to_cart_button.click()
# Səbətə keçid və alış-verişin tamamlanması üçün funksiya
def checkout(driver):
driver.get("https://example.com/cart")
checkout_button = WebDriverWait(driver, 10).until(
EC.element_to_be_clickable((By.ID, "checkout"))
)
checkout_button.click()
# Driver-in işini bitirmək üçün funksiya
def close_driver(driver):
driver.quit()
# Əməliyyat ardıcıllığını yerinə yetirmək üçün əsas skript
def main():
# Məlumatların tənzimlənməsi
username = "myusername"
password = "mypassword"
# Driver-i başlatma
driver = initialize_driver()
try:
# Sayta giriş
login(driver, username, password)
# Kataloqa keçid və məhsulun səbətə əlavə olunması
add_product_to_cart(driver)
# Səbətə keçid və alışın tamamlanması
checkout(driver)
finally:
# Driver-in bağlanması
close_driver(driver)
# Əsas skriptin işə salınması
main()
Funksiyaların izahı
-
initialize_driver()
— driver-in başlatılması üçün funksiya. Bu funksiya bütün elementlər üçün səssiz gözləmə təyin edir və driver obyektini qaytarır. -
login()
— sayta giriş üçün funksiya. Bu funksiyausername
vəpassword
parametrlərini qəbul edir, hansı ki giriş formasını doldurmaq və düyməyə basmaq üçün istifadə olunur. -
add_product_to_cart()
— kataloqa daxil olmaq, məhsul seçmək və onu səbətə əlavə etmək üçün funksiya. -
checkout()
— səbətə keçmək və alış-verişi tamamlamaz üçün funksiya. -
close_driver()
— driver-lə işin tamamlanması üçün funksiya. -
main()
— funksiyaların ardıcıllığını idarə edən əsas funksiya. Burada bütün mərhələlərin çağırılması və giriş məlumatlarının təyin edilməsi baş verir.
Bu yanaşmanın üstünlükləri
-
Oxunaqlılıq
— hər bir mərhələ ayrı-ayrı funksiya şəklində formalaşdırılıb, bu kodun başa düşülməsini asanlaşdırır. -
Təkrar istifadə
— ayrı-ayrı funksiyalar əsas skriptdən müstəqil olaraq istifadə edilə bilər, məsələn, saytda ayrıca əməliyyatları yerinə yetirmək üçün. -
Test asanlığı
— hər bir mərhələ ayrıca test edilə bilər ki, hər şeyin düzgün işlədiyindən əmin olasınız. -
Elastiklik
— lazım olduqda yeni funksiyalar əlavə etmək və yamain()
içində əməliyyatların çağırılma sırasını dəyişmək olar.
GO TO FULL VERSION