BLS CAPTCHA'ler, kullanıcıların görüntüleri seçmesi veya yeniden sıralaması gereken görüntü ızgaralarını görüntüler. Bu kılavuzda ızgara düzenleri, yanıt formatları ve çözümlerin doğru şekilde nasıl gönderileceği anlatılmaktadır.
BLS Izgara Mücadelesi Türleri
Görüntü Sıralaması
Kullanıcının görüntüleri belirli bir sıraya göre (örneğin artan sayılar, alfabetik sıra) düzenlemesi gerekir.
Resim Seçimi
Kullanıcının bir açıklamayla eşleşen belirli görsellere tıklaması gerekir (örneğin, "metin içeren tüm görselleri seç").
Desen Eşleşmesi
Kullanıcı, sunulan desen veya örnekle hangi görüntülerin eşleştiğini belirlemelidir.
Izgara Düzeni Haritalaması
# grid_mapping.py
# BLS grids typically use 3x3 or 4x4 layouts
# Each cell maps to an index:
# 3x3 grid:
# [0] [1] [2]
# [3] [4] [5]
# [6] [7] [8]
# 4x4 grid:
# [0] [1] [2] [3]
# [4] [5] [6] [7]
# [8] [9] [10] [11]
# [12] [13] [14] [15]
def grid_position(index, cols=3):
"""Convert flat index to row, column."""
return index // cols, index % cols
def index_from_position(row, col, cols=3):
"""Convert row, column to flat index."""
return row * cols + col
# Example: For a 3x3 grid, position (1, 2) = index 5
print(grid_position(5, cols=3)) # (1, 2)
print(index_from_position(1, 2)) # 5
BLS Grid CAPTCHA'larını Çözme
# solve_bls_grid.py
import requests
import time
import os
import json
def solve_bls_grid(sitekey, pageurl, instructions=None):
"""Solve a BLS grid CAPTCHA and get response indices."""
api_key = os.environ["CAPTCHAAI_API_KEY"]
payload = {
"key": api_key,
"method": "bls",
"sitekey": sitekey,
"pageurl": pageurl,
"json": 1,
}
if instructions:
payload["instructions"] = instructions
resp = requests.post(
"https://ocr.captchaai.com/in.php",
data=payload,
timeout=30,
)
result = resp.json()
if result.get("status") != 1:
raise RuntimeError(f"Submit failed: {result.get('request')}")
task_id = result["request"]
time.sleep(10)
for _ in range(30):
resp = requests.get("https://ocr.captchaai.com/res.php", params={
"key": api_key,
"action": "get",
"id": task_id,
"json": 1,
}, timeout=15)
data = resp.json()
if data.get("status") == 1:
return data["request"]
if data["request"] != "CAPCHA_NOT_READY":
raise RuntimeError(data["request"])
time.sleep(5)
raise TimeoutError("BLS grid solve timeout")
Izgara Yanıtlarını Ayrıştırma
# parse_response.py
import json
def parse_grid_response(solution):
"""Parse CaptchaAI BLS response into actionable grid data."""
# Solution may be JSON or comma-separated indices
if isinstance(solution, str):
try:
parsed = json.loads(solution)
return parsed
except json.JSONDecodeError:
pass
# Try comma-separated indices
if "," in solution:
return [int(x.strip()) for x in solution.split(",")]
# Single value
return [solution]
return solution
def format_for_submission(indices, grid_size=9):
"""Format indices for form submission."""
# Some sites expect a bitmask
bitmask = ["0"] * grid_size
for idx in indices:
if isinstance(idx, int) and 0 <= idx < grid_size:
bitmask[idx] = "1"
return {
"indices": indices,
"bitmask": "".join(bitmask),
"count": len(indices),
}
Selenyumlu Izgara Çözümlerinin Enjekte Edilmesi
# inject_grid.py
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
import time
def click_grid_cells(driver, indices):
"""Click specific grid cells based on solution indices."""
wait = WebDriverWait(driver, 10)
# Find all grid cells
cells = wait.until(
EC.presence_of_all_elements_located(
(By.CSS_SELECTOR, ".captcha-grid .cell, .bls-grid img, .grid-item")
)
)
for idx in indices:
if isinstance(idx, int) and idx < len(cells):
cells[idx].click()
time.sleep(0.3) # Brief delay between clicks
def set_order_sequence(driver, ordered_indices):
"""Click grid cells in the correct order for ordering challenges."""
wait = WebDriverWait(driver, 10)
cells = wait.until(
EC.presence_of_all_elements_located(
(By.CSS_SELECTOR, ".captcha-grid .cell, .bls-grid img")
)
)
for idx in ordered_indices:
if isinstance(idx, int) and idx < len(cells):
cells[idx].click()
time.sleep(0.5) # Ordering needs pauses between clicks
def inject_hidden_response(driver, solution_value):
"""Set the solution in a hidden input field."""
driver.execute_script("""
var inputs = document.querySelectorAll(
'input[name*="captcha"], input[name*="response"], #captcha-answer'
);
for (var i = 0; i < inputs.length; i++) {
inputs[i].value = arguments[0];
}
""", str(solution_value))
BLS Izgara Akışını Tamamlayın
# full_flow.py
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
def handle_bls_grid(driver, pageurl):
"""Complete BLS grid CAPTCHA handling."""
wait = WebDriverWait(driver, 15)
# Wait for CAPTCHA to load
captcha = wait.until(
EC.presence_of_element_located(
(By.CSS_SELECTOR, "[data-sitekey], .bls-captcha")
)
)
sitekey = captcha.get_attribute("data-sitekey")
# Get instructions
instructions = None
try:
inst = driver.find_element(By.CSS_SELECTOR, ".captcha-instructions")
instructions = inst.text.strip()
except Exception:
pass
# Solve via CaptchaAI
solution = solve_bls_grid(sitekey, pageurl, instructions)
parsed = parse_grid_response(solution)
# Determine response method
grid_cells = driver.find_elements(
By.CSS_SELECTOR, ".captcha-grid .cell, .bls-grid img"
)
if grid_cells:
# Click-based response
if isinstance(parsed, list) and all(isinstance(x, int) for x in parsed):
click_grid_cells(driver, parsed)
else:
inject_hidden_response(driver, solution)
else:
# Hidden input response
inject_hidden_response(driver, solution)
# Submit
submit = driver.find_element(
By.CSS_SELECTOR, "button[type='submit'], .submit-btn, #verify"
)
submit.click()
return True
Sorun giderme
| Sorun | Sebep | Düzeltme |
|---|---|---|
| Yanlış hücrelere tıklamalar | Izgara hücresi seçici uyumsuzluğu | Izgara HTML'sini inceleyin ve CSS seçicilerini güncelleyin |
| Sipariş reddedildi | Çok hızlı tıklamak | Tıklamalar arasına 300-500 ms gecikme ekleyin |
| Çözüm biçimi uyuşmazlığı | Site bit maskesi bekliyor, indeksler var | Dönüştürmek için format_for_submission() kullanın |
| Izgara tam olarak yüklenmedi | Resimler yavaş yükleniyor | Çözmeden önce tüm ızgara görüntülerinin yüklenmesini bekleyin |
SSS
CaptchaAI ızgara düzenini nasıl biliyor?
CaptchaAI, CAPTCHA mücadelesini BLS sunucularından alır ve uzaktan çözer. Site anahtarını ve sayfa URL'sini siz sağlarsınız; API, ızgara analizini yönetir.
Gönderdikten sonra ızgara değişirse ne olur?
Bazı BLS formları, ilki geçtikten sonra ikinci bir mücadeleyi gösterir. Gönderimden sonra yeni bir CAPTCHA öğesini kontrol ederek bu sorunu halledin.
Bir BLS ızgara çözümünü yeniden kullanabilir miyim?
Hayır. Her çözüm belirli bir sorgulama oturumuna bağlıdır. Daima taze çözün.
İlgili Kılavuzlar
BLS ızgara zorluklarının üstesinden gelin —CaptchaAI ile başlayın.