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
| Binding | REST API | |
|---|---|---|
| Nereden | Worker içinden | Her yerden |
| Gecikme | Düşük | Ağ turu ekler |
| Oturum kontrolü | Tam | Sınırlı |
| Uygun olduğu iş | Karmaşık otomasyon | Tek 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" }
}
Adım 2 — İlk ekran görüntüsü
curl "http://localhost:8787/?url=https://example.com" -o ekran.png
Adım 3 — Türkçe karakter testi
Türkçe metin içeren bir sayfanın PDF’ini üret ve ı ğ ş ç ö ü İ karakterlerini kontrol et.
Adım 4 — Yayına al ve panelde izle
npx wrangler deploy
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.
Adım 2 — Tek tarayıcı, çok sayfa
Aynı 10 URL’i tek tarayıcı üzerinden işle.
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.
Adım 4 — Günlük kotayı izle
Ölçüm
| Ölçüt | Her 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ı saati | Günde 10 dakika | Ayda 10 saat dahil, sonrası 0,09 USD / saat |
| Eşzamanlı tarayıcı | 3 | 10 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.txtve 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/planssayfası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/puppeteerve@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
labparametresi@cloudflare/puppeteerve@cloudflare/playwrightpaketlerinde henüz desteklenmiyor; oturumu elle alıpsessionIdile 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-familyzincirine 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.