Gereksinimler ve Ortam Kurulumu
Otomasyon projelerine başlamadan önce Python'ın sisteminizde yüklü olması ve gerekli kütüphanelerin yapılandırılması gerekir. Selenium 4 ile birlikte artık manuel olarak "WebDriver" dosyalarını indirip PATH'e eklemenize gerek kalmadı; "WebDriver Manager" bu süreci otomatik yönetmektedir.
Öncelikle terminal veya komut satırı üzerinden gerekli paketleri yükleyelim:
# Gerekli kütüphanelerin kurulumu
pip install selenium webdriver-manager
Bu komut, tarayıcıyı yönetmenizi sağlayan selenium kütüphanesini ve tarayıcı sürücülerini otomatik güncel tutan webdriver-manager aracını sisteminize dahil eder.
İlk Otomasyon: Tarayıcıyı Başlatma
Selenium ile otomasyona başlamak için bir tarayıcı oturumu başlatmanız gerekir. Aşağıdaki kod örneği, Chrome tarayıcısını otomatik olarak açar ve belirtilen web sayfasına gider.
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from webdriver_manager.chrome import ChromeDriverManager
# Tarayıcı servis kurulumu
service = Service(ChromeDriverManager().install())
driver = webdriver.Chrome(service=service)
# Belirtilen adrese git
driver.get("https://www.google.com")
# Tarayıcıyı kapat
driver.quit()
Bu kodda webdriver.Chrome nesnesi, tarayıcının kontrolünü ele alır. driver.get() metodu ile tarayıcıyı yönlendirir, driver.quit() ile ise bellek sızıntılarını önlemek için oturumu güvenli bir şekilde sonlandırırız.
Web Elementlerini Bulma ve Etkileşim Kurma
Otomasyonun temel amacı, sayfadaki butonlara tıklamak, formlara veri girmek veya metinleri okumaktır. Selenium, HTML elementlerini seçmek için çeşitli "Locators" (konumlandırıcılar) kullanır. ID, Name, XPath veya CSS Selector kullanarak elementleri hedefleyebiliriz.
from selenium.webdriver.common.by import By
# Arama çubuğunu ID ile bulma ve yazı yazma
search_box = driver.find_element(By.NAME, "q")
search_box.send_keys("Python otomasyon eğitimi")
search_box.submit()
By modülü, elementleri bulma stratejimizi belirler. send_keys metodu klavye girdilerini simüle ederken, submit metodu form gönderme işlemini tetikler.
Bekleme Mekanizmaları: Implicit ve Explicit Wait
Web sayfaları dinamik olarak yüklendiği için, kodunuzun elementin yüklenmesini beklemesi gerekir. Yanlış bekleme kullanımı, otomasyonun çökmesine (NoSuchElementException) neden olur. 2026 standartlarında "Explicit Wait" (açık bekleme) kullanılması şiddetle önerilir.
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
# Element görünür olana kadar 10 saniye bekle
wait = WebDriverWait(driver, 10)
element = wait.until(EC.presence_of_element_located((By.ID, "hedef-id")))
Bu yöntem, kodun gereksiz yere beklemesini engeller ve element yüklendiği anda işleme devam eder. Bu, otomasyonunuzu çok daha kararlı hale getirir.
Karşılaştırma: Otomasyon Yöntemleri
| Yöntem | Avantajı | Dezavantajı |
|---|---|---|
| Selenium | Çoklu tarayıcı desteği, geniş topluluk | Yavaş çalışma hızı |
| Playwright | Hızlı, modern, yerleşik bekleme | Öğrenme eğrisi |
| BeautifulSoup | Çok hızlı veri çekme | JavaScript çalıştırmaz |
Gelişmiş Otomasyon: Formlar ve Dosya Yükleme
Gerçek dünya senaryolarında sadece tıklama yapmak yetmez; dosya yükleme veya karmaşık dropdown menüleri yönetmek gerekebilir. Aşağıdaki örnek, bir dosya yükleme işleminin nasıl simüle edileceğini gösterir.
# Dosya yükleme alanı (input type="file")
file_input = driver.find_element(By.ID, "upload-button")
file_input.send_keys("/yol/dosya.pdf")
Bu işlem, dosya seçme penceresini açmadan doğrudan dosya yolunu göndererek yükleme işlemini gerçekleştirir.
Güvenlik Uyarısı: Otomasyon projelerinizde kullanıcı adı ve şifre gibi hassas verileri asla kaynak kodun içine yazmayın. Bunun yerine ortam değişkenleri (environment variables) veya güvenli bir yapılandırma dosyası (config.json) kullanın.
Sıkça Sorulan Sorular
Selenium ile headless (arayüzsüz) mod nasıl çalıştırılır?
Tarayıcıyı görünür kılmadan çalıştırmak için ChromeOptions kullanarak --headless argümanını eklemeniz yeterlidir. Bu, sunucu taraflı otomasyonlar için idealdir.
Neden "NoSuchElementException" hatası alıyorum?
Bu hata genellikle elementin DOM'da henüz oluşmadığı anlamına gelir. Explicit Wait kullanarak elementin yüklenmesini beklemeniz sorunu çözecektir.
Selenium her web sitesinde çalışır mı?
Evet, ancak bazı siteler bot koruması (Cloudflare vb.) kullanır. Bu durumlarda "undetected-chromedriver" gibi kütüphanelere veya profesyonel proxy çözümlerine ihtiyaç duyabilirsiniz.
Tarayıcı sürücüsü güncellemelerini nasıl yönetirim?
Rehberde belirttiğimiz webdriver-manager kütüphanesi, tarayıcı sürümünüzü algılar ve uygun sürücüyü otomatik indirir. Manuel güncelleme yapmanıza gerek kalmaz.
Mobil cihazları simüle edebilir miyim?
Evet, ChromeOptions kullanarak mobil cihaz görünümünü (emulation) aktif edebilir ve ekran çözünürlüğünü ayarlayabilirsiniz.
Sorumluluk Reddi: Bu rehberdeki teknikler sadece eğitim amaçlıdır. Web otomasyonu yaparken hedef sitenin "robots.txt" dosyasını ve kullanım koşullarını mutlaka kontrol edin. İzinsiz veri kazıma veya otomasyon yasal sorunlara yol açabilir.
Selenium Projelerinde Performans Optimizasyonu ve İleri İpuçları
Web otomasyon projeleriniz büyüdükçe, tarayıcı kaynaklarını daha verimli kullanmak ve test süreçlerini hızlandırmak kritik bir hale gelir. Selenium'u sadece bir tarayıcıyı açıp tıklama aracı olarak değil, optimize edilmiş bir veri işleme motoru olarak kullanmak için şu stratejileri uygulayabilirsiniz:
Gereksiz Kaynakların Engellenmesi
Sayfa yükleme hızını artırmak ve bant genişliğinden tasarruf etmek için, otomasyon sırasında resimlerin, CSS dosyalarının veya fontların yüklenmesini engelleyebilirsiniz. Bu, özellikle veri kazıma (scraping) işlemlerinde süreci ciddi oranda hızlandırır.
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
chrome_options = Options()
# Resimlerin yüklenmesini engelle
prefs = {"profile.managed_default_content_settings.images": 2}
chrome_options.add_experimental_option("prefs", prefs)
driver = webdriver.Chrome(options=chrome_options)
driver.get("https://www.wikipedia.org")
JavaScript Yürütme (Execute Script)
Bazen Selenium'un standart click() veya send_keys() yöntemleri, karmaşık web sayfalarında (özellikle React veya Vue tabanlı uygulamalarda) beklenen sonucu vermeyebilir. Bu gibi durumlarda, doğrudan tarayıcı konsolu üzerinden JavaScript çalıştırmak en garantili yoldur.
# Elementi JavaScript ile tıklama
element = driver.find_element("id", "submit-button")
driver.execute_script("arguments[0].click();", element)
# Sayfayı en aşağıya kaydırma
driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
Otomasyon Projelerinde Hata Ayıklama (Debugging) Stratejileri
Otomasyon betikleri genellikle arka planda çalıştığı için, bir hata oluştuğunda sorunun nerede olduğunu anlamak zor olabilir. Sağlam bir otomasyon yapısı kurmak için şu yöntemleri kullanmalısınız:
- Ekran Görüntüsü Alma: Hata anında veya belirli aşamalarda ekran görüntüsü alarak görsel bir kayıt tutun.
- Log Seviyelerini Ayarlama: Selenium'un ürettiği logları inceleyerek ağ trafiğini veya tarayıcı hatalarını takip edin.
- Try-Except Blokları: Elementlerin yüklenmeme ihtimaline karşı kodunuzu genişletin ve hata durumunda tarayıcıyı düzgünce kapatmayı (
driver.quit()) unutmayın.
try:
element = driver.find_element("id", "login-btn")
element.click()
except Exception as e:
driver.save_screenshot("hata_aninda_ekran.png")
print(f"Hata oluştu: {e}")
finally:
driver.quit()
Headless Modda Kullanıcı Ajanı (User-Agent) Değiştirme
Birçok web sitesi, botları tespit etmek için tarayıcı parmak izlerini kullanır. Headless modda çalışırken varsayılan "HeadlessChrome" kullanıcı ajanı, siteler tarafından kolayca engellenebilir. Bunu aşmak için mutlaka gerçek bir tarayıcı kimliği tanımlayın:
chrome_options.add_argument("user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36")
Bu teknikleri birleştirerek, Selenium projelerinizi daha dayanıklı, hızlı ve tespit edilmesi zor hale getirebilirsiniz. Unutmayın, iyi bir otomasyon betiği sadece çalışan değil, aynı zamanda hata yönetimini başarıyla yapan betiktir.
Sonuç
Python ile Selenium kullanarak web otomasyonu yapmak, yazılım geliştirme sürecinizde size ciddi zaman kazandıracak bir yetkinliktir. Bu rehberde öğrendiğiniz bekleme mekanizmaları, element bulma stratejileri ve tarayıcı yönetimi, profesyonel projelerinizin temelini oluşturacaktır. Bir sonraki adım olarak, Selenium ile çektiğiniz verileri Pandas kütüphanesi ile Excel veya veritabanına aktarmayı deneyebilirsiniz.


Yorumlar (0)
Yorum Yaz