Use Cases

CAPTCHA İşleme ile Otomatik Form Gönderimi

Selenium ve CaptchaAI'yi kullanarak CAPTCHA zorluklarını içeren form gönderimlerini otomatikleştirin.


Mücadele

CAPTCHA'lar tarafından korunan web formları otomasyonu engeller. İster iletişim formlarını test ediyor, ister başvuru gönderiyor, ister QA iş akışlarını çalıştırıyor olun, formun gönderiminizi kabul etmesinden önce CAPTCHA'yı çözmeniz gerekir.


Mimarlık

┌────────────┐     ┌──────────────┐     ┌────────────┐     ┌──────────────┐
│ Load Form  │────▶│ Fill Fields  │────▶│ Detect &   │────▶│ Submit Form  │
│ (Selenium) │     │              │     │ Solve      │     │              │
│            │     │              │     │ CAPTCHA    │     │              │
└────────────┘     └──────────────┘     └────────────┘     └──────────────┘

Temel Bileşenler

CAPTCHA Çözücü

import time
import requests


class FormCaptchaSolver:
    BASE = "https://ocr.captchaai.com"

    def __init__(self, api_key):
        self.api_key = api_key

    def solve(self, params, initial_wait=10):
        params["key"] = self.api_key
        params["json"] = 1
        resp = requests.post(f"{self.BASE}/in.php", data=params).json()
        if resp["status"] != 1:
            raise Exception(f"Submit error: {resp['request']}")

        task_id = resp["request"]
        time.sleep(initial_wait)

        for _ in range(60):
            result = requests.get(
                f"{self.BASE}/res.php",
                params={"key": self.api_key, "action": "get", "id": task_id, "json": 1},
            ).json()
            if result["request"] == "CAPCHA_NOT_READY":
                time.sleep(5)
                continue
            if result["status"] == 1:
                return result["request"]
            raise Exception(f"Solve error: {result['request']}")
        raise TimeoutError("CAPTCHA solve timed out")

CAPTCHA Dedektörü

import re
from selenium.webdriver.common.by import By


class CaptchaDetector:
    def __init__(self, driver):
        self.driver = driver

    def detect(self):
        """Detect CAPTCHA type on current page."""
        html = self.driver.page_source

        # Turnstile
        turnstile = self.driver.find_elements(By.CSS_SELECTOR, ".cf-turnstile, [data-sitekey]")
        for el in turnstile:
            if "cf-turnstile" in (el.get_attribute("class") or ""):
                return "turnstile", el.get_attribute("data-sitekey")

        # reCAPTCHA
        recaptcha = self.driver.find_elements(By.CSS_SELECTOR, "[data-sitekey]")
        if recaptcha:
            sitekey = recaptcha[0].get_attribute("data-sitekey")
            if "recaptcha" in html.lower():
                return "recaptcha_v2", sitekey

        # Image CAPTCHA
        img = self.driver.find_elements(By.CSS_SELECTOR, "img[src*='captcha'], img.captcha")
        if img:
            return "image", img[0].get_attribute("src")

        return "none", None

Form Otomatikleştirici

import base64
import requests as req
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


class FormAutomator:
    def __init__(self, api_key):
        self.solver = FormCaptchaSolver(api_key)
        self.driver = webdriver.Chrome()
        self.detector = CaptchaDetector(self.driver)

    def fill_field(self, selector, value):
        field = WebDriverWait(self.driver, 10).until(
            EC.presence_of_element_located((By.CSS_SELECTOR, selector))
        )
        field.clear()
        field.send_keys(value)

    def select_option(self, selector, value):
        from selenium.webdriver.support.ui import Select
        select = Select(self.driver.find_element(By.CSS_SELECTOR, selector))
        select.select_by_value(value)

    def solve_captcha(self):
        captcha_type, data = self.detector.detect()
        page_url = self.driver.current_url

        if captcha_type == "recaptcha_v2":
            token = self.solver.solve({
                "method": "userrecaptcha",
                "googlekey": data,
                "pageurl": page_url,
            })
            self.driver.execute_script(
                f'document.querySelector("[name=g-recaptcha-response]").value = "{token}";'
            )
            return True

        if captcha_type == "turnstile":
            token = self.solver.solve({
                "method": "turnstile",
                "sitekey": data,
                "pageurl": page_url,
            })
            self.driver.execute_script(
                f'document.querySelector("[name=cf-turnstile-response]").value = "{token}";'
            )
            return True

        if captcha_type == "image":
            img_data = req.get(data).content
            img_b64 = base64.b64encode(img_data).decode()
            text = self.solver.solve({"method": "base64", "body": img_b64})
            captcha_input = self.driver.find_element(
                By.CSS_SELECTOR, "input[name*='captcha']"
            )
            captcha_input.clear()
            captcha_input.send_keys(text)
            return True

        return False  # No CAPTCHA detected

    def submit_form(self, url, fields, submit_selector="button[type='submit']"):
        """
        fields: list of (selector, value) tuples
        """
        self.driver.get(url)

        for selector, value in fields:
            self.fill_field(selector, value)

        self.solve_captcha()

        submit = self.driver.find_element(By.CSS_SELECTOR, submit_selector)
        submit.click()

        return self.driver.current_url

    def close(self):
        self.driver.quit()

