Bloga geri dön

JavaScript Render Proxy ile Ayrıştırma Sorunlarının Çözümü

JavaScript, botlardan koruma ve içeriği gizlemek için sıklıkla kullanılır. Proxy sunucuların dinamik render işlemiyle başa çıkmaya ve veri toplama işlemini otomatikleştirmeye nasıl yardımcı olduğunu öğrenin.

📅4 Aralık 2025
```html

JavaScript Proxy Aracılığıyla Render Etme: Parsing Sorunlarına Çözümler

Modern web siteleri içeriği yüklemek için JavaScript'i aktif olarak kullanır. Bu, otomasyon sırasında sorunlar yaratır: sıradan HTTP istekleri veri yerine boş bir sayfa döndürür. Proxy sunucularının bu görevi nasıl çözdüğünü ve bunun için hangi araçları kullanacağınızı anlatıyoruz.

JavaScript Render Etme Sorunu Nedir

requests veya curl kullanarak bir web sitesine sıradan GET isteği gönderdiğinizde, tarayıcı boş konteynerlerle dolu bir HTML dosyası alır. Gerçek içerik daha sonra JavaScript aracılığıyla yüklenir:

  • Dinamik veri yükleme — içerik sayfa yüklendikten sonra AJAX istekleri aracılığıyla gelir
  • Single Page Applications (SPA) — React, Vue, Angular tüm içeriği istemci tarafında render eder
  • Botlardan koruma — siteler bunun gerçek bir tarayıcı olduğunu kontrol etmek için JavaScript'i kasıtlı olarak kullanır
  • Tembel yükleme (lazy loading) — resimler ve metin sadece kaydırıldığında yüklenir

Sonuç: parser boş bir sayfa görür, oysa tarayıcıda her şey normal şekilde görüntülenir. Buna render etme sorunu denir.

Proxy'ler Neden Yardımcı Olur

Proxy'ler kendi başlarına JavaScript render etmez. Ancak iki kritik sorunu çözerler:

1. IP Tabanlı Blokajları Aşma

Siteler otomatik istekleri IP adresine göre engeller. Tek bir IP'den yüzlerce istek gönderirseniz, sunucu sizi yasaklar. Proxy gerçek IP'nizi gizler ve istekleri farklı adresler aracılığıyla dağıtır. Bu, tarayıcı otomasyonu aracının (Selenium, Puppeteer) blokajsız çalışmasını sağlar.

2. Gerçek Tarayıcı Taklit Etme

Proxy'yi Puppeteer veya Selenium gibi araçlarla birlikte kullandığınızda, sistem gerçek bir tarayıcı gibi görünür. Bu, bot kontrollerini geçmeye ve tamamen render edilmiş HTML almaya yardımcı olur.

Önemli nokta: proxy + tarayıcı otomasyonu = blokajsız tam JavaScript render etme.

Hangi Proxy'leri Kullanmalı

JavaScript render etme için farklı proxy türleri uygun. Seçim görevin türüne bağlıdır:

Proxy Türü Hız Maliyet Ne Zaman Kullanılır
Veri Merkezi Çok yüksek Düşük Test etme, kendi sitelerinizi parse etme, yüksek hacimler
Konut Orta Yüksek Anti-bot sistemlerini aşma, korumalı siteler, rakip izleme
Mobil Orta Yüksek Mobil uygulamalar, mobil parsing, SMM otomasyonu

JavaScript render etme için önerilen: test etmek için veri merkezi proxy'leriyle başlayın, ardından site otomatik istekleri engelliyorsa konut proxy'lerine geçin.

JavaScript Render Etme Araçları

Puppeteer

Chromium tabanlı headless tarayıcı. Otomasyon ve parsing için idealdir. Proxy'lerle yapılandırma parametresi aracılığıyla çalışır.

Selenium

Web otomasyonu için evrensel araç. Farklı tarayıcıları (Chrome, Firefox, Edge) destekler ve proxy'lerle kolayca entegre olur.

Playwright

Puppeteer'ın modern alternatifi Chromium, Firefox ve WebKit desteğiyle. Tarayıcılar arası test etme için iyi bir seçim.

Splash (Scrapy)

Hafif JavaScript render etme hizmeti. Yerel olarak dağıtabilir veya bulut sürümünü kullanabilirsiniz.

Kod Örnekleri ile Pratik Uygulama

Örnek 1: Proxy ile Puppeteer

const puppeteer = require('puppeteer');

(async () => {
  const browser = await puppeteer.launch({
    args: [
      '--proxy-server=http://proxy-server:port'
    ]
  });

  const page = await browser.newPage();
  
  // Kimlik doğrulama gerekliyse proxy kimlik bilgilerini ayarlayın
  await page.authenticate({
    username: 'user',
    password: 'pass'
  });

  await page.goto('https://example.com', {
    waitUntil: 'networkidle2'
  });

  const content = await page.content();
  console.log(content);

  await browser.close();
})();

Ne olur:

  • --proxy-server — proxy sunucusunu belirtir
  • page.authenticate() — proxy için kimlik bilgilerini iletir
  • waitUntil: 'networkidle2' — tüm kaynakların tam yüklenmesini bekler

Örnek 2: Python'da Proxy ile Selenium

from selenium import webdriver
from selenium.webdriver.common.proxy import Proxy, ProxyType

proxy = Proxy()
proxy.proxy_type = ProxyType.MANUAL
proxy.http_proxy = "proxy-server:port"
proxy.ssl_proxy = "proxy-server:port"

options = webdriver.ChromeOptions()
options.add_argument('--start-maximized')

capabilities = webdriver.DesiredCapabilities.CHROME
proxy.add_to_capabilities(capabilities)

driver = webdriver.Chrome(
  desired_capabilities=capabilities,
  options=options
)

driver.get('https://example.com')
content = driver.page_source
print(content)

driver.quit()

Örnek 3: Dinamik İçeriği İşleme

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

# Proxy ile başlatma
driver = webdriver.Chrome()
driver.get('https://example.com')

# Öğenin yüklenmesini bekleyin (10 saniyeye kadar)
element = WebDriverWait(driver, 10).until(
  EC.presence_of_element_located((By.CLASS_NAME, "dynamic-content"))
)

# Render edildikten sonra metni çıkarın
data = element.text
print(data)

driver.quit()

İpucu: time.sleep() yerine WebDriverWait kullanın — daha güvenilir ve hızlıdır.

En İyi Uygulamalar

1. Proxy Döndürme

Tüm istekler için aynı proxy'yi kullanmayın. Blokajı önlemek için IP adreslerini değiştirin:

import random

proxies = [
  'http://proxy1:port',
  'http://proxy2:port',
  'http://proxy3:port'
]

selected_proxy = random.choice(proxies)
# Her istek için selected_proxy'yi kullanın

2. User-Agent

Farklı tarayıcılar gibi görünmek için User-Agent'ı değiştirin:

options = webdriver.ChromeOptions()
options.add_argument('user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36')

3. İstekler Arasında Gecikmeler

İnsan davranışını taklit etmek için rastgele gecikmeler ekleyin:

import time
import random

time.sleep(random.uniform(2, 5))  # 2-5 saniye gecikme

4. Hata İşleme

Her zaman istisnaları yakala ve sorunları kaydet:

try:
  driver.get(url)
  content = driver.page_source
except Exception as e:
  print(f'Hata: {e}')
  # Başka bir proxy'ye geçin veya yeniden deneyin

5. Tarayıcıyı Kapatma

Kaynakları serbest bırakmak için kullanımdan sonra tarayıcıyı kapatın:

try:
  # Kodunuz
finally:
  driver.quit()  # Hata durumunda bile kapatmayı garantiler

Özet

JavaScript render etme sadece teknik bir zorluk değil, modern web'de bir gerekliliktir. Hatırlamanız gerekenler:

  • Sorun: sıradan parser'lar JavaScript aracılığıyla yüklenen dinamik içeriği görmez
  • Çözüm: tarayıcı otomasyonu (Puppeteer, Selenium) + proxy sunucusu
  • Proxy seçimi: test etme için veri merkezi, korumalı siteler için konut proxy'leri
  • En iyi uygulamalar: IP döndürme, gecikmeler, hata işleme, User-Agent

Tarayıcı otomasyonu ve proxy sunucusunun kombinasyonu, en karmaşık sitelerden bile güvenilir bir şekilde veri toplamaya olanak tanır. Araç seçerken görevin ölçeğini göz önünde bulundurun: küçük projeler için Puppeteer uygun, büyük projeler için Selenium veya özel çözümler daha iyi.

Anti-bot sistemlerini güvenilir bir şekilde aşmak ve ölçekli parsing için konut proxy'leri kullanılması önerilir — gerçek kullanıcılar gibi görünür ve blokajları önlemeye yardımcı olur.

```