1. «Sonrakı» düyməsindən istifadə
Əgər saytda növbəti səhifəyə keçmək üçün «Sonrakı» düyməsi və ya linki varsa, həmin düyməni tıklamaq üçün bir dövr yaratmaq olar və düymə mövcud olduğu müddətdə ona klikləmək olar.
Kod nümunəsi
from selenium import webdriver
from selenium.common.exceptions import NoSuchElementException
from selenium.webdriver.common.by import By
import time
def initialize_driver():
driver = webdriver.Chrome()
driver.implicitly_wait(10)
return driver
def open_page(driver, url):
driver.get(url)
def collect_data(driver):
# Hazırkı səhifədən məlumatların toplanması nümunəsi
items = driver.find_elements(By.CLASS_NAME, "item_class")
for item in items:
print(item.text) # Burada məlumatları yadda saxlamaq və ya emal etmək olar
def click_next_button(driver):
try:
next_button = driver.find_element(By.LINK_TEXT, "Next")
next_button.click()
return True
except NoSuchElementException:
return False # Düymə tapılmadı, deməli sonuncu səhifədəyik
def main():
driver = initialize_driver()
open_page(driver, "https://example.com/page1")
try:
while True:
collect_data(driver)
if not click_next_button(driver):
break # "Next" düyməsi yoxdursa dövrdən çıxır
time.sleep(2) # Növbəti səhifənin yüklənməsi üçün gecikmə
finally:
driver.quit()
main()
Kodun izahı
initialize_driver() — driver-in başlanğıcı.
open_page() — işləməyə başlamaq üçün ilk səhifənin açılması.
collect_data() — hazırkı səhifədən məlumatların toplanması üçün funksiya.
click_next_button() — «Next» düyməsini tapan və klikləyən funksiya. Əgər düymə yoxdursa, False qaytarır, bu da keçidin tamamlandığını göstərir.
main() içərisindəki dövr — səhifələrin keçilməsi üçün əsas dövr. «Next» düyməsi daha tapılmadıqda işi tamamlayır.
2. Səhifələmə nömrələrdən istifadə edərək
Bəzi veb-saytlarda səhifələrin nömrələnmiş linkləri olur (məsələn, "1", "2", "3" və s.). Belə hallarda linklərin siyahısını toplayıb, ardıcıl olaraq hər birinə keçid etmək olar.
Kod nümunəsi
from selenium import webdriver
from selenium.webdriver.common.by import By
import time
def initialize_driver():
driver = webdriver.Chrome()
driver.implicitly_wait(10)
return driver
def open_page(driver, url):
driver.get(url)
def collect_data(driver):
items = driver.find_elements(By.CLASS_NAME, "item_class")
for item in items:
print(item.text)
def go_to_page(driver, page_number):
page_link = driver.find_element(By.LINK_TEXT, str(page_number))
page_link.click()
def main():
driver = initialize_driver()
open_page(driver, "https://example.com/page1")
try:
total_pages = 5 # Ümumi səhifə sayını qeyd edin, əgər məlumdursa
for page in range(1, total_pages + 1):
collect_data(driver)
if page < total_pages: # Son səhifədən sonra növbəti səhifəyə keçmirik
go_to_page(driver, page + 1)
time.sleep(2) # Növbəti səhifənin yüklənməsi üçün gözləmə
finally:
driver.quit()
main()
Kodun izahı
go_to_page() — Bu funksiya səhifənin nömrəsinə görə uyğun linki tapır və həmin səhifəyə keçid edir.
main() daxilində dövr — total_pages dəyişənindən səhifələrin sayını təyin etmək üçün istifadə edir. Dövr son səhifəyə çatana qədər növbəti səhifəyə keçir.
3. Hər səhifə üçün URL-in dəyişdirilməsi
Bəzi saytlar elə bir sadə URL struktura malikdir ki, hər səhifə URL-dəki nömrə ilə müəyyən edilir, məsələn, https://example.com/page/1, https://example.com/page/2 və s. Bu halda sadəcə URL-i dəyişərək lazım olan səhifəni yükləyə bilərsiniz, elementlər axtarmaq zərurətindən qaçaraq.
Kod nümunəsi
from selenium import webdriver
import time
def initialize_driver():
driver = webdriver.Chrome()
driver.implicitly_wait(10)
return driver
def open_page(driver, url):
driver.get(url)
def collect_data(driver):
items = driver.find_elements_by_class_name("item_class")
for item in items:
print(item.text)
def main():
driver = initialize_driver()
try:
total_pages = 5 # Ümumi səhifə sayını qeyd edin, əgər bilirsinizsə
base_url = "https://example.com/page/"
for page_number in range(1, total_pages + 1):
url = f"{base_url}{page_number}"
open_page(driver, url)
collect_data(driver)
time.sleep(2) # Növbəti səhifənin yüklənməsi üçün gecikmə
finally:
driver.quit()
main()
Kodun izahı
base_url dəyişəni səhifənin əsas URL-ni saxlayır. Dövr əsas URL-yə səhifə nömrəsini əlavə edir və ardıcıllıqla hər səhifəni açır.
Dövr hər səhifənin URL-ni generasiya edir və məlumat toplama əməliyyatını elementlərə tıklamadan yerinə yetirir. Bu, səhvlərin meydana gəlmə ehtimalını minimuma endirir.
4. Optimizasiya üzrə məsləhətlər
- Dinamik elementlər üzrə klikləri və gözləmələri minimallaşdırın: Linklərdən və URL-dən istifadə, JavaScript ilə yüklənən düymələrə kliklərdən daha sabitdir.
- Minimum gecikmə ilə gözləmə taymerlərindən istifadə edin: Yeni səhifəyə keçərkən
time.sleep(2)kimi qısa bir gecikmə istifadə edin ki, elementlər yüklənsin, amma lazım olmayan qədər çox gözləməyin. - Səhifənin tam yüklənməsindən sonra məlumatları toplayın: Məlumat toplamağa başlamazdan əvvəl səhifədəki məlumatların tam yükləndiyinə əmin olun. Elementləri daha etibarlı şəkildə tapmaq üçün
implicitly_waitistifadə edin. - Loglama: Cari səhifəni, xətaları və uğurlu keçidləri qeyd etmək üçün loglama tətbiq edin. Bu, skriptin icrası zamanı diaqnostikanı asanlaşdıracaq.
GO TO FULL VERSION