Giriş ve Temel Kavramlar
Web otomasyonu ve veri kazıma alanında sıklıkla karşılaşılan AJAX (Asynchronous JavaScript and XML) yapısı, sayfa yüklenmeden arka planda veri alışverişi sağlayarak kullanıcı deneyimini artırır. Bu durum, geleneksel HTML parse yöntemleriyle veri toplamayı zorlaştırır; çünkü sayfa ilk yüklendiğinde ilgili veriler henüz DOM’da yer almayabilir. Bu noktada Selenium gibi etkileşimli araçlar devreye girer.
Ajax ile Dinamik İçerik ve Selenium’un Rolü
Selenium, tarayıcıyı gerçek anlamda kontrol ederek, sayfa üzerinde kullanıcı davranışlarını taklit eder. AJAX içeriği bu süreçte şu adımlarla alınabilir:
Sayfayı yükleme ve başlangıçta erişilemeyen içeriklerin yüklenmesini bekleme.
Belirli elementlerin DOM’da oluşmasını veya güncellenmesini bekleme.
Gerekirse, JavaScript kodları çalıştırarak belirli API çağrılarını tetikleme.
Örneğin, WebDriverWait ve expected_conditions kullanmak, AJAX’in tamamlanmasını sağlamak için en yaygın yöntemdir.
Kod örneği:
123456789101112131415161718
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 = webdriver.Chrome()
driver.get('https://ornek-site.com/ajax-page')
[b]AJAX içeriğinin yüklenmesini bekle[/b]
wait = WebDriverWait(driver, 10)
element = wait.until(EC.presence_of_element_located((By.ID, 'ajax-container')))
[b]İçeriği al ve işle[/b]
ajax_verisi = element.text
print(ajax_verisi)
driver.quit()
Performans ve Optimizasyon İpuçları
- Ajax çağrılarının hangi URL’lerle yapıldığını analiz etmek ve gerekirse doğrudan API çağrılarını taklit etmek (örneğin,
requests ile). - Sayfa içeriği dinamik olarak güncellenirken, ilgili elementlerin oluşmasını veya güncellenmesini uygun bekleme fonksiyonlarıyla kontrol etmek.
- Çok sayfalı veya karmaşık AJAX yapılarında, tarayıcı oturumunu optimize etmek ve gereksiz beklemeleri minimize etmek.
Selenium ile AJAX içeriğine erişmek, dikkatli planlama ve uygun bekleme stratejileri ile oldukça etkili sonuçlar alınmasını sağlar. Bu yöntemler, özellikle modern web sitelerinin dinamik yapısında veri kazıma ve test otomasyonunu kolaylaştırır.