Playwright ile Selenium: Python'la Tarayıcı Otomasyonunda Hangisi?
Playwright, Chromium, Firefox ve WebKit'i kendi kurduğu tarayıcılarla süren ve her işlemden önce öğenin hazır olmasını kendiliğinden bekleyen bir kütüphanedir; Selenium ise W3C WebDriver belirtimini uygulayan, çok dilli ve köklü bir projeler ailesidir.
Bir bakışta
- En hissedilir fark bekleme modelindedir. Playwright tıklama ya da yazmadan önce öğenin görünür, sabit, etkin ve olayları alır durumda olmasını kendisi bekler; Selenium'da bekleme koşulları çoğunlukla geliştiricinin yazdığı açık beklemelerle kurulur.
- Selenium bir standardın üzerine kuruludur. Selenium WebDriver, W3C WebDriver belirtiminin uygulamalarına altyapı sağlar; bu, farklı tarayıcı ve sağlayıcılarla geniş uyumluluk demektir.
- Dil desteği iki araçta da geniştir, ama aynı değildir. Playwright Node.js, Python, Java ve .NET için; Selenium Java, Python, C#, Ruby, JavaScript ve Kotlin için örnek sunar.
- Ölçekte Selenium Grid, tek makinede Playwright'ın tarayıcı bağlamları öne çıkar. Selenium Grid tarayıcı dağıtımını makineler arasında ölçekler; Playwright ise tek süreçte birden çok yalıtılmış oturum açabilir.
- Veri çekmede asıl iş, aracın değil sitenin kurallarına uymaktır. Hangi araç seçilirse seçilsin, sitenin kullanım koşulları, robot kuralları ve istek hızı gözetilmelidir.
Ortak zemin: gerçek bir tarayıcıyı programla sürmek
Playwright ve Selenium, gerçek bir tarayıcıyı kodla açıp sayfaya gitmeyi, butonlara tıklamayı, form doldurmayı, ekran görüntüsü almayı ve sayfadaki metni okumayı sağlar. JavaScript ile sonradan yüklenen içerik, giriş gerektiren sayfalar ya da çok adımlı formlar gibi basit HTTP istekleriyle alınamayan verilere ulaşmanın iki yaygın yoludur. Bu yüzden ikisi de hem test otomasyonunda hem de RPA ve veri çekme işlerinde kullanılır.
Selenium belgeleri projeyi, web tarayıcılarının otomasyonunu sağlayan ve destekleyen araç ve kütüphanelerin çatı projesi olarak tanımlar. Ailede tarayıcıyı süren WebDriver, testleri makineler arasında dağıtan Grid ve kullanıcı hareketlerini kaydedip oynatan IDE bulunur. Playwright ise tek bir kütüphane olarak Chromium, WebKit ve Firefox'u Windows, Linux ve macOS üzerinde sürer; ayrıca kendi test çalıştırıcısı olan Playwright Test ile gelir.
Test odaklı karşılaştırmalar (Cypress ile birlikte) çoğunlukla test çalıştırıcısı ve raporlama üzerinde durur. Python ile web otomasyonu ve veri çekmede ise belirleyici olan başka ölçütlerdir: bekleme davranışı, kurulum, ölçek ve bakım.
Ölçüt ölçüt Playwright ve Selenium
- Ölçüt: Mimari. Playwright: tarayıcı motorlarını kendi sürdüğü tek kütüphane. / Selenium: W3C WebDriver belirtimini uygulayan sürücüler üzerinden tarayıcıyı süren projeler ailesi.
- Ölçüt: Tarayıcılar. Playwright: Chromium, WebKit ve Firefox; kurulumda bu tarayıcıların ikili dosyaları ayrı bir komutla indirilir. / Selenium: WebDriver uygulaması olan tarayıcılar; tarayıcıyı ve sürücüsünü uyumlu tutmak kurulumun parçasıdır.
- Ölçüt: Diller. Playwright: TypeScript ve JavaScript (Node.js), Python, Java ve .NET. / Selenium: Java, Python, C#, Ruby, JavaScript ve Kotlin.
- Ölçüt: Bekleme. Playwright: her işlemden önce görünürlük, sabitlik, etkinlik ve olay alma kontrollerini otomatik bekler; doğrulamalar koşul sağlanana kadar yeniden dener. / Selenium: örtük bekleme varsayılanda kapalıdır; açık beklemeler belirli bir koşulu yoklar; belgeler örtük ve açık beklemelerin karıştırılmamasını açıkça uyarır.
- Ölçüt: Python API. Playwright: senkron ve asenkron iki API; asyncio projelerinde asenkron önerilir; API iş parçacığı açısından güvenli değildir. / Selenium: senkron API; paralellik genellikle birden çok süreç ya da Grid ile kurulur.
- Ölçüt: Ölçek. Playwright: tek süreçte birden çok yalıtılmış tarayıcı bağlamı; varsayılan olarak başsız çalışır. / Selenium: Grid, tarayıcı tahsisini ölçeklemek için bir dağıtım sunucusu sağlar.
- Ölçüt: Kayıt ve oynatma. Playwright: kod üretme aracıyla hareketleri koda dönüştürme. / Selenium: kullanıcı hareketlerini kaydedip oynatan ayrı bir IDE uygulaması.
Playwright beklemeyi üstlenir, Selenium standarda ve ekosisteme yaslanır
| Playwright | Selenium | |
|---|---|---|
| Mimari | Tek kütüphane, kendi tarayıcıları | W3C WebDriver üzerine projeler ailesi |
| Bekleme | İşlem öncesi otomatik kontroller | Geliştiricinin yazdığı açık beklemeler |
| Python API | Senkron ve asenkron | Senkron |
| Ölçek | Tek süreçte yalıtılmış bağlamlar | Grid ile makineler arası dağıtım |
| Diller | Node.js, Python, Java, .NET | Java, Python, C#, Ruby, JavaScript, Kotlin |
Aynı iş iki araçta: dinamik bir listeden ürün adlarını almak
Ürün adlarının JavaScript ile sonradan yüklendiği bir katalog sayfasından adları toplamak isteyelim.
Playwright ile Python'da senkron API kullanılarak:
from playwright.sync_api import sync_playwright with sync_playwright() as p: tarayici = p.chromium.launch() sayfa = tarayici.new_page() sayfa.goto("https://ornek.com/urunler") urunler = sayfa.locator(".urun-adi") urunler.first.wait_for() adlar = urunler.all_inner_texts() tarayici.close()
Selenium ile aynı iş, öğelerin yüklenmesini açıkça bekleyerek yazılır:
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 bekleme_suresi = ... # saniye cinsinden en uzun bekleme surucu = webdriver.Chrome() surucu.get("https://ornek.com/urunler") ogeler = WebDriverWait(surucu, bekleme_suresi).until(EC.presence_of_all_elements_located((By.CSS_SELECTOR, ".urun-adi"))) adlar = [o.text for o in ogeler] surucu.quit()
İki kodun farkı satır sayısından çok bekleme sorumluluğundadır. Selenium örneğinde öğelerin ne zaman hazır olacağını geliştirici tanımlar; Selenium belgeleri, tarayıcının doğru duruma geçip geçmediğine bağlı yarış koşullarının kararsız otomasyonların başlıca nedenlerinden biri olduğunu ve sabit uyku komutlarının yetersiz kalabildiğini belirtir. Playwright'ta ise tıklama ve yazma gibi işlemlerde bekleme kütüphaneye geçer. Ancak listedeki metinleri toplu okuyan yöntemler beklemez, o an sayfada ne varsa onu döndürür; bu yüzden örnekte önce ilk ürünün görünmesi bekleniyor. İçerik sonsuz kaydırmayla ya da ağ isteği bitince geliyorsa bekleme koşulunu yine açıkça yazmak gerekir.
Hangi durumda hangisi?
Playwright'ı seçin: • Yeni bir Python otomasyonu ya da veri çekme projesine başlıyorsanız ve kararsız bekleme hatalarıyla uğraşmak istemiyorsanız. • Asenkron Python ile çok sayıda sayfayı aynı süreçte gezecekseniz. • Chromium, Firefox ve WebKit'i tek kurulumla, sürücü uyumu düşünmeden çalıştırmak istiyorsanız.
Selenium'u seçin: • Kurumda yerleşik Selenium altyapısı, Grid kurulumu ve bu altyapıya bağlı çok sayıda betik varsa. • Ekip Ruby gibi Playwright'ın resmî paket sunmadığı bir dille çalışıyorsa. • W3C WebDriver standardını destekleyen bir bulut tarayıcı sağlayıcısı ya da özel bir tarayıcı kullanmak zorundaysanız.
İki aracın birlikte yaşaması da olağandır: eski test ve otomasyon betikleri Selenium'da kalırken yeni veri çekme işleri Playwright ile yazılır. Geçişte en çok zaman alan iş, betiklerdeki sabit uyku komutlarını ve el yapımı bekleme döngülerini temizlemektir.
Mevcut altyapı yoksa bekleme ihtiyacı belirleyicidir
- Kurumda yerleşik Selenium ve Grid altyapısı varSelenium ile devamYeni betiklerde açık bekleme disiplini kurulur.
- Ekip Ruby ile çalışıyorSeleniumPlaywright bu dil için resmî paket sunmaz.
- Yeni Python projesi, dinamik sayfalarPlaywrightOtomatik bekleme ve asenkron API öne çıkar.
Veri çekmede sık hatalar
Araç ne olursa olsun, tarayıcı otomasyonuyla veri çekme projelerinde aynı hatalar tekrarlanır.
- Sabit uyku komutlarıyla bekleme. Sayfa bazen hızlı, bazen yavaş yüklenir; sabit süre ya gereksiz yavaşlatır ya da yetmez. Playwright belgeleri Python'da uyku komutu yerine kütüphanenin kendi bekleme yöntemini kullanmayı önerir; Selenium'da açık beklemeler bu iş içindir.
- Kırılgan seçiciler. Sayfa tasarımı değiştiğinde bozulan uzun CSS yolları yerine, mümkünse metin, rol ya da kararlı özniteliklere dayanan seçiciler kullanılmalıdır.
- Tarayıcıyı gereksiz yere kullanmak. Veri, sayfanın arka planda çağırdığı bir API'den geliyorsa, o isteği doğrudan kullanmak tarayıcı otomasyonundan çok daha hızlı ve kararlıdır.
- Siteye yük bindirmek. Çok hızlı ve paralel istekler hedef siteyi zorlar ve engellenmeye yol açar; istek hızı sınırlanmalı, sitenin kullanım koşulları ve robot kuralları okunmalı, kişisel veri içeren sayfalarda KVKK açısından ayrıca değerlendirme yapılmalıdır.
- Paralellikte iş parçacığı hatası. Playwright'ın Python API'si iş parçacığı açısından güvenli değildir; çok iş parçacıklı kodda her iş parçacığı kendi Playwright örneğini oluşturmalıdır.
Web otomasyonunu Mindset programlarında nerede çalışırsınız
Python ile Robotic Process Automation (RPA) Eğitimi, web kazıma modülünü belge, veritabanı, e-posta ve arayüz otomasyonuyla birlikte ele alır; tarayıcıdan alınan verinin Excel'e, veritabanına ya da otomatik e-postaya aktarıldığı uçtan uca robotlar bu çerçevede kurulur. Veri toplamaya odaklanmak isteyenler için Python ile Web Scraping ve Veri Toplama programı tamamlayıcıdır.
Resmî kaynaklardan bilgiler
| Playwright tarayıcı, platform ve dil desteği | Chromium, WebKit ve Firefox; Windows, Linux ve macOS; Node.js, Python, Java ve .NET belgeleri; Playwright Test uçtan uca test çatısı; testler varsayılan olarak başsız çalışırkaynak |
|---|---|
| Playwright otomatik bekleme kontrolleri | İşlemden önce öğenin görünür, sabit, etkin ve olayları alır olması beklenir; doğrulamalar koşul sağlanana kadar yeniden denerkaynak |
| Playwright Python kütüphanesi | Senkron ve asenkron API; asyncio projelerinde asenkron önerilir; kurulum komutları Chromium, Firefox ve WebKit ikili dosyalarını indirir; API iş parçacığı açısından güvenli değildir; uyku komutu yerine kütüphanenin bekleme yöntemi önerilirkaynak |
| Selenium tanımı, bileşenleri ve dilleri | Web tarayıcılarının otomasyonu için araç ve kütüphanelerin çatı projesi; WebDriver W3C WebDriver belirtiminin uygulamalarına altyapı sağlar; Grid tarayıcı tahsisini ölçekleyen dağıtım sunucusu; IDE hareketleri kaydedip oynatan uygulama; Java, Python, C#, Ruby, JavaScript ve Kotlin örneklerikaynak |
| Selenium bekleme stratejileri | Yarış koşulları kararsız otomasyonların başlıca nedenlerindendir; örtük bekleme varsayılanda kapalıdır; açık beklemeler koşulu yoklar ve süre dolunca zaman aşımı hatası verir; sabit uyku yetersiz kalabilir; örtük ve açık beklemeler karıştırılmamalıdırkaynak |
Bilgiler resmî kaynaklarla doğrulandığı tarihte günceldir; değişiklik olabilir.
İlgili Mindset programı
Python ile Robotic Process Automation ( RPA ) Eğitimi
Sık sorulan sorular
Playwright Selenium'dan daha mı hızlı?
Genel bir hız iddiası yapmak yanıltıcı olur; sonuç, sayfaya, ağ koşullarına ve betiğin nasıl yazıldığına bağlıdır. Pratikte hissedilen fark çoğu zaman bekleme modelinden gelir: Selenium betiklerinde güvenlik payı olarak eklenen sabit beklemeler toplam süreyi uzatırken, Playwright işlemi öğe hazır olur olmaz yapar. İyi yazılmış açık beklemeleri olan bir Selenium betiği de verimli çalışabilir; karşılaştırmayı kendi senaryonuzla ölçmek en doğrusudur.
Selenium betiklerini Playwright'a taşımak zor mu?
Kavramlar benzer olduğu için mantık kolay taşınır, ama satır satır çeviri pek mümkün değildir. Tarayıcı açma, sayfaya gitme ve öğe bulma çağrılarının adları farklıdır; en büyük değişiklik bekleme kodudur. Açık beklemeler ve uyku komutları Playwright'ın otomatik beklemesi ve yeniden deneyen doğrulamalarıyla değiştirilir. Taşımaya en sık bozulan ya da en çok bakım isteyen betiklerden başlamak, kazancı hızlı görmeyi sağlar.
Başsız modda çalışan betik neden ekranlı modda çalışan betikten farklı sonuç verir?
Başsız modda pencere boyutu, yazı tipleri, bazı tarayıcı özellikleri ve sitenin tarayıcıya bakarak verdiği yanıt farklı olabilir; bazı siteler otomasyonu algılayıp farklı içerik gösterir. Playwright varsayılan olarak başsız çalışır ve gerektiğinde ekranlı moda alınabilir. Sorun ayıklarken betiği ekranlı çalıştırmak, ekran görüntüsü ve sayfa içeriğini kaydetmek farkın kaynağını bulmayı kolaylaştırır.
Selenium IDE ile Playwright'ın kod üretme aracı aynı işi mi görür?
Benzer amaçla kullanılırlar: kullanıcının tarayıcıdaki hareketlerini kaydedip tekrar oynatılabilir hâle getirmek. Selenium belgeleri IDE'yi kullanıcı hareketlerini kaydedip oynatan bağımsız bir uygulama olarak tanımlar. Kayıtla üretilen betikler hızlı bir başlangıç sağlar, ama veri çekme ve RPA işlerinde döngü, hata yönetimi ve veri kaydetme gibi kısımlar için kodun elle düzenlenmesi gerekir.