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?
- Selenyum hedef sayfayı yükler
- Komut dosyanız CAPTCHA site anahtarını DOM sayfasından çıkarıyor
- CaptchaAI, CAPTCHA'yı site anahtarını ve sayfa URL'sini kullanarak çözer
- 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?.