Python İle Selenium Kullanarak Web Otomasyonu Nasıl Yapılır?

Python İle Selenium Kullanarak Web Otomasyonu Nasıl Yapılır?
Python İle Selenium Kullanarak Web Otomasyonu Nasıl Yapılır?

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.

Bu yazıya tepkinizi paylaşın:
Zeynep Arslan

Kullanıcı deneyimi odaklı içerik üretiminde uzmanlaşmış bir editörüm. Özellikle DIY projeleri ve teknik rehberler üzerine detaylı içerikler üretiyorum.

Yorumlar (18)

18
okuyucu bu yazı hakkında yorum yaptı. Siz de deneyiminizi paylaşarak diğer okuyuculara yardımcı olabilirsiniz.
Caner Yılmaz
Caner Yılmaz 31 Temmuz 2026

Harika bir yazı olmuş Zeynep Hanım, selenium ile uğraşanlar için çok temiz bi kaynak. Eline sağlık.

Zeynep Arslan
Zeynep Arslan 01 Ağustos 2026

Çok teşekkür ederim Caner Bey, faydalı olmasına sevindim.

Selin_Kodcu
Selin_Kodcu 01 Ağustos 2026

Ya bende sürekli element not interactable hatası alıyorum, implicit wait mi kullanmalıyım yoksa explicit mi? Hangisi daha kararlı?

Zeynep Arslan
Zeynep Arslan 02 Ağustos 2026

Kesinlikle explicit wait (WebDriverWait) öneririm. Implicit wait projeler büyüdükçe çok baş ağrıtabiliyor.

Mert Demir
Mert Demir 02 Ağustos 2026

Selenium çok ağır gelmeye başladı artık, Playwright'a geçmeyi düşünüyorum. Sizin bu konuda fikriniz nedir?

Burak Şen
Burak Şen 03 Ağustos 2026

Ben geçtim, çok daha hızlı gerçekten. Denemeni öneririm.

Ayşegül K.
Ayşegül K. 03 Ağustos 2026

yazı güzel de kod bloklarında bazı yerlerde importlar eksik gibi sanki, bi kontrol edebilir misiniz?

Zeynep Arslan
Zeynep Arslan 04 Ağustos 2026

Haklısınız Ayşegül Hanım, ufak bir gözden kaçma olmuş. Hemen güncelledim, uyarınız için teşekkürler.

Zehra Nur
Zehra Nur 04 Ağustos 2026

Selenium WebDriver kurulumunu yapamadım, sürekli chromedriver sürüm hatası alıyorum. Güncel sürümü nasıl takip edebilirim?

Zeynep Arslan
Zeynep Arslan 05 Ağustos 2026

WebDriverManager kütüphanesini kullanırsanız, sürücüleri otomatik yönetir ve bu dertten kurtulursunuz.

Oğuzhan Vural
Oğuzhan Vural 04 Ağustos 2026

Docker üzerinde selenium çalıştırmak için bi rehber daha patlatırsanız süper olur. Projeyi sunucuya taşırken çok sorun yaşıyom.

Deniz Çelik
Deniz Çelik 05 Ağustos 2026

Aynen ya, headles modda çalıştırmak tam bi dert, +1 katılıyorum.

Fatih Terzi
Fatih Terzi 05 Ağustos 2026

Dili çok akıcı, karmaşık konuları bile basitçe anlatmışsınız. Devamını bekliyoruz.

Eren Can
Eren Can 05 Ağustos 2026

ya bu seleniumla instagram botu yapmaya çalışıyom ama hesap hemen kısıtlanıyo, bunun bi çözümü var mı acaba?

Hakan Y.
Hakan Y. 06 Ağustos 2026

Kanka tarayıcı izlerini gizlemen lazım, sadece kütüphaneyi kullanmak yetmiyor maalesef.

Derya Aydın
Derya Aydın 05 Ağustos 2026

Selenium ile ilgili ilk defa türkçe bu kadar açıklayıcı bi kaynak okudum. Çok teşekkürler.

Zeynep Arslan
Zeynep Arslan 06 Ağustos 2026

Çok naziksiniz, güzel yorumunuz beni motive etti.

Kemal Yıldırım
Kemal Yıldırım 06 Ağustos 2026

headless mod ile ram kullanımı baya azalıyo, yeni başlayan arkadaşlar mutlaka denemeli bence.

Yorum Yaz