<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/">
	<channel>
		<title><![CDATA[BotBB - Web Otomasyonu, Bot Mimarileri ve Scraping Topluluğu - Sosyal Medya & Icerik Kazima]]></title>
		<link>https://botbb.tr/</link>
		<description><![CDATA[BotBB - Web Otomasyonu, Bot Mimarileri ve Scraping Topluluğu - https://botbb.tr]]></description>
		<pubDate>Mon, 19 Oct 2026 21:55:53 +0000</pubDate>
		<generator>MyBB</generator>
		<item>
			<title><![CDATA[[Rehber] Instagram & X (Twitter) Veri Kazıma: Oturum Yönetimi (Session/Cookie) ve Rate Limit Stratejileri]]></title>
			<link>https://botbb.tr/Thread-rehber-instagram-x-twitter-veri-kazima-oturum-yonetimi-session-cookie-ve-rate-limit-stratejileri</link>
			<pubDate>Tue, 20 Oct 2026 04:00:52 +0800</pubDate>
			<dc:creator><![CDATA[<a href="https://botbb.tr/member.php?action=profile&uid=1">admin</a>]]></dc:creator>
			<guid isPermaLink="false">https://botbb.tr/Thread-rehber-instagram-x-twitter-veri-kazima-oturum-yonetimi-session-cookie-ve-rate-limit-stratejileri</guid>
			<description><![CDATA[<span style="font-weight: bold;" class="mycode_b">Sosyal Medya &amp; İçerik Kazıma</span> projelerinde en sık karşılaşılan problem, platformların (Instagram, X/Twitter, TikTok vb.) anonim ziyaretçilere içerik göstermeyi kısıtlaması ve oturum açıldığında ise agresif bot tespit algoritmalarıyla hesapları askıya almasıdır.<br />
<br />
Bu rehberde, Puppeteer veya Playwright kullanırken oturumları (Cookies/Storage) tek seferde dışa aktarıp her döngüde yeniden giriş yapmadan oturumu ayağa kaldırma mimarisini ve ban yememek için uygulamanız gereken temel kuralları paylaşıyorum.<br />
<br />
<hr class="mycode_hr" />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">1. Neden Sürekli Kullanıcı Adı / Şifre ile Giriş Yapmamalıyız?</span></span><br />
<br />
Her scraping işlemi başladığında login formunu doldurmak şu riskleri doğurur:<ul class="mycode_list"><li>Aynı IP veya parmak izinden gelen sık login istekleri doğrudan <span style="font-weight: bold;" class="mycode_b">2FA / SMS Doğrulaması</span> veya <span style="font-weight: bold;" class="mycode_b">Hesap Kilitleme</span> tetikler.<br />
</li>
<li>Login sayfalarındaki Cloudflare, Arkose Labs veya reCAPTCHA gibi bot koruma duvarlarına takılma olasılığınız katlanarak artar.<br />
</li>
<li>Süreç gereksiz yere 10-15 saniye uzar ve kaynak tüketimi artar.<br />
</li>
</ul>
<br />
<span style="font-weight: bold;" class="mycode_b">Doğru Yaklaşım:</span> Oturumu bir kez manuel (veya yarı otomatik) açmak, tarayıcı çerezlerini (`cookies.json`) diske kaydetmek ve tüm veri kazıma işlemlerinde bu çerezleri sayfaya enjekte ederek doğrudan hedef profile/içeriğe gitmektir.<br />
<br />
<hr class="mycode_hr" />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">2. Node.js &amp; Puppeteer ile Cookie Tabanlı Oturum ve Kazıma Mimarisi</span></span><br />
<br />
Aşağıdaki hazır kod, önceden kaydedilmiş bir oturum dosyası (`session_cookies.json`) varsa doğrudan onu yükler; yoksa oturum açmanız için tarayıcıyı bekletip çerezleri otomatik olarak kaydeder.<br />
<br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code>const puppeteer = require('puppeteer');
const fs = require('fs');
const path = require('path');

const COOKIE_DOSYASI = path.join(__dirname, 'session_cookies.json');
const HEDEF_URL = 'https://www.instagram.com/explore/';

// İnsansı rastgele bekleme fonksiyonu (ms)
const bekle = (ms) =&gt; new Promise((resolve) =&gt; setTimeout(resolve, ms));

async function scrapingBaslat() {
  const browser = await puppeteer.launch({
    headless: false, // İlk çalıştırmada manuel oturum için görünür mod önerilir
    args: [
      '--no-sandbox',
      '--disable-setuid-sandbox',
      '--disable-blink-features=AutomationControlled' // WebDriver izini gizleme
    ]
  });

  const page = await browser.newPage();

  // Gerçekçi bir User-Agent tanımlayalım
  await page.setUserAgent(
    'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36'
  );

  // 1. ADIM: Kayıtlı çerez var mı kontrol et
  if (fs.existsSync(COOKIE_DOSYASI)) {
    console.log('[+] Mevcut oturum çerezleri bulundu, yükleniyor...');
    const cookiesJson = fs.readFileSync(COOKIE_DOSYASI, 'utf-8');
    const cookies = JSON.parse(cookiesJson);
    await page.setCookie(...cookies);
  } else {
    console.log('[!] Çerez dosyası bulunamadı. Lütfen açılan tarayıcıda manuel giriş yapın.');
    await page.goto('https://www.instagram.com/accounts/login/', { waitUntil: 'networkidle2' });

    // Kullanıcının manuel giriş yapıp ana akışa düşmesini bekliyoruz (Maksimum 2 dakika)
    await page.waitForNavigation({ waitUntil: 'networkidle2', timeout: 120000 });

    // Giriş tamamlandıktan sonra güncel çerezleri diske kaydediyoruz
    const guncelCerezler = await page.cookies();
    fs.writeFileSync(COOKIE_DOSYASI, JSON.stringify(guncelCerezler, null, 2));
    console.log('[+] Oturum başarıyla kaydedildi -&gt; session_cookies.json');
  }

  // 2. ADIM: Hedef sayfaya doğrudan git
  console.log(`[+] Hedefe gidiliyor: &#36;{HEDEF_URL}`);
  await page.goto(HEDEF_URL, { waitUntil: 'domcontentloaded' });

  // İnsansı gecikme verelim
  await bekle(3000 + Math.random() * 2000);

  // 3. ADIM: İçerik Kazıma Örneği (Görseller veya Post Metinleri)
  const veriler = await page.evaluate(() =&gt; {
    const sonuclar = [];
    // Sayfadaki gönderi bağlantılarını toplayalım
    const linkler = document.querySelectorAll('a[href*="/p/"]');
    linkler.forEach((a) =&gt; {
      sonuclar.push({
        postUrl: a.href,
        img: a.querySelector('img') ? a.querySelector('img').src : null
      });
    });
    return sonuclar;
  });

  console.log(`[+] Toplam &#36;{veriler.length} adet gönderi bağlantısı yakalandı.`);
  console.log(veriler.slice(0, 5)); // İlk 5 veriyi konsola yazdır

  await browser.close();
}

scrapingBaslat().catch(console.error);</code></div></div><br />
<hr class="mycode_hr" />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">3. Sosyal Medya Kazırken Ban Yememek İçin Altın Kurallar</span></span><br />
<br />
<ol type="1" class="mycode_list"><li><span style="font-weight: bold;" class="mycode_b">Scroll (Kaydırma) Hızını İnsansı Yapın:</span> Sayfanın dibine tek seferde `window.scrollTo(0, 999999)` şeklinde inmek %100 bot sinyalidir. Küçük adımlarla (`scrollBy(0, 400)`), aralara 400-800 ms rastgele gecikmeler koyarak kaydırın.<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">DOM Yerine Network / XHR İsteklerini Dinleyin:</span> Çoğu platform içerikleri arkada JSON API'ları üzerinden çeker (GraphQL / REST). DOM'daki sürekli değişen rastgele CSS sınıflarını (örneğin `.x1lliihq`) parse etmek yerine `page.on('response', ...)` kullanarak doğrudan gelen temiz JSON verisini yakalamak kodu kırılmalara karşı ölümsüz yapar.<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">Mobil Endpoint Stratejisi:</span> Masaüstü arayüzler ağır JavaScript ve bot korumaları içerir. Mobil User-Agent ve mobil endpoint'ler (örneğin `m.facebook.com` veya `mbasic`) çok daha hafif DOM ve daha toleranslı rate limit sunar.<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">Residential (Konut) Proxy Kullanımı:</span> Veri merkezi (Datacenter / AWS / DigitalOcean) IP'leri doğrudan işaretlenir. Ciddi hacimli taramalarda döngü başına IP değiştiren döner konut proxyleri kullanmak şarttır.<br />
</li>
</ol>
<br />
Sizin sosyal medya projelerinde en sık karşılaştığınız bot engeli hangisi? Karşılaştığınız özel bir selector veya rate limit senaryosu varsa konu altında tartışalım.]]></description>
			<content:encoded><![CDATA[<span style="font-weight: bold;" class="mycode_b">Sosyal Medya &amp; İçerik Kazıma</span> projelerinde en sık karşılaşılan problem, platformların (Instagram, X/Twitter, TikTok vb.) anonim ziyaretçilere içerik göstermeyi kısıtlaması ve oturum açıldığında ise agresif bot tespit algoritmalarıyla hesapları askıya almasıdır.<br />
<br />
Bu rehberde, Puppeteer veya Playwright kullanırken oturumları (Cookies/Storage) tek seferde dışa aktarıp her döngüde yeniden giriş yapmadan oturumu ayağa kaldırma mimarisini ve ban yememek için uygulamanız gereken temel kuralları paylaşıyorum.<br />
<br />
<hr class="mycode_hr" />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">1. Neden Sürekli Kullanıcı Adı / Şifre ile Giriş Yapmamalıyız?</span></span><br />
<br />
Her scraping işlemi başladığında login formunu doldurmak şu riskleri doğurur:<ul class="mycode_list"><li>Aynı IP veya parmak izinden gelen sık login istekleri doğrudan <span style="font-weight: bold;" class="mycode_b">2FA / SMS Doğrulaması</span> veya <span style="font-weight: bold;" class="mycode_b">Hesap Kilitleme</span> tetikler.<br />
</li>
<li>Login sayfalarındaki Cloudflare, Arkose Labs veya reCAPTCHA gibi bot koruma duvarlarına takılma olasılığınız katlanarak artar.<br />
</li>
<li>Süreç gereksiz yere 10-15 saniye uzar ve kaynak tüketimi artar.<br />
</li>
</ul>
<br />
<span style="font-weight: bold;" class="mycode_b">Doğru Yaklaşım:</span> Oturumu bir kez manuel (veya yarı otomatik) açmak, tarayıcı çerezlerini (`cookies.json`) diske kaydetmek ve tüm veri kazıma işlemlerinde bu çerezleri sayfaya enjekte ederek doğrudan hedef profile/içeriğe gitmektir.<br />
<br />
<hr class="mycode_hr" />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">2. Node.js &amp; Puppeteer ile Cookie Tabanlı Oturum ve Kazıma Mimarisi</span></span><br />
<br />
Aşağıdaki hazır kod, önceden kaydedilmiş bir oturum dosyası (`session_cookies.json`) varsa doğrudan onu yükler; yoksa oturum açmanız için tarayıcıyı bekletip çerezleri otomatik olarak kaydeder.<br />
<br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code>const puppeteer = require('puppeteer');
const fs = require('fs');
const path = require('path');

const COOKIE_DOSYASI = path.join(__dirname, 'session_cookies.json');
const HEDEF_URL = 'https://www.instagram.com/explore/';

// İnsansı rastgele bekleme fonksiyonu (ms)
const bekle = (ms) =&gt; new Promise((resolve) =&gt; setTimeout(resolve, ms));

async function scrapingBaslat() {
  const browser = await puppeteer.launch({
    headless: false, // İlk çalıştırmada manuel oturum için görünür mod önerilir
    args: [
      '--no-sandbox',
      '--disable-setuid-sandbox',
      '--disable-blink-features=AutomationControlled' // WebDriver izini gizleme
    ]
  });

  const page = await browser.newPage();

  // Gerçekçi bir User-Agent tanımlayalım
  await page.setUserAgent(
    'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36'
  );

  // 1. ADIM: Kayıtlı çerez var mı kontrol et
  if (fs.existsSync(COOKIE_DOSYASI)) {
    console.log('[+] Mevcut oturum çerezleri bulundu, yükleniyor...');
    const cookiesJson = fs.readFileSync(COOKIE_DOSYASI, 'utf-8');
    const cookies = JSON.parse(cookiesJson);
    await page.setCookie(...cookies);
  } else {
    console.log('[!] Çerez dosyası bulunamadı. Lütfen açılan tarayıcıda manuel giriş yapın.');
    await page.goto('https://www.instagram.com/accounts/login/', { waitUntil: 'networkidle2' });

    // Kullanıcının manuel giriş yapıp ana akışa düşmesini bekliyoruz (Maksimum 2 dakika)
    await page.waitForNavigation({ waitUntil: 'networkidle2', timeout: 120000 });

    // Giriş tamamlandıktan sonra güncel çerezleri diske kaydediyoruz
    const guncelCerezler = await page.cookies();
    fs.writeFileSync(COOKIE_DOSYASI, JSON.stringify(guncelCerezler, null, 2));
    console.log('[+] Oturum başarıyla kaydedildi -&gt; session_cookies.json');
  }

  // 2. ADIM: Hedef sayfaya doğrudan git
  console.log(`[+] Hedefe gidiliyor: &#36;{HEDEF_URL}`);
  await page.goto(HEDEF_URL, { waitUntil: 'domcontentloaded' });

  // İnsansı gecikme verelim
  await bekle(3000 + Math.random() * 2000);

  // 3. ADIM: İçerik Kazıma Örneği (Görseller veya Post Metinleri)
  const veriler = await page.evaluate(() =&gt; {
    const sonuclar = [];
    // Sayfadaki gönderi bağlantılarını toplayalım
    const linkler = document.querySelectorAll('a[href*="/p/"]');
    linkler.forEach((a) =&gt; {
      sonuclar.push({
        postUrl: a.href,
        img: a.querySelector('img') ? a.querySelector('img').src : null
      });
    });
    return sonuclar;
  });

  console.log(`[+] Toplam &#36;{veriler.length} adet gönderi bağlantısı yakalandı.`);
  console.log(veriler.slice(0, 5)); // İlk 5 veriyi konsola yazdır

  await browser.close();
}

scrapingBaslat().catch(console.error);</code></div></div><br />
<hr class="mycode_hr" />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">3. Sosyal Medya Kazırken Ban Yememek İçin Altın Kurallar</span></span><br />
<br />
<ol type="1" class="mycode_list"><li><span style="font-weight: bold;" class="mycode_b">Scroll (Kaydırma) Hızını İnsansı Yapın:</span> Sayfanın dibine tek seferde `window.scrollTo(0, 999999)` şeklinde inmek %100 bot sinyalidir. Küçük adımlarla (`scrollBy(0, 400)`), aralara 400-800 ms rastgele gecikmeler koyarak kaydırın.<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">DOM Yerine Network / XHR İsteklerini Dinleyin:</span> Çoğu platform içerikleri arkada JSON API'ları üzerinden çeker (GraphQL / REST). DOM'daki sürekli değişen rastgele CSS sınıflarını (örneğin `.x1lliihq`) parse etmek yerine `page.on('response', ...)` kullanarak doğrudan gelen temiz JSON verisini yakalamak kodu kırılmalara karşı ölümsüz yapar.<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">Mobil Endpoint Stratejisi:</span> Masaüstü arayüzler ağır JavaScript ve bot korumaları içerir. Mobil User-Agent ve mobil endpoint'ler (örneğin `m.facebook.com` veya `mbasic`) çok daha hafif DOM ve daha toleranslı rate limit sunar.<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">Residential (Konut) Proxy Kullanımı:</span> Veri merkezi (Datacenter / AWS / DigitalOcean) IP'leri doğrudan işaretlenir. Ciddi hacimli taramalarda döngü başına IP değiştiren döner konut proxyleri kullanmak şarttır.<br />
</li>
</ol>
<br />
Sizin sosyal medya projelerinde en sık karşılaştığınız bot engeli hangisi? Karşılaştığınız özel bir selector veya rate limit senaryosu varsa konu altında tartışalım.]]></content:encoded>
		</item>
	</channel>
</rss>