Tam Örnek: İletişim Formu

automator = FormAutomator("YOUR_API_KEY")

try:
    result_url = automator.submit_form(
        url="https://example.com/contact",
        fields=[
            ("#name", "John Doe"),
            ("#email", "john@example.com"),
            ("#subject", "Sales inquiry"),
            ("#message", "I'd like to learn more about your services."),
        ],
        submit_selector="#submit-btn",
    )
    print(f"Form submitted. Redirected to: {result_url}")
finally:
    automator.close()

Birden Fazla Form Türünü İşleme

Giriş Formu

result = automator.submit_form(
    url="https://staging.example.com/qa-login",
    fields=[
        ("#username", "testuser"),
        ("#password", "testpass123"),
    ],
    submit_selector="#login-btn",
)

Kayıt Formu

result = automator.submit_form(
    url="https://example.com/register",
    fields=[
        ("#first-name", "Jane"),
        ("#last-name", "Smith"),
        ("#email", "jane@example.com"),
        ("#password", "SecurePass!123"),
        ("#confirm-password", "SecurePass!123"),
    ],
    submit_selector="#register-btn",
)

CAPTCHA ile Arama Formu

result = automator.submit_form(
    url="https://example.com/search",
    fields=[
        ("#query", "python developer"),
        ("#location", "San Francisco"),
    ],
    submit_selector="#search-btn",
)

Sorun giderme

Sorun Sebep Düzeltme
Jeton reddedildi Tokenın süresi gönderilmeden önce doldu CAPTCHA'yı en son çözün, hemen gönderin
Alan bulunamadı Dinamik sayfa yükleme Açık beklemeler ekle
Yanlış CAPTCHA türü algılandı Çoklu CAPTCHA öğeleri Algılama sırasını kontrol edin
Form gönderildikten sonra yeniden yüklenir Sunucu tarafı doğrulaması başarısız oldu Gerekli tüm alanları kontrol edin
reCAPTCHA geri araması tetiklenmedi Geri arama işlevini çağırmanız gerekiyor Enjeksiyondan sonra grecaptcha.execute() kullanın

SSS

Formları tarayıcı olmadan gönderebilir miyim?

reCAPTCHA ve Turnstile için CAPTCHA'ları tarayıcı olmadan çözebilir ve HTTP POST aracılığıyla gönderebilirsiniz. Ancak formda JavaScript doğrulaması kullanılıyorsa bir tarayıcıya ihtiyaç vardır.

Birden fazla CAPTCHA içeren formları nasıl yönetirim?

Bazı formlar yalnızca doğrulama başarısız olduktan sonra CAPTCHA gösterir. Her gönderim denemesinden sonra solve_captcha()'yi tekrar çalıştırın.

Peki ya AJAX formları?

AJAX gönderimleri için, XHR isteğini engelleyin ve gizli bir alanı doldurmak yerine CAPTCHA belirtecini istek yüküne ekleyin.


İlgili Kılavuzlar


Herhangi bir formu otomatikleştirin –CAPTCHA'ları CaptchaAI ile çöz.

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

İlgili Yazılar

Use Cases Kayıt Akışı Testinde CAPTCHA Kullanımı
Gerçekçi senaryolar, iş akışı önerileri ve Captcha AI kullanılarak uygulanabilir adımlarla Kayıt Akışı Testinde CAPTCHA Kullanımı için pratik kılavuz.

Gerçekçi senaryolar, iş akışı önerileri ve Captcha AI kullanılarak uygulanabilir adımlarla Kayıt Akışı Testind...

May 04, 2026
Use Cases Sürekli Entegrasyon Testinde CAPTCHA Kullanımı
Gerçekçi senaryolar, iş akışı tavsiyeleri ve Captcha AI kullanılarak uygulanabilir adımlarla Sürekli Entegrasyon Testinde CAPTCHA Kullanımı için pratik kılavuz.

Gerçekçi senaryolar, iş akışı tavsiyeleri ve Captcha AI kullanılarak uygulanabilir adımlarla Sürekli Entegrasy...

May 03, 2026
Use Cases Web Formlarında API Uç Nokta Testi için CAPTCHA Çözümü
Gerçekçi senaryolar, iş akışı tavsiyeleri ve Captcha AI kullanılarak uygulanabilir adımlarla Web Formlarında API Uç Nokta Testi için CAPTCHA Çözümü için pratik...

Gerçekçi senaryolar, iş akışı tavsiyeleri ve Captcha AI kullanılarak uygulanabilir adımlarla Web Formlarında A...

May 08, 2026