Sık sorulan sorular

Tarayıcılar arası desteğin durumu nedir?

Resmi Firefox desteği deneyseldir. Mozilla ile süregelen iş birliği, geliştiricilerin tarayıcılar arası kapsam beklediği uçtan uca test amaçlı yaygın kullanım alanlarını desteklemeyi amaçlamaktadır. Puppeteer ekibinin, Firefox desteğini dengelemek ve eksik API'leri dikkatimize sunmak için kullanıcıların görüşlerini alması gerekiyor.

Puppeteer 2.1.0 sürümünden itibaren, Puppeteer komut dosyalarınızı Firefox Nightly'de herhangi bir özel yama olmadan çalıştırmak için puppeteer.launch({product: 'firefox'}) seçeneğini belirtebilirsiniz.
Eski bir deneme için Firefox'un yama uygulanmış bir sürümü gerekse de, mevcut yaklaşım "stock" Firefox ile çalışmaktadır.

Safari gibi tarayıcılara Puppeteer desteği sunmak için diğer tarayıcı tedarikçileriyle işbirliği yapmaya devam ediyoruz. Bu çaba, Chrome tarafından kullanılan standart olmayan Geliştirici Araçları Protokolü'ne güvenmek yerine, tarayıcılar arası komutları yürütmek için bir standardın araştırılmasını içerir.

Kuklacı'nın hedefleri ve ilkeleri nelerdir?

Projenin hedefleri şunlardır:

  • DevTools Protokolü'nün özelliklerini vurgulayan ince ve standart bir kitaplık sağlayın.
  • Benzer test kitaplıkları için referans uygulaması sağlayın. Zamanla bu diğer çerçeveler de temel katmanları olarak Puppeteer'ı benimseyebilir.
  • Gözetimsiz/otomatik tarayıcı testinin kullanımını artırma.
  • Yeni DevTools Protokolü özelliklerinin test sürümüne yardımcı olun ve hataları yakalayın.
  • Otomatik tarayıcı testinin sorunlu noktaları hakkında daha fazla bilgi edinin ve bu boşlukları doldurmaya yardımcı olun.

Chromium ilkelerini, ürünle ilgili kararlar almamıza yardımcı olacak şekilde uyarlıyoruz:

  • Hız: Kuklacı, otomatik bir sayfaya göre neredeyse sıfır performans ek yüküne sahiptir.
  • Güvenlik: Puppeteer, Chromium'a karşı süreç dışında da çalışarak kötü amaçlı olabilecek sayfaların otomatik olarak oluşturulmasını güvenli hale getirir.
  • Kararlılık: Kuklacı kesintili olmamalı ve bellek sızıntısı yapmamalıdır.
  • Basitlik: Puppeteer kullanımı, anlaşılması ve hata ayıklaması kolay üst düzey bir API sunar.

Puppeteer, Selenyum/WebDriver'ın yerini mi alıyor?

Hayır. Her iki proje de birbirinden farklı nedenlerle değerlidir:

  • Selenium/WebDriver, tarayıcılar arası otomasyona odaklanır. Değer teklifi, yaygın olarak kullanılan tüm tarayıcılarda çalışan tek bir standart API'dir.
  • Puppeteer Chromium'a odaklanır; sunduğu değer teklifi daha zengin özellikler ve daha yüksek güvenilirliktir.

