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 belirtirpage.authenticate()— proxy için kimlik bilgilerini iletirwaitUntil: '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.