Kullanım Senaryoları

Oyun Yazarı CAPTCHA'nın CaptchaAI ile Kullanımı

Playwright, Chromium, Firefox ve WebKit'te güvenilir tarayıcı otomasyonu sağlar. Hedef sayfalar CAPTCHA'lara hizmet ettiğinde CaptchaAI bunları sunucu tarafında çözerken Oyun Yazarı tarayıcı etkileşimini yönetir.

Gereksinimler

Gereksinim Ayrıntılar
Python pip install playwright requests sonra playwright install
Node.js npm install playwright axios
CaptchaAI API anahtarı İtibarencaptchaai.com

Python: Oyun Yazarı + CaptchaAI

Kurulum

from playwright.sync_api import sync_playwright
import requests
import time

API_KEY = "YOUR_API_KEY"

def solve_recaptcha(site_key, page_url):
    resp = requests.get("https://ocr.captchaai.com/in.php", params={
        "key": API_KEY,
        "method": "userrecaptcha",
        "googlekey": site_key,
        "pageurl": page_url
    })
    if not resp.text.startswith("OK|"):
        raise Exception(resp.text)
    task_id = resp.text.split("|")[1]

    for _ in range(60):
        time.sleep(5)
        result = requests.get("https://ocr.captchaai.com/res.php", params={
            "key": API_KEY, "action": "get", "id": task_id
        })
        if result.text == "CAPCHA_NOT_READY": continue
        if result.text.startswith("OK|"): return result.text.split("|")[1]
        raise Exception(result.text)
    raise TimeoutError()

Tam Örnek

def login_with_captcha(url, username, password):
    with sync_playwright() as p:
        browser = p.chromium.launch(headless=True)
        context = browser.new_context(
            user_agent="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36"
        )
        page = context.new_page()
        page.goto(url)

        # Fill login form
        page.fill("#username", username)
        page.fill("#password", password)

        # Check for reCAPTCHA
        recaptcha = page.query_selector(".g-recaptcha")
        if recaptcha:
            site_key = recaptcha.get_attribute("data-sitekey")
            print(f"Solving reCAPTCHA: {site_key}")

            token = solve_recaptcha(site_key, page.url)

            # Inject token
            page.evaluate(f"""
                document.getElementById('g-recaptcha-response').innerHTML = '{token}';
                document.getElementById('g-recaptcha-response').style.display = '';
            """)

        # Submit
        page.click('button[type="submit"]')
        page.wait_for_load_state("networkidle")

        print(f"Current URL: {page.url}")
        content = page.content()

        browser.close()
        return content

result = login_with_captcha(
    "https://staging.example.com/qa-login",
    "user@example.com",
    "password123"
)

Eşzamansız Sürüm

from playwright.async_api import async_playwright
import aiohttp
import asyncio

async def solve_recaptcha_async(site_key, page_url):
    async with aiohttp.ClientSession() as session:
        params = {
            "key": API_KEY, "method": "userrecaptcha",
            "googlekey": site_key, "pageurl": page_url
        }
        async with session.get("https://ocr.captchaai.com/in.php", params=params) as resp:
            text = await resp.text()
            task_id = text.split("|")[1]

        for _ in range(60):
            await asyncio.sleep(5)
            params = {"key": API_KEY, "action": "get", "id": task_id}
            async with session.get("https://ocr.captchaai.com/res.php", params=params) as resp:
                text = await resp.text()
                if text == "CAPCHA_NOT_READY": continue
                if text.startswith("OK|"): return text.split("|")[1]
                raise Exception(text)
        raise TimeoutError()

async def main():
    async with async_playwright() as p:
        browser = await p.chromium.launch(headless=True)
        page = await browser.new_page()
        await page.goto("https://example.com/form")

        site_key = await page.get_attribute(".g-recaptcha", "data-sitekey")
        token = await solve_recaptcha_async(site_key, page.url)

        await page.evaluate(f"document.getElementById('g-recaptcha-response').innerHTML = '{token}'")
        await page.click('button[type="submit"]')
        await browser.close()

asyncio.run(main())

Node.js: Oyun Yazarı + CaptchaAI

const { chromium } = require("playwright");
const axios = require("axios");

const API_KEY = "YOUR_API_KEY";