Bununla birlikte, Puppeteer'ı Chromium'a karşı testler yapmak için (örneğin, topluluk odaklı jest-puppeteer'ı kullanmak) kullanabilirsiniz. Muhtemelen tek test çözümünüz bu olmasa da WebDriver ile karşılaştırıldığında bazı iyi noktalara sahiptir:

  • Puppeteer sıfır kurulum gerektirir ve en iyi çalıştığı Chromium sürümüyle birlikte gelir. Hiç test yapmamaktansa yalnızca Chromium ile çalışan birkaç test olması daha iyidir.
  • Puppeteer'ın etkinlik odaklı bir mimarisi vardır ve bu da önemli oranda gevşekliği ortadan kaldırır. Kukla metinlerinde kötü niyetli "sleep(1000)" çağrılarına gerek yoktur.
  • Puppeteer varsayılan olarak gözetimsiz çalıştığı için hızlı koşabilir. Puppeteer v1.5.0 ayrıca tarayıcı bağlamlarını ortaya çıkararak test yürütmesini verimli bir şekilde paralel yapmayı mümkün kılar.
  • Puppeteer, hata ayıklama söz konusu olduğunda kendini gösterir: "Dikkatsiz" biti false (yanlış) değerine çevirin, "slowMo"yu ekleyin, tarayıcının ne yaptığını görürsünüz. Test ortamını incelemek için Chrome Geliştirici Araçları'nı bile açabilirsiniz.

Puppeteer v.XXX neden Chromium v.YYY ile çalışmıyor?

Puppeteer'ı Chromium'la bölünmez bir varlık olarak görüyoruz. Puppeteer'ın her sürümü, Chromium'un belirli bir sürümünü paket halinde sunar. Bu sürüm, çalışacağı garanti edilen tek sürümdür.

Bu yapay bir sınırlama değildir. Puppeteer ile ilgili pek çok çalışma aslında Chromium deposunda gerçekleşiyor. Tipik bir öyküyü aşağıda bulabilirsiniz:

  1. Bir Puppeteer hatası bildirildi
  2. Bu, Geliştirici Araçları protokolüyle ilgili bir sorundur. Bu nedenle bu sorunu Chromium'da düzeltiyoruz
  3. Yukarı akış düzeltmesi yapıldıktan sonra, güncellenmiş Chromium'u Puppeteer'a ekliyoruz.

Bununla birlikte, çoğu zaman Puppeteer'ı Chromium yerine resmi Google Chrome ile kullanmak tercih edilir. Bunu yapmak için Chrome sürümüne karşılık gelen bir puppeteer-core sürümü yüklemeniz gerekir.

Örneğin, Chrome 101'i puppeteer-core ile kullanmak için chrome-101 npm etiketini kullanın:

npm install puppeteer-core@chrome-101

Puppeteer hangi Chromium sürümünü kullanıyor?

Aşağıdaki yöntemlerden birini kullanarak sürümü bulun:

  • revisions.ts sayfasında chromium girişini bulun. İlgili Chromium kaydetme ve sürüm numarasını bulmak için OmahaProxy'nin "Sürümleri Bul" bölümünde, önünde r olan düzeltmeyi arayın.
  • Chromium ve Puppeteer sürümleri arasındaki eşlemeyi içeren versions.js dosyasında versionsPerRelease haritasını arayın. Not: Dosya yalnızca Chromium'un güncellendiği Puppeteer sürümlerini içerir. Tüm Puppeteer sürümleri listelenmemiştir.

Puppeteer hangi Firefox sürümünü kullanıyor?

Firefox desteği deneysel olduğundan Puppeteer, PUPPETEER_PRODUCT ortam değişkeni firefox olarak ayarlandığında en son Firefox Nightly'yi indirir. revisions.ts içindeki firefox değerinin latest olmasının nedeni budur. Puppeteer belirli bir Firefox sürümüne bağlı değil.

Puppeteer yüklemesinin bir parçası olarak Firefox Nightly'yi getirmek için:

PUPPETEER_PRODUCT=firefox npm i puppeteer
# or "yarn add puppeteer"

Neler navigasyon olarak kabul edilir?

Puppeteer açısından bakıldığında "gezinme", bir sayfanın URL'sini değiştiren her şeydir. Tarayıcının, web sunucusundan yeni bir belge almak için ağa gittiği normal gezinmenin yanı sıra, sabit gezinmeler ve History API kullanımı da buna dahildir.

Bu "gezinme" tanımıyla, Puppeteer tek sayfalık uygulamalarla sorunsuz bir şekilde çalışır.

"Güvenilir" ve "güvenilmeyen" giriş etkinliği arasındaki fark nedir?

Tarayıcılarda giriş etkinlikleri iki büyük gruba ayrılabilir: güvenilir ve güvenilmeyen.

  • Güvenilir etkinlikler: Fare veya klavye kullanmak gibi sayfayla etkileşimde bulunan kullanıcılar tarafından oluşturulan etkinlikler.
  • Güvenilmeyen etkinlik: document.createEvent veya element.click() yöntemleri gibi Web API'leri tarafından oluşturulan etkinlikler.

Web siteleri şu iki grubu birbirinden ayırt edebilir:

  • Event.isTrusted etkinlik işareti kullanma
  • koklamanıza yardımcı olur. Örneğin, her güvenilir 'click' etkinliğinin öncesinde 'mousedown' ve 'mouseup' etkinlikleri bulunur.

Otomasyon için güvenilir etkinlikler oluşturmak önemlidir. Puppeteer ile oluşturulan tüm giriş etkinlikleri güvenilirdir ve buna eşlik eden uygun etkinlikleri tetikler.

Herhangi bir nedenle bir kullanıcı güvenilmeyen bir etkinliğe ihtiyaç duyarsa her zaman page.evaluate ile bir sayfa içeriğine gidip sahte bir etkinlik oluşturabilir:

await page.evaluate(() => {
  document.querySelector('button[type=submit]').click();
});

Puppeteer hangi özellikleri desteklemez?

Puppeteer'ın ses ve video içeren sayfaları kontrol ederken beklendiği gibi davranmadığını görebilirsiniz. Örneğin, video oynatma ve ekran görüntüleri başarısız olabilir.) Bunun iki nedeni vardır:

  • Puppeteer, Chromium ile birlikte gelir (Chrome ile birlikte değildir). Dolayısıyla varsayılan olarak Chromium'un medyayla ilgili sınırlamalarını devralır. Bu, Puppeteer'ın AAC veya H.264 gibi lisanslı biçimleri desteklemediği anlamına gelir.
    • Puppeteer'ı Chromium yerine executablePath puppeteer.launch seçeneğiyle Chrome yerine ayrı olarak yüklenmiş bir sürümü kullanmaya zorlamak mümkündür. Bu yapılandırmayı yalnızca Chrome'un bu medya biçimlerini destekleyen resmi bir sürümüne ihtiyacınız varsa kullanmalısınız.
  • Puppeteer (tüm yapılandırmalarda) Chromium veya Chrome'un masaüstü sürümünü kontrol ettiğinden, yalnızca Chrome'un mobil sürümü tarafından desteklenen özellikler desteklenmez. Bu, Puppeteer'ın HTTP Canlı Yayını (HLS) desteklemediği anlamına gelir.

Test ortamımda Puppeteer'ı yüklemede / çalışırken sorun yaşıyorum. Nereden yardım almalıyım?

Çeşitli işletim sistemleri için gerekli bağımlılıkları listeleyen bir sorun giderme rehberimiz mevcuttur.

Chromium her npm ci çalıştırmada indirilir. İndirme işlemini nasıl önbelleğe alabilirim?

Varsayılan indirme yolu node_modules/puppeteer/.local-chromium şeklindedir. Ancak bu yolu PUPPETEER_DOWNLOAD_PATH ortam değişkeniyle değiştirebilirsiniz.

Puppeteer, başlatma sırasında Chromium'un yürütülebilir konumunu çözmek için bu değişkeni kullanır. Bu nedenle, PUPPETEER_EXECUTABLE_PATH değerini de belirtmenize gerek yoktur.

Örneğin, Chromium indirmesini ~/.npm/chromium içinde saklamak için:

export PUPPETEER_DOWNLOAD_PATH=~/.npm/chromium
npm ci

# by default the Chromium executable path is inferred
# from the download path
npm test

# a new run of npm ci will check for the existence of
# Chromium in ~/.npm/chromium
npm ci

Başka sorularım da var! Nereden sorabilirim?

Puppeteer'da yardım almanın birçok yolu vardır:

Sorunuzu yayınlamadan önce bu kanalları aradığınızdan emin olun.