İçeriğe atla
Cloudflare Wiki

    gez · aç · Esc kapat

    Browser Rendering

    Kod içinden headless Chrome sürer: ekran görüntüsü, PDF, sayfa kazıma, otomasyon. Yeni adı Browser Run.

    • DurumGenel kullanımda
    • FiyatTarayıcı saati + eşzamanlı tarayıcı sayısı
    • Ücretsiz katmanvar
    • Doğrulama

    Browser Rendering nedir?

    Bazı işler için gerçek bir tarayıcıya ihtiyaç vardır: bir sayfanın göründüğü hâliyle ekran görüntüsünü almak, JavaScript ile üretilen içeriği okumak, HTML’i PDF’e çevirmek, bir formu doldurup göndermek.

    Browser Rendering, Cloudflare’in altyapısında headless Chrome çalıştırmanı sağlar. Worker’ından bir binding üzerinden veya dışarıdan REST API ile sürebilirsin.

    Ürün sayfasının başlığı yeni konumlandırmayı özetliyor: “Headless, programmable web browsers built for AI Agents.”

    Nasıl çalışır?

    İki erişim yolu

    BindingREST API
    NeredenWorker içindenHer yerden
    GecikmeDüşükAğ turu ekler
    Oturum kontrolüTamSınırlı
    Uygun olduğu işKarmaşık otomasyonTek seferlik ekran görüntüsü, PDF

    Kütüphaneler

    Standart puppeteer ve playwright npm paketleri Workers runtime’ında çalışmaz. Cloudflare kendi uyarlamalarını yayımlıyor: @cloudflare/puppeteer ve @cloudflare/playwright. API’ler tanıdıktır ama tarayıcı başlatma binding üzerinden yapılır.

    Oturum yönetimi

    Her launch() çağrısı yeni bir tarayıcı açar ve hem tarayıcı saati hem eşzamanlı tarayıcı kotası tüketir. Bir tarayıcıyı açıp birden çok sayfa işlemek, her istekte yeniden açmaya göre belirgin biçimde ucuzdur.

    Ne zaman kullanılır, ne zaman kullanılmaz

    Uygun olduğu işler

    • Ekran görüntüsü servisi (sosyal medya önizleme kartları, arşivleme)
    • HTML’den PDF üretimi (fatura, rapor, sertifika)
    • JavaScript ile üretilen içeriği okuma
    • Otomatik uçtan uca test
    • Yapay zekâ ajanlarına tarayıcı yeteneği verme

    Uygun olmadığı işler

    • Statik HTML yeterliyse. Sayfa JavaScript gerektirmiyorsa düz fetch çok daha ucuz ve hızlı.
    • Çok yüksek hacimli kazıma. Tarayıcı saati pahalıdır; API varsa API kullan.
    • Gerçek zamanlı istek yolu. Tarayıcı başlatmak saniyeler alır; istek yolunda değil, arka planda veya önbelleğe alarak kullan.
    • Lab oturumlarıyla üretim. Resmî ifade: “Lab sessions are experimental and should not be used for production workloads.”
    • Hukuki izni olmayan kazıma. Teknik mümkünlük hukuki serbestlik değildir.

    Somut örnekler

    1. Ekran görüntüsü servisi

    import puppeteer from "@cloudflare/puppeteer";
    
    export default {
      async fetch(request, env) {
        const { searchParams } = new URL(request.url);
        const hedef = searchParams.get("url");
        if (!hedef) return new Response("?url= gerekli", { status: 400 });
    
        const tarayici = await puppeteer.launch(env.TARAYICI);
        try {
          const sayfa = await tarayici.newPage();
          await sayfa.setViewport({ width: 1280, height: 720 });
          await sayfa.goto(hedef, { waitUntil: "networkidle0" });
          const gorsel = await sayfa.screenshot({ type: "png" });
    
          return new Response(gorsel, {
            headers: {
              "content-type": "image/png",
              "cache-control": "public, max-age=86400",
            },
          });
        } finally {
          await tarayici.close();   // kapatmazsan fatura yazmaya devam eder
        }
      },
    };

    2. HTML’den PDF üretimi

    import puppeteer from "@cloudflare/puppeteer";
    
    export default {
      async fetch(request, env) {
        const { html } = await request.json();
    
        const tarayici = await puppeteer.launch(env.TARAYICI);
        try {
          const sayfa = await tarayici.newPage();
          await sayfa.setContent(html, { waitUntil: "networkidle0" });
    
          // Fontların yüklenmesini bekle — Türkçe karakter sorunlarının başlıca sebebi
          await sayfa.evaluateHandle("document.fonts.ready");
    
          const pdf = await sayfa.pdf({
            format: "A4",
            printBackground: true,
            margin: { top: "20mm", bottom: "20mm", left: "15mm", right: "15mm" },
          });
    
          return new Response(pdf, {
            headers: {
              "content-type": "application/pdf",
              "content-disposition": 'attachment; filename="rapor.pdf"',
            },
          });
        } finally {
          await tarayici.close();
        }
      },
    };

    3. Oturum tekrar kullanımı — maliyet düşürme

    import puppeteer from "@cloudflare/puppeteer";
    
    export default {
      async fetch(request, env) {
        const { urller } = await request.json();
    
        // TEK tarayıcı, birden çok sayfa — her URL için yeniden açmaktan çok daha ucuz
        const tarayici = await puppeteer.launch(env.TARAYICI);
        const sonuclar = [];
    
        try {
          for (const url of urller) {
            const sayfa = await tarayici.newPage();
            try {
              await sayfa.goto(url, { waitUntil: "domcontentloaded", timeout: 15_000 });
              sonuclar.push({ url, baslik: await sayfa.title(), ok: true });
            } catch (h) {
              sonuclar.push({ url, ok: false, hata: h.message });
            } finally {
              await sayfa.close();   // sayfayı kapat, tarayıcıyı açık tut
            }
          }
        } finally {
          await tarayici.close();
        }
    
        return Response.json({ sonuclar });
      },
    };

    4. R2’ye arşivleme

    import puppeteer from "@cloudflare/puppeteer";
    
    export default {
      async scheduled(controller, env) {
        const tarayici = await puppeteer.launch(env.TARAYICI);
        try {
          const sayfa = await tarayici.newPage();
          await sayfa.goto("https://sirket.com/panel", { waitUntil: "networkidle0" });
    
          const gorsel = await sayfa.screenshot({ fullPage: true, type: "png" });
          const anahtar = `arsiv/${new Date().toISOString().slice(0, 10)}.png`;
    
          await env.ARSIV.put(anahtar, gorsel, {
            httpMetadata: { contentType: "image/png" },
          });
        } finally {
          await tarayici.close();
        }
      },
    };

    Demo 1: Ekran görüntüsü ve PDF üretimi

    Adım 1 — Binding kurulumu

    {
      "name": "tarayici-worker",
      "main": "src/index.ts",
      "compatibility_date": "2026-08-31",
      "browser": { "binding": "TARAYICI" }
    }
    Terminal — bindings bölümünde TARAYICI (Browser Rendering) satırı

    Adım 2 — İlk ekran görüntüsü

    curl "http://localhost:8787/?url=https://example.com" -o ekran.png
    Üretilen PNG dosyası açılmış hâlde — hedef sayfanın doğru render edildiği görünsün

    Adım 3 — Türkçe karakter testi

    Türkçe metin içeren bir sayfanın PDF’ini üret ve ı ğ ş ç ö ü İ karakterlerini kontrol et.

    Üretilen PDF açık — Türkçe karakterlerin doğru göründüğü (veya bozuksa nasıl bozulduğu) net okunsun
    İki PDF yan yana — font beklenmeden alınan ve beklenerek alınan; farkın görüldüğü

    Adım 4 — Yayına al ve panelde izle

    npx wrangler deploy
    Panel → Browser Rendering → kullanım ekranı: tarayıcı saati ve eşzamanlı tarayıcı sayısı

    Demo 2: Oturum tekrar kullanımının maliyet etkisi

    Adım 1 — Her URL için yeni tarayıcı

    10 URL’i her biri için ayrı launch() çağırarak işle.

    Terminal — 10 URL için toplam süre ve panelde tüketilen tarayıcı dakikası

    Adım 2 — Tek tarayıcı, çok sayfa

    Aynı 10 URL’i tek tarayıcı üzerinden işle.

    Aynı test tek tarayıcıyla — toplam süre ve tüketilen tarayıcı dakikası

    Adım 3 — Eşzamanlı tarayıcı sınırına çarp

    Ücretsiz plandaki 3 eşzamanlı tarayıcı sınırını aşmayı dene.

    wrangler tail veya yanıt gövdesinde eşzamanlı tarayıcı limiti hatası

    Adım 4 — Günlük kotayı izle

    Panel kullanım grafiği — günlük tüketimin kotaya oranı

    Ölçüm

    ÖlçütHer istekte yeni tarayıcıOturum tekrar kullanımı
    10 URL için toplam süre
    Tüketilen tarayıcı dakikası
    Eşzamanlı tarayıcı tepe değeri
    İstek başına ortalama gecikme

    Fiyatlandırma

    Rakamlar 31 Ağustos 2026’da doğrulanmıştır.

    BirimÜcretsizÜcretli
    Tarayıcı saatiGünde 10 dakikaAyda 10 saat dahil, sonrası 0,09 USD / saat
    Eşzamanlı tarayıcı310 dahil, sonrası 2,00 USD / tarayıcı

    Lisanslama ve hukuki çerçeve

    Browser Rendering tescilli bir hizmettir; Cloudflare Hizmet Şartları ve Kabul Edilebilir Kullanım Politikası kapsamındadır.

    Kazıma yaparken dikkat edilmesi gerekenler. Bu ürün teknik olarak herhangi bir sayfayı açabilir, ama bu hukuki serbestlik anlamına gelmez. Ayrı ayrı geçerli olan katmanlar:

    • Hedef sitenin kullanım şartları
    • robots.txt ve benzeri erişim beyanları
    • Telif hakkı — içeriğin çoğaltılması ve yeniden yayımlanması
    • Kişisel veri mevzuatı — topladığın veride kişisel veri varsa KVKK devreye girer

    Cloudflare bu konularda bir muafiyet sağlamaz; sorumluluk kullanandadır.

    Veri konumu. Tarayıcı Cloudflare’in ağında çalışır; belirli bir ülkede çalışacağı garanti edilmez.

    Sık yapılan hatalar

    Tarayıcıyı kapatmamak. browser.close() çağrılmazsa oturum açık kalır ve tarayıcı saati yazmaya devam eder. try/finally içinde kapat.

    Her istekte yeni tarayıcı açmak. Oturum tekrar kullanımı hem gecikmeyi hem faturayı düşürür.

    Standart puppeteer paketini kurmak. Cloudflare’in uyarlaması gerekir: @cloudflare/puppeteer.

    Font yüklenmesini beklememek. Türkçe karakter ve özel font sorunlarının başlıca sebebi. document.fonts.ready bekle.

    waitUntil seçeneğini yanlış seçmek. networkidle0 görsel doğruluk için iyidir ama yavaştır; yalnızca metin okuyacaksan domcontentloaded çok daha hızlıdır.

    Zaman aşımı vermemek. Yanıt vermeyen bir sayfa oturumu açık tutar ve fatura yazar. goto çağrısına timeout ver.

    Beta özellikleri üretimde kullanmak. Özellikle lab oturumları için resmî uyarı açık: üretim iş yükleri için kullanılmamalı.

    Rozet yokluğundan GA çıkarımı yapmak. Doküman sayfalarının çoğu hiçbir durum ifadesi taşımıyor — bu GA oldukları anlamına gelmez.

    Sıkça sorulan sorular

    Browser Rendering mi Browser Run mı? İkisi aynı ürün mü?
    Aynı ürün, yarım kalmış bir ad değişikliği. Dokümantasyon, panel ve site navigasyonu Browser Run diyor. Buna karşılık REST API yolları, API token izninin adı (Browser Rendering - Edit), fiyat tablosundaki satır başlığı ve hatta ürün sayfasının <title> etiketi hâlâ Browser Rendering. Kod yazarken eski adı, doküman ararken yeni adı kullanmaya hazır ol.
    Ücretsiz planda ne kadar kullanabilirim?
    Günde 10 dakika tarayıcı süresi ve 3 eşzamanlı tarayıcı. Ücretli planda aylık 10 saat ve 10 eşzamanlı tarayıcı dahil geliyor — ancak dikkat: bu dahil miktarlar cloudflare.com/plans sayfasında hiç yazmıyor. Yalnızca aşım fiyatları görünüyor. Dahil kotalar için geliştirici dokümantasyonuna bakman gerekiyor.
    Puppeteer mı Playwright mı kullanmalıyım?
    İkisinin de Cloudflare uyarlaması var: @cloudflare/puppeteer ve @cloudflare/playwright. Standart npm paketleri doğrudan çalışmaz — Cloudflare'in paketleri Workers runtime'ına ve binding modeline uyarlanmıştır. Mevcut kodun hangisiyle yazılmışsa onun uyarlamasını seç.
    Binding mi REST API mı?
    Binding — Worker içinden kullanıyorsan; daha düşük gecikme, oturum yönetimi elinde. REST API — Cloudflare dışından çağırıyorsan (kendi sunucundan, bir CI işinden, başka bir buluttan). REST API tek seferlik ekran görüntüsü ve PDF gibi işler için daha pratiktir; karmaşık otomasyon için binding gerekir.
    Her istekte yeni tarayıcı açmak pahalı mı?
    Evet, ve maliyet optimizasyonunun ana konusu budur. Tarayıcı açmak hem süre hem eşzamanlı tarayıcı kotası tüketir. Oturumları yeniden kullanmak — bir tarayıcıyı açıp birden çok sayfa işlemek — hem gecikmeyi hem faturayı düşürür. Demo bölümünde bu farkı ölçüyoruz.
    Hangi özellikler beta?
    Doküman navigasyonunda beta rozeti taşıyanlar: Live View, Human in the Loop, Session recording, WebMCP, Chrome DevTools Protocol (CDP), /crawl, Playwright MCP, Stagehand ve Kitesurf. Ancak sayfa gövdelerinde yalnızca Session recording beta rozeti taşıyor; diğerleri hiçbir durum ifadesi taşımıyor — ne beta ne GA. Rozet olmamasından GA çıkarımı yapma.
    Lab oturumları üretimde kullanılabilir mi?
    Hayır. Resmî ifade: “Lab sessions are experimental and should not be used for production workloads.” Ayrıca lab parametresi @cloudflare/puppeteer ve @cloudflare/playwright paketlerinde henüz desteklenmiyor; oturumu elle alıp sessionId ile bağlanman gerekiyor.
    Sayfa kazıma yaparken hukuki sınır nedir?
    Cloudflare'in Kabul Edilebilir Kullanım Politikası geçerlidir ve kazıdığın sitenin kendi şartları da bağlayıcıdır. Teknik olarak mümkün olması hukuki olarak serbest olduğu anlamına gelmez: robots.txt, kullanım şartları, telif ve kişisel veri mevzuatı ayrı ayrı geçerlidir. Türkiye'den yapılan kazımada KVKK açısından kişisel veri toplanıp toplanmadığı ayrıca değerlendirilmelidir.
    Zaman aşımı ve oturum süresi sınırları neler?
    Oturumlar belirli bir hareketsizlik süresinden sonra kapanır ve tarayıcı süresi buna göre faturalanır. Uzun süren otomasyonlarda oturumu açık tutmak fatura yazar; işini bitirdiğinde tarayıcıyı kapatmak gerçek tasarruf sağlar.
    Workers CPU sınırına takılır mıyım?
    Tarayıcı Cloudflare tarafında ayrı çalışır, senin Worker'ının CPU süresini tüketmez. Ama Worker'ın tarayıcıdan yanıt beklerken açık kalır — Workers'ta bekleme süresi ücretlendirilmediği için bu bir sorun değildir. Asıl fatura tarayıcı saatinden gelir.
    Ekran görüntüsü alırken Türkçe karakterler bozuk çıkıyor.
    Headless Chrome image'ında bazı font ailelerinin eksik olması tipik sebeptir. Sayfada kullanılan fontu web font olarak yüklemek veya font-family zincirine yaygın bir yedek eklemek çoğu durumda çözer. Ekran görüntüsü almadan önce fontların yüklenmesini beklemek de gerekir.
    Bu ürün yapay zekâ ajanları için mi tasarlandı?
    Konumlandırma o yöne kaydı. Ürün sayfasının başlığı birebir şöyle: “Headless, programmable web browsers built for AI Agents.” Yeni özelliklerin çoğu — WebMCP, Human in the Loop, Live View, Stagehand — ajan senaryolarına yönelik. Klasik ekran görüntüsü ve PDF kullanımı desteklenmeye devam ediyor.

    İlgili servisler

    • WorkersJavaScript/TypeScript/Python kodunu Cloudflare’in 330+ şehirdeki sunucularında, sunucu yönetmeden çalıştırır.
    • ContainersDocker image’ını Cloudflare ağında çalıştırır; Workers’a sığmayan diller, gerçek filesystem ve ağır bağımlılıklar için.
    • SandboxesGüvenilmeyen kodu — özellikle LLM’in ürettiği kodu — izole bir Linux ortamında çalıştırır.
    • Workers AIAçık kaynak modelleri Cloudflare’in GPU’larında, API çağrısıyla çalıştırır.
    • R2S3 uyumlu object storage — çıkış (egress) trafiği ücretsiz.

    Bu sayfadaki fiyat ve özellik bilgileri 31 Ağustos 2026 tarihinde Cloudflare’in resmî kaynaklarından doğrulanmıştır. Cloudflare fiyatlandırmasını önceden haber vermeden değiştirebilir; bağlayıcı bilgi içinresmî sayfaya bakın.

    Hata bildir

    Yanlış bir rakam, eskimiş bir bilgi veya bozuk bir bağlantı mı buldun? Bildir, kaynağıyla birlikte kontrol edelim.