async function solveRecaptcha(siteKey, pageUrl) {
  const submit = await axios.get("https://ocr.captchaai.com/in.php", {
    params: {
      key: API_KEY,
      method: "userrecaptcha",
      googlekey: siteKey,
      pageurl: pageUrl,
    },
  });
  const taskId = submit.data.split("|")[1];

  while (true) {
    await new Promise((r) => setTimeout(r, 5000));
    const result = await axios.get("https://ocr.captchaai.com/res.php", {
      params: { key: API_KEY, action: "get", id: taskId },
    });
    if (result.data === "CAPCHA_NOT_READY") continue;
    if (result.data.startsWith("OK|")) return result.data.split("|")[1];
    throw new Error(result.data);
  }
}

(async () => {
  const browser = await chromium.launch({ headless: true });
  const page = await browser.newPage();
  await page.goto("https://staging.example.com/qa-login");

  // Fill form
  await page.fill("#username", "user@example.com");
  await page.fill("#password", "password123");

  // Solve CAPTCHA
  const siteKey = await page.getAttribute(".g-recaptcha", "data-sitekey");
  if (siteKey) {
    const token = await solveRecaptcha(siteKey, page.url());
    await page.evaluate(
      (t) => (document.getElementById("g-recaptcha-response").innerHTML = t),
      token
    );
  }

  // Submit
  await page.click('button[type="submit"]');
  await page.waitForLoadState("networkidle");

  console.log("Logged in:", page.url());
  await browser.close();
})();

Cloudflare Turnstile'yi Kullanma

# Detect Turnstile
turnstile = page.query_selector(".cf-turnstile")
if turnstile:
    site_key = turnstile.get_attribute("data-sitekey")

    resp = requests.get("https://ocr.captchaai.com/in.php", params={
        "key": API_KEY, "method": "turnstile",
        "sitekey": site_key, "pageurl": page.url
    })
    task_id = resp.text.split("|")[1]

    # Poll and inject...

Oyun Yazarı vs Selenyum vs Puppeteer

Özellik Oyun yazarı Selenyum Puppeteer
Diller Python, Node.js, C#, Java Python, Java, C#, Yakut, JS Node.js
Tarayıcılar Krom, Firefox, WebKit Chrome, Firefox, Edge, Safari Krom
Otomatik bekle ✅ Yerleşik ⏳ Manuel beklemeler ⚠️ Kısmi
Ağ müdahalesi Sınırlı
CaptchaAI entegrasyonu ✅ Aynı API ✅ Aynı API ✅ Aynı API

CaptchaAI üçüyle de aynı şekilde çalışır; site anahtarını çıkarın, API aracılığıyla çözün, jetonu enjekte edin.

Sorun giderme

Sorun Düzeltme
page.query_selector null değerini döndürür CAPTCHA dinamik olarak yüklenir; page.wait_for_selector()'yi kullanın
Jeton enjeksiyonu çalışmıyor Yanıt metin alanının farklı bir kimliğe sahip olup olmadığını kontrol edin
Oyun yazarı Docker'da çöküyor Tarayıcı bağımlılıklarını yükleyin: playwright install-deps
CAPTCHA çözüldükten sonra yeniden görünüyor Site geri aramanın yürütülmesini gerektirebilir; page.evaluate() aracılığıyla tetikleyin

SSS

Oyun Yazarının otomatik bekleme özelliği CAPTCHA'larda yardımcı olur mu?

Oyun yazarının otomatik bekleme özelliği, öğelerin etkileşimden önce görünür olmasını sağlar ancak CAPTCHA'ları çözmez. Gerçek çözüm için CaptchaAI'ye ihtiyacınız var.

Playwright'ı tüm CAPTCHA türleriyle kullanabilir miyim?

Evet. CaptchaAI, API aracılığıyla çözme işlemini gerçekleştiriyor; Oyun Yazarının yalnızca site anahtarını çıkarması ve jetonu enjekte etmesi gerekiyor. Bu, reCAPTCHA, Turnstile, hCaptcha ve desteklenen tüm diğer türler için geçerlidir.

Oyun Yazarı CAPTCHA otomasyonu için Selenium'dan daha mı iyi?

Playwright'ın yerleşik otomatik bekleme özelliği ve daha iyi API tasarımı, CAPTCHA iş akışlarını daha güvenilir hale getirir. CaptchaAI entegrasyonu her ikisi için de aynıdır.

İlgili Kılavuzlar

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