Use Cases

Node.js ile CAPTCHA Kazıma: Eğitimin Tamamı

Node.js, I/O-heavy iş yüklerini kazıma konusunda üstündür. Hedef siteler CAPTCHA'lar sunduğunda, CaptchaAI'nin API'si bunları çözerken, komut dosyanız HTTP isteklerini yönetir. Bu eğitim, axios ve Cheerio'yu kullanarak iş akışının tamamını kapsar.

Gereksinimler

Gereksinim Ayrıntılar
Node.js 16+ npm ile
eksenler npm install axios
tezahürat npm install cheerio
CaptchaAI API anahtarı İtibarencaptchaai.com

CaptchaAI Çözücü Modülü

// captcha-solver.js
const axios = require("axios");

class CaptchaSolver {
  constructor(apiKey) {
    this.apiKey = apiKey;
    this.baseUrl = "https://ocr.captchaai.com";
  }

  async _submit(params) {
    params.key = this.apiKey;
    const resp = await axios.get(`${this.baseUrl}/in.php`, { params });
    if (!resp.data.startsWith("OK|")) {
      throw new Error(`Submit error: ${resp.data}`);
    }
    return resp.data.split("|")[1];
  }

  async _poll(taskId, timeout = 300000) {
    const deadline = Date.now() + timeout;
    while (Date.now() < deadline) {
      await new Promise((r) => setTimeout(r, 5000));
      const resp = await axios.get(`${this.baseUrl}/res.php`, {
        params: { key: this.apiKey, action: "get", id: taskId },
      });
      if (resp.data === "CAPCHA_NOT_READY") continue;
      if (resp.data.startsWith("OK|")) return resp.data.split("|")[1];
      throw new Error(`Solve error: ${resp.data}`);
    }
    throw new Error("Solve timed out");
  }

  async solveRecaptchaV2(siteKey, pageUrl) {
    const taskId = await this._submit({
      method: "userrecaptcha",
      googlekey: siteKey,
      pageurl: pageUrl,
    });
    return this._poll(taskId);
  }

  async solveRecaptchaV3(siteKey, pageUrl, action = "verify") {
    const taskId = await this._submit({
      method: "userrecaptcha",
      googlekey: siteKey,
      pageurl: pageUrl,
      version: "v3",
      action,
    });
    return this._poll(taskId);
  }

  async solveTurnstile(siteKey, pageUrl) {
    const taskId = await this._submit({
      method: "turnstile",
      sitekey: siteKey,
      pageurl: pageUrl,
    });
    return this._poll(taskId);
  }
}

module.exports = CaptchaSolver;

reCAPTCHA Korumalı Sayfayı Kazıma

const axios = require("axios");
const cheerio = require("cheerio");
const CaptchaSolver = require("./captcha-solver");

const solver = new CaptchaSolver("YOUR_API_KEY");

async function scrapeProtectedPage(url) {
  // Step 1: Load the page
  const { data: html } = await axios.get(url, {
    headers: {
      "User-Agent":
        "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36",
    },
  });

  const $ = cheerio.load(html);

  // Step 2: Extract site key
  const siteKey = $(".g-recaptcha").attr("data-sitekey");
  if (!siteKey) {
    console.log("No CAPTCHA found, page loaded directly");
    return html;
  }

  console.log("Site key found:", siteKey);

  // Step 3: Solve the CAPTCHA
  const token = await solver.solveRecaptchaV2(siteKey, url);
  console.log("Token received:", token.substring(0, 50));

  // Step 4: Submit with the token
  const result = await axios.post(
    url,
    new URLSearchParams({
      "g-recaptcha-response": token,
      q: "search query",
    }),
    {
      headers: {
        "Content-Type": "application/x-www-form-urlencoded",
        "User-Agent":
          "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36",
      },
    }
  );

  return result.data;
}

Aynı Anda Birden Fazla Sayfayı Kazımak

async function scrapePages(urls, siteKey, concurrency = 3) {
  const results = [];
  const queue = [...urls];

  const worker = async () => {
    while (queue.length > 0) {
      const url = queue.shift();
      try {
        const token = await solver.solveRecaptchaV2(siteKey, url);
        const { data } = await axios.post(
          url,
          new URLSearchParams({ "g-recaptcha-response": token }),
          {
            headers: {
              "User-Agent":
                "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36",
            },
          }
        );
        results.push({ url, data, success: true });
        console.log(`Scraped: ${url}`);
      } catch (err) {
        results.push({ url, error: err.message, success: false });
        console.error(`Failed: ${url} - ${err.message}`);
      }
    }
  };

  // Run workers concurrently
  const workers = Array(concurrency)
    .fill(null)
    .map(() => worker());
  await Promise.all(workers);

  return results;
}

