Kullanım Senaryoları

Selenyum CAPTCHA'nın Python ve CaptchaAI ile Kullanımı

Selenyum tarayıcı etkileşimlerini otomatikleştirir, ancak CAPTCHA'lar onu soğukta durdurur. CaptchaAI'nin API'si CAPTCHA'ları harici olarak çözerken Selenium tarayıcıyı yönetir; CAPTCHA parametrelerini çıkarırsınız, bunları API'ye gönderirsiniz ve döndürülen jetonu enjekte edersiniz.

Gereksinimler

Gereksinim Ayrıntılar
Python 3.7+ Pip takılıyken
Selenyum pip install selenium
Chrome + ChromeSürücü Eşleşen sürümler
istekler pip install requests
CaptchaAI API anahtarı İtibarencaptchaai.com

Nasıl Çalışır?

  1. Selenyum hedef sayfayı yükler
  2. Komut dosyanız CAPTCHA site anahtarını DOM sayfasından çıkarıyor
  3. CaptchaAI, CAPTCHA'yı site anahtarını ve sayfa URL'sini kullanarak çözer
  4. Komut dosyanız belirteci sayfaya enjekte eder ve formu gönderir

CAPTCHA, sunucu tarafında CaptchaAI tarafından çözülür; Selenyum hiçbir zaman CAPTCHA widget'ıyla doğrudan etkileşime girmez.

Adım 1: Selenyum'u Kurun

from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

options = Options()
options.add_argument("--no-sandbox")
options.add_argument("user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36")

driver = webdriver.Chrome(options=options)

AutomationControlled bayrağı, temel bot tespitinden tanılamaya yardımcı olur. Daha güçlü gizlilik yapılandırması için şunu ekleyin:

options.add_experimental_option("excludeSwitches", ["enable-automation"])
options.add_experimental_option("useAutomationExtension", False)

2. Adım: CAPTCHA Çözücüyü oluşturun

import requests
import time

API_KEY = "YOUR_API_KEY"

def solve_recaptcha_v2(site_key, page_url):
    """Solve reCAPTCHA v2 using CaptchaAI API."""
    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(f"Submit failed: {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(f"Solve failed: {result.text}")

    raise TimeoutError("CAPTCHA solve timed out")

3. Adım: Site Anahtarını Çıkarın ve Çözümleyin

# Navigate to the target page
driver.get("https://staging.example.com/qa-login")

# Wait for the reCAPTCHA to load
wait = WebDriverWait(driver, 10)
recaptcha = wait.until(
    EC.presence_of_element_located((By.CLASS_NAME, "g-recaptcha"))
)

# Extract the site key
site_key = recaptcha.get_attribute("data-sitekey")
page_url = driver.current_url

print(f"Site key: {site_key}")
print(f"Page URL: {page_url}")

# Solve the CAPTCHA
token = solve_recaptcha_v2(site_key, page_url)
print(f"Token received: {token[:50]}...")

4. Adım: Tokenı enjekte edin ve gönderin

# Inject the token into the reCAPTCHA response field
driver.execute_script(f"""
    document.getElementById('g-recaptcha-response').innerHTML = '{token}';
    document.getElementById('g-recaptcha-response').style.display = '';
""")

# If the form uses a callback function, trigger it
driver.execute_script(f"""
    if (typeof ___grecaptcha_cfg !== 'undefined') {{
        Object.keys(___grecaptcha_cfg.clients).forEach(function(key) {{
            var client = ___grecaptcha_cfg.clients[key];
            if (client.callback) client.callback('{token}');
        }});
    }}
""")

# Submit the form
driver.find_element(By.CSS_SELECTOR, "form").submit()

# Wait for navigation
wait.until(EC.url_changes(page_url))
print(f"Success! Now on: {driver.current_url}")

Tam Çalışma Örneği

from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
import requests
import time

API_KEY = "YOUR_API_KEY"

def solve_recaptcha_v2(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(f"Submit failed: {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(f"Solve failed: {result.text}")
    raise TimeoutError("Timed out")

def main():
    options = Options()
    options.add_argument("--no-sandbox")
    driver = webdriver.Chrome(options=options)

    try:
        driver.get("https://staging.example.com/qa-login")
        wait = WebDriverWait(driver, 10)

        # Extract site key
        recaptcha = wait.until(
            EC.presence_of_element_located((By.CLASS_NAME, "g-recaptcha"))
        )
        site_key = recaptcha.get_attribute("data-sitekey")

        # Solve
        token = solve_recaptcha_v2(site_key, driver.current_url)

        # Inject and submit
        driver.execute_script(
            f"document.getElementById('g-recaptcha-response').innerHTML = '{token}';"
        )
        driver.find_element(By.CSS_SELECTOR, "form").submit()

        wait.until(EC.url_changes(driver.current_url))
        print("Login successful!")

    finally:
        driver.quit()

if __name__ == "__main__":
    main()

Farklı CAPTCHA Türlerini Kullanma

reCAPTCHA v3

def solve_recaptcha_v3(site_key, page_url, action="verify"):
    resp = requests.get("https://ocr.captchaai.com/in.php", params={
        "key": API_KEY,
        "method": "userrecaptcha",
        "googlekey": site_key,
        "pageurl": page_url,
        "version": "v3",
        "action": action
    })
    task_id = resp.text.split("|")[1]
    # ... same polling logic

Cloudflare Turnstile

def solve_turnstile(site_key, page_url):
    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]
    # ... same polling logic

Sorun giderme

Sorun Sebep Düzeltme
Jeton reddedildi Tokenın süresi gönderilmeden önce doldu 120 saniye içinde enjekte edin ve gönderin
Site anahtarı bulunamadı CAPTCHA dinamik olarak yükleniyor Daha uzun zaman aşımı ile WebDriverWait ekleyin
NoSuchElementException Yanlış seçici Doğru öğeyi bulmak için sayfayı inceleyin
ChromeDriver sürüm uyuşmazlığı Chrome güncellendi Eşleşen ChromeDriver sürümünü indirin
Doğru jetona rağmen bot tespiti CAPTCHA'nın ötesinde anti-bot Gizli seçenekler ekleyin, algılanmayan krom sürücü kullanın

SSS

Selenium'u CaptchaAI ile headless modda çalıştırabilir miyim?

Evet. CaptchaAI, CAPTCHA'ları sunucu tarafında çözer; tarayıcının site anahtarını çıkarmak için sayfayı yüklemesi yeterlidir. Headless mod iyi çalışır.

CAPTCHA onay kutusunu tıklamam gerekiyor mu?

Hayır. CaptchaAI, doğrudan forma enjekte ettiğiniz bir belirteci döndürür. CAPTCHA widget'ıyla görsel etkileşime gerek yoktur.

Geri aramalı reCAPTCHA'ya ne dersiniz?

Bazı siteler form gönderimi yerine JavaScript geri aramalarını kullanır. Çözülmüş jetonla geri aramayı tetiklemek için driver.execute_script() kullanın. GörmekreCAPTCHA v2 Geri Arama Sorunu Nasıl Çözülür?.

İlgili Kılavuzlar

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