Harika bir soru! Python'da web otomasyonu için kullanılan selenium kütüphanesinin temelini oluşturan WebDriver'ı detaylı bir şekilde inceleyelim.

WebDriver, tarayıcınızı (Chrome, Firefox, vb.) doğrudan kontrol etmenize olanak tanıyan bir arayüzdür. Python kodunuzla tarayıcıyı açmak, sayfaları gezinmek, butonlara tıklamak, formları doldurmak ve veri çekmek gibi işlemleri yapmanızı sağlar.
İşte WebDriver ile ilgili her şeyi adım adım ele alalım:
Temel Kavramlar: WebDriver Nedir?
- Tarayıcı Otomasyonu:
WebDriver, tarayıcınızın kendisi gibi davranır. Gerçek bir kullanıcı gibi sayfaları açar, fare hareketlerini taklit eder ve klavye girişleri yapar. - İstemci-Sunucu Mimarisi: Python kodunuz (istemci), tarayıcınızın "önbelleklenmiş" sürümünü (sunucu) kontrol eder. Python kodunuz bir komut gönderdiğinde, WebDriver bu komutu tarayıcıya iletir ve tarayıcının yanıtını size geri getirir.
- Dil Bağımsızdır: WebDriver API'si birçok programlama dilinde (Python, Java, C#, vb.) kullanılabilir. Sadece tarayıcıyı kontrol etme mantığı aynıdır.
Kurulum
Öncelikle selenium kütüphanesini ve tarayıcınız için gerekli "driver"ı kurmanız gerekir.
Adım 1: Selenium Kütüphanesini Kurun
Terminal veya komut istemcisini açıp şu komutu çalıştırın:

pip install selenium
Adım 2: Tarayıcı Driver'ını Kurun
WebDriver, tarayıcınızı kontrol etmek için özel bir "sürücü" dosyasına ihtiyaç duyar. Her tarayıcının kendi sürücüsü vardır.
En Popüler Tarayıcılar ve Sürücüleri:
- Google Chrome için
ChromeDriver - Mozilla Firefox için
GeckoDriver - Microsoft Edge için
EdgeDriver
Sürücü Kurulumu (İki Yöntem):
Yöntem A: Manuel Kurulum (Klasik Yöntem)

- Sürücüyü İndirin: Kullandığınız tarayıcının ve işletim sisteminin sürümüne uygun driver'ı resmi web sitesinden indirin.
- ChromeDriver: https://googlechromelabs.github.io/chrome-for-testing/
- GeckoDriver: https://github.com/mozilla/geckodriver/releases
- Yolunu Ayarlayın: İndirdiğiniz
chromedriver.exe(Windows) veyachromedriver(macOS/Linux) dosyasını, projenizin olduğu klasöre koyun veya sistem PATH değişkeninize ekleyin. Python kodunuzda bu dosyanın yolunu belirtmeniz gerekir.
Yöntem B: Otomatik Yönetim (Tavsiye Edilen Yöntem - webdriver-manager)
Her driver'ı manuel olarak indirmek ve yönetmek can sıkıcıdır. webdriver-manager adlı kütüphane, doğru driver'ı otomatik olarak indirir ve yönetir. Bu yöntem çok daha pratiktir.
Kurulumu yapalım:
pip install webdriver-manager
Bu kütüphaneyi kullanarak driver' yolunu elle belirtmenize gerek kalmaz.
İlk WebDriver Örneği (Chrome ile)
İşte en temel bir otomasyon senaryosu: Google'ı açıp, "Python" aratmak.
Örnek Kod (Manuel Driver Yolu ile):
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
import time # Sayfanın yüklenmesini beklemek için
# 1. WebDriver'ı başlat (Chrome için)
# Eğer driver'ı PATH'e eklediyseniz sadece 'webdriver.Chrome()' yeterlidir.
# Değilse, tam yolunu belirtmelisiniz.
# driver_path = "C:/Users/KullaniciAdi/Downloads/chromedriver.exe"
# driver = webdriver.Chrome(executable_path=driver_path)
driver = webdriver.Chrome()
# 2. Tarayıcıyı tam ekran yap
driver.maximize_window()
# 3. Bir web sitesine git
driver.get("https://www.google.com")
# 4. Arama kutusunu bul (ID ile)
# Google'ın arama kutusunun ID'si "APjFqb"
search_box = driver.find_element(By.ID, "APjFqb")
# 5. Arama kutusuna "Python" yaz ve Enter'a bas
search_box.send_keys("Python")
search_box.send_keys(Keys.ENTER)
# 6. Sayfanın yüklenmesi için biraz bekle
time.sleep(2) # Gerçek uygulamalarda bu yerine bekleme (wait) stratejileri kullanılmalı.
# 7. Tarayıcıyı kapat
driver.quit()
Örnek Kod (webdriver-manager ile - Tavsiye Edilen):
Bu kod, webdriver-manager'ın gücünü gösterir. driver_path yazmaya gerek kalmaz!
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.chrome.service import Service as ChromeService
from webdriver_manager.chrome import ChromeDriverManager
import time
# 1. WebDriver'ı otomatik olarak yöneterek başlat
# ChromeDriverManager().install() doğru driver'ı indirir ve yolunu verir.
service = ChromeService(ChromeDriverManager().install())
driver = webdriver(service=service)
# 2. Geri kalan adımlar aynıdır
driver.maximize_window()
driver.get("https://www.google.com")
# Arama kutusunu bulmak için farklı stratejiler de kullanılabilir (örn. NAME, CSS_SELECTOR, XPATH)
search_box = driver.find_element(By.NAME, "q") # Google'ın arama kutusunun NAME'i "q"
search_box.send_keys("Selenium WebDriver")
search_box.send_keys(Keys.ENTER)
time.sleep(2)
# Sonucun başlığını yazdır
print("Sayfa Başlığı:", driver.title)
driver.quit()
WebDriver'ın Temel Metotları ve Özellikleri
| Metot / Özellik | Açıklama |
|---|---|
driver.get(url) |
Belirtilen URL'ye tarayıcıyı yönlendirir. |
driver.title |
Mevcut sayfanın başlığını (title) string olarak döndürür. |
driver.current_url |
Mevcut sayfanın URL'sini string olarak döndürür. |
driver.page_source |
Mevcut sayfanın HTML kaynağını string olarak döndürür. |
driver.find_element(By, "değer") |
Sayfada tek bir eleman bulmak için kullanılır. Eğer birden fazla eleman bulursa hata verir. |
driver.find_elements(By, "değer") |
Sayfada birden fazla eleman bulmak için kullanılır. Sonuç olarak bir liste döndürür. |
element.click() |
Belirtilen elemana (örn. buton, link) tıklar. |
element.send_keys("metin") |
Belirtilen elemana (genellikle input/textarea) metin yazar. |
element.text |
Bir elemanın görünen metnini alır. (HTML etiketlerini içermez) |
element.get_attribute("attribute_adi") |
Bir elemanın belirtilen özelliğini (örn. href, src, value) alır. |
driver.back() |
Tarayıcı geçmişinde bir geri atar. |
driver.forward() |
Tarayıcı geçmişinde bir ileri atar. |
driver.refresh() |
Sayfayı yeniler. |
driver.maximize_window() |
Tarayıcı penceresini tam ekran yapar. |
driver.quit() |
WebDriver oturumunu sonlandırır ve tarayıcıyı tamamen kapatır. (En temiz kapanış) |
driver.close() |
Mevcut sekmeyi veya pencereyi kapatır. Birden fazla pencere açtıysanız diğerleri açık kalır. |
Elemanları Bulma (Locators)
find_element metodu, bir web elemanını bulmak için kullanılır. By sınıfı, elemanı nasıl bulacağımızı belirten stratejileri içerir.
By Stratejisi |
Açıklama | Örnek |
|---|---|---|
ID |
Elemanın id attribute'u. Genellikle en hızlı ve en güvenli yöntemdir. |
By.ID, "user-name" |
NAME |
Elemanın name attribute'u. Form elemanlarında sıkça kullanılır. |
By.NAME, "password" |
CLASS_NAME |
Elemanın class attribute'u. Dikkat: Birden fazla class olabilir ve bu yöntem ilkini bulabilir. |
By.CLASS_NAME, "btn-primary" |
TAG_NAME |
HTML etiket adı (örn. div, a, input). Genellikle birden fazla eleman bulmak için kullanılır. |
By.TAG_NAME, "a" |
LINK_TEXT |
Bir linkin (anchor tag) tam metni. | By.LINK_TEXT, "Hesabım" |
PARTIAL_LINK_TEXT |
Bir linkin metninin bir parçası. LINK_TEXT'e göre daha esnektir. |
By.PARTIAL_LINK_TEXT, "Hesap" |
CSS_SELECTOR |
CSS stilleri için kullanılan seçiciler. Çok güçlü ve esnektir. En çok tercih edilen yöntemlerden biridir. | By.CSS_SELECTOR, "#login-button" |
XPATH |
XML Path Language. Bir elemanın dosya sistemindeki yoluna benzer bir yoldur. Çok güçlü ve esnektir, ancak yavaş ve kırılgan olabilir. | By.XPATH, "//div[@id='login-form']/input[1]" |
Modern Yaklaşım: Implicit ve Explicit Waits (Beklemeler)
Web sayfaları yüklenirken bazen elemanlar hemen görünmeyebilir. time.sleep() sabit bir bekleme yapar ve kodu yavaşlatabilir. Bunun yerine akıllı bekleme stratejileri kullanmak daha iyidir.
Implicit Wait (Örtük Bekleme)
Driver'ı bulmaya çalışırken bir eleman bulunamazsa, belirli bir süre kadar beklemesini söyler. Bu bekleme, tüm find_element çağrıları için geçerlidir.
from selenium import webdriver
from selenium.webdriver.chrome.service import Service as ChromeService
from webdriver_manager.chrome import ChromeDriverManager
driver = webdriver.Chrome(service=ChromeService(ChromeDriverManager().install()))
# 10 saniye boyunca eleman bulunamazsa her seferinde 500ms aralıklarla dener
driver.implicitly_wait(10)
driver.get("https://some-slow-website.com")
# Eğer bu eleman 5 saniyede görünürse, kod 5 saniye sonra devam eder.
# 10 saniyede de görünmezse hata fırlatır.
element = driver.find_element(By.ID, "slow-element")
Explicit Wait (Açık Bekleme) (Tavsiye Edilen)
Belirli bir koşul gerçekleşene kadar (örn. bir eleman tıklanabilir olana kadar) bekler. WebDriverWait ve expected_conditions ile kullanılır. Her bekleme için ayrı tanımlandığı için daha güvenilirdir.
from selenium import webdriver
from selenium.webdriver.chrome.service import Service as ChromeService
from webdriver_manager.chrome import ChromeDriverManager
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(service=ChromeService(ChromeDriverManager().install()))
driver.get("https://some-slow-website.com")
# En fazla 10 saniye bekle, ID'si "myDynamicElement" olan eleman
# görünür hale gelene kadar. Koşul sağlandığında elemanı döndürür.
try:
element = WebDriverWait(driver, 10).until(
EC.presence_of_element_located((By.ID, "myDynamicElement"))
)
# Artık eleman kullanılabilir
element.click()
finally:
driver.quit()
expected_conditions kütüphanesinde element_to_be_clickable, visibility_of_element_located, title_contains gibi çok sayıda kullanışlı koşul bulunur.
Özetle Nasıl Başlanır?
- Kurulum:
pip install seleniumvepip install webdriver-manager. - Driver Başlatma:
webdriver-managerkullanarakdriver = webdriver.Chrome()gibi basit bir kodla başlatın. - Sayfaya Gitme:
driver.get("https://..."). - Eleman Bulma:
By.ID,By.CSS_SELECTORveyaBy.XPATHgibi güvenli bir strateji kullanarak eleman bulun. - İşlem Yapma:
click(),send_keys()gibi metotlarla etkileşime geçin. - Bekleme Stratejisi:
time.sleep()yerineWebDriverWaitkullanın. - Temizlik: İşiniz bittiğinde
driver.quit()ile tarayıcıyı kapatın.