// Usage
const urls = [
  "https://example.com/page/1",
  "https://example.com/page/2",
  "https://example.com/page/3",
];
const results = await scrapePages(urls, "6Le-wvkS...", 3);

Çerezleri ve Oturumları Yönetme

Oturum çerezleri gerektiren siteler için çerez kalıcılığı olan axios'u kullanın:

const { wrapper } = require("axios-cookiejar-support");
const { CookieJar } = require("tough-cookie");

const jar = new CookieJar();
const client = wrapper(
  axios.create({
    jar,
    headers: {
      "User-Agent":
        "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36",
    },
  })
);

async function scrapeWithSession(url, siteKey) {
  // Initial page load sets cookies
  await client.get(url);

  // Solve CAPTCHA
  const token = await solver.solveRecaptchaV2(siteKey, url);

  // Submit with maintained cookies
  const result = await client.post(
    url,
    new URLSearchParams({ "g-recaptcha-response": token })
  );

  return result.data;
}

Sonuçları Cheerio ile Ayrıştırma

function parseResults(html) {
  const $ = cheerio.load(html);
  const items = [];

  $(".result-item").each((_, el) => {
    items.push({
      title: $(el).find(".title").text().trim(),
      url: $(el).find("a").attr("href"),
      description: $(el).find(".description").text().trim(),
    });
  });

  return items;
}

Sorun giderme

Sorun Sebep Düzeltme
CAPTCHA_NOT_READY süresiz olarak döngüye giriyor Yanlış site anahtarı veya yavaş çözüm Site anahtarını doğrulayın; zaman aşımını artır
POST'ta 403 Forbidden Eksik çerezler veya başlıklar Oturum çerezlerini kullanın; Referer başlığı ekle
Cheerio öğeleri bulamıyor Dinamik içerik JS ile oluşturulan siteler için Puppeteer'ı kullanın
ECONNREFUSED Oran hedef siteye göre sınırlı Gecikmeler ekleyin; proxy'leri döndür

SSS

Axios yerine Puppeteer'ı ne zaman kullanmalıyım?

Hedef site standart form gönderimleriyle HTML döndürdüğünde axios + Cheerio'yu kullanın. Site JavaScript yürütme, dinamik oluşturma veya karmaşık kullanıcı etkileşimleri gerektirdiğinde Puppeteer'ı kullanın.

Aynı anda birden fazla CAPTCHA çözebilir miyim?

Evet. Birden fazla CAPTCHA görevini aynı anda CaptchaAI'ye gönderin ve her sonuç için anket yapın. Yukarıdaki eş zamanlı kazıma örneği bu modeli göstermektedir.

Cloudflare korumalı siteleri nasıl yönetirim?

Site Turnstile kullanıyorsa solver.solveTurnstile() kullanın. Cloudflare meydan okuma sayfalarının tamamı için şunu kullanın:Cloudflare doğrulama akışı çözmeqa_session_cookie çerezlerini döndüren.

İlgili Kılavuzlar

Bu makale için yorumlar devre dışı bırakılmıştır.

İlgili Yazılar

Integrations Bright Data + CaptchaAI: Eksiksiz Proxy Entegrasyon Kılavuzu
Bright Data + Captcha AI entegrasyon kılavuzu: Eksiksiz Proxy Entegrasyon Kılavuzu, kurulum, kod örnekleri ve Captcha AI'ye bağlanmak için açık bir yol.

Bright Data + Captcha AI entegrasyon kılavuzu: Eksiksiz Proxy Entegrasyon Kılavuzu, kurulum, kod örnekleri ve...

Apr 27, 2026
Comparisons Bot Tespiti ve CAPTCHA Kazıma Karşılaştırması — Bilmeniz Gerekenler
Bot Tespiti ve CAPTCHA Kazıma Karşılaştırması — Bilmeniz Gerekenler'in pratik karşılaştırması, Captcha AI etrafındaki maliyet, doğruluk, hız ve entegrasyon çaba...

Bot Tespiti ve CAPTCHA Kazıma Karşılaştırması — Bilmeniz Gerekenler'in pratik karşılaştırması, Captcha AI etra...

Apr 27, 2026
Use Cases CAPTCHA Çözme ile Akademik Araştırma Web Scraping
Gerçekçi senaryolar, iş akışı tavsiyeleri ve Captcha AI kullanılarak uygulanabilir adımlarla CAPTCHA Çözme ile Akademik Araştırma Web Scraping için pratik kılav...

Gerçekçi senaryolar, iş akışı tavsiyeleri ve Captcha AI kullanılarak uygulanabilir adımlarla CAPTCHA Çözme ile...

Apr 18, 2026