undetected-chromedriver, bot algılama sinyallerini azaltmak için Selenium'un ChromeDriver'ını yamalayan bir Python kitaplığıdır. Chrome sürüm eşleştirmesini yönetir, navigator.userAgent işaretlerini kaldırır ve sitelerin kontrol ettiği diğer tarayıcı parmak izlerini değiştirir. Bir site, gizlilik önlemlerine rağmen hala bir CAPTCHA sunduğunda, CaptchaAI bunu çözer ve sayfaya enjekte ettiğiniz bir jetonu döndürür.
Bu kılavuz, her iki aracın nasıl birleştirileceğini gösterir; gizli tarama için algılanmayan chromedriver'ı ve hala görünen CAPTCHA'lar için CaptchaAI'yi kullanın.
İhtiyacınız olan şey
| Gereksinim | Ayrıntılar |
|---|---|
| CaptchaAI API anahtarı | captchaai.com |
| Python 3.8+ | |
| Chrome tarayıcı | Sisteminizde yüklü |
Bağımlılıkları yükleyin:
pip install undetected-chromedriver requests
Temel kurulum
import undetected_chromedriver as uc
import requests
import time
def create_stealth_browser():
"""Create an undetected Chrome browser instance."""
options = uc.ChromeOptions()
options.add_argument("--no-sandbox")
options.add_argument("--window-size=1920,1080")
driver = uc.Chrome(options=options)
return driver
Gizli bir oturumda reCAPTCHA v2'yi çözme
1. Adım: Site anahtarına gidin ve çıkarın
API_KEY = "YOUR_API_KEY"
def extract_recaptcha_sitekey(driver):
"""Extract reCAPTCHA v2 sitekey from the page."""
try:
element = driver.find_element("css selector", "[data-sitekey]")
return element.get_attribute("data-sitekey")
except Exception:
# Try finding in iframe src
iframes = driver.find_elements("css selector", "iframe[src*='recaptcha']")
for iframe in iframes:
src = iframe.get_attribute("src")
if "k=" in src:
return src.split("k=")[1].split("&")[0]
return None
Adım 2: CaptchaAI ile çözün
def solve_recaptcha_v2(sitekey, pageurl):
"""Submit reCAPTCHA v2 to CaptchaAI and return the token."""
submit = requests.post("https://ocr.captchaai.com/in.php", data={
"key": API_KEY,
"method": "userrecaptcha",
"googlekey": sitekey,
"pageurl": pageurl,
"json": 1
}).json()
if submit.get("status") != 1:
raise RuntimeError(f"Submit error: {submit.get('request')}")
task_id = submit["request"]
time.sleep(20)
for _ in range(30):
result = requests.get("https://ocr.captchaai.com/res.php", params={
"key": API_KEY, "action": "get", "id": task_id, "json": 1
}).json()
if result.get("status") == 1:
return result["request"]
if result.get("request") != "CAPCHA_NOT_READY":
raise RuntimeError(f"Solve error: {result['request']}")
time.sleep(5)
raise TimeoutError("Solve timed out")
3. Adım: Belirteci enjekte edin ve gönderin
def inject_recaptcha_token(driver, token):
"""Inject the solved token into the page and submit."""
driver.execute_script(f'''
document.getElementById("g-recaptcha-response").innerHTML = "{token}";
document.getElementById("g-recaptcha-response").style.display = "block";
''')
# If there's a callback function, trigger it
driver.execute_script(f'''
if (typeof ___grecaptcha_cfg !== 'undefined') {{
var clients = ___grecaptcha_cfg.clients;
for (var key in clients) {{
var client = clients[key];
if (client && client.callback) {{
client.callback("{token}");
}}
}}
}}
''')
İş akışını tamamlayın: reCAPTCHA ile giriş yapın
import undetected_chromedriver as uc
import requests
import time
API_KEY = "YOUR_API_KEY"
def solve_recaptcha(sitekey, pageurl):
submit = requests.post("https://ocr.captchaai.com/in.php", data={
"key": API_KEY, "method": "userrecaptcha",
"googlekey": sitekey, "pageurl": pageurl, "json": 1
}).json()
if submit.get("status") != 1:
raise RuntimeError(f"Submit error: {submit.get('request')}")
task_id = submit["request"]
time.sleep(20)
for _ in range(30):
result = requests.get("https://ocr.captchaai.com/res.php", params={
"key": API_KEY, "action": "get", "id": task_id, "json": 1
}).json()
if result.get("status") == 1:
return result["request"]
if result.get("request") != "CAPCHA_NOT_READY":
raise RuntimeError(f"Solve error: {result['request']}")
time.sleep(5)
raise TimeoutError("Solve timed out")
def main():
driver = uc.Chrome()
try:
# Navigate to target page
driver.get("https://staging.example.com/qa-login")
time.sleep(3)
# Fill in form fields
driver.find_element("id", "username").send_keys("user")
driver.find_element("id", "password").send_keys("pass")
# Extract sitekey
element = driver.find_element("css selector", "[data-sitekey]")
sitekey = element.get_attribute("data-sitekey")
pageurl = driver.current_url
print(f"Sitekey: {sitekey}")
# Solve CAPTCHA
token = solve_recaptcha(sitekey, pageurl)
print(f"Token: {token[:50]}...")
# Inject token
driver.execute_script(
f'document.getElementById("g-recaptcha-response").innerHTML = "{token}";'
)
# Submit form
driver.find_element("id", "submit-btn").click()
time.sleep(3)
print(f"Current URL: {driver.current_url}")
finally:
driver.quit()
if __name__ == "__main__":
main()
Cloudflare Turnstile'yi Çözme
Cloudflare Turnstile widget'larına sahip siteler için site anahtarını çıkarın ve Turnstile yöntemini kullanarak çözün:
def solve_turnstile(sitekey, pageurl):
submit = requests.post("https://ocr.captchaai.com/in.php", data={
"key": API_KEY, "method": "turnstile",
"sitekey": sitekey, "pageurl": pageurl, "json": 1
}).json()
if submit.get("status") != 1:
raise RuntimeError(f"Submit error: {submit.get('request')}")
task_id = submit["request"]
time.sleep(10)
for _ in range(30):
result = requests.get("https://ocr.captchaai.com/res.php", params={
"key": API_KEY, "action": "get", "id": task_id, "json": 1
}).json()
if result.get("status") == 1:
return result["request"]
if result.get("request") != "CAPCHA_NOT_READY":
raise RuntimeError(f"Solve error: {result['request']}")
time.sleep(5)
raise TimeoutError("Solve timed out")
# Inject Turnstile token
def inject_turnstile_token(driver, token):
driver.execute_script(f'''
var input = document.querySelector('[name="cf-turnstile-response"]');
if (input) input.value = "{token}";
''')
Sorun giderme
| Sorun | Sebep | Düzeltme |
|---|---|---|
| Chrome sürüm uyuşmazlığı | UC eşleşen sürücüyü bulamıyor | Chrome'u güncelleyin veya uc.Chrome()'de version_main'yi belirtin |
| CAPTCHA hala görünüyor | Site gelişmiş test profil yapılandırması kullanıyor | Bu beklenen bir durumdur; CaptchaAI ile çözün |
| Jeton enjeksiyonu başarısız oluyor | Yanlış öğe kimliği veya geri arama | Sayfanın reCAPTCHA uygulamasını kontrol edin |
WebDriverException |
Chrome çöktü | --no-sandbox ve --disable-dev-shm-usage'yi ekleyin |
SSS
Neden algılanmayan chromedriver'ı CaptchaAI ile kullanmalısınız?
Algılanmayan krom sürücü, bot algılama sinyallerini azaltarak daha az CAPTCHA görünmesini sağlar. CAPTCHA'lar hala tetiklendiğinde CaptchaAI bunları çözer. Kombinasyon en yüksek başarı oranını verir.
Algılanmayan chromedriver headless modda çalışıyor mu?
Evet, ancak headless mod daha fazla CAPTCHA'yı tetikleyebilir. Chrome'un yeni headless modu için options.add_argument("--headless=new")'yi kullanın.
Bunu Selenium Grid ile kullanabilir miyim?
Evet, ancak algılanmayan chromedriver'ın yerel sürücü ikili dosyasına yama yapması gerekiyor. Dağıtılmış kurulumlar için her düğümdeki sürücüye önceden yama uygulayın.
Site UC'ye rağmen otomasyonu tespit ederse ne olur?
Bazı siteler, UC yamalarının ötesinde gelişmiş algılama kullanır. CaptchaAI, tespit yönteminden bağımsız olarak ortaya çıkan CAPTCHA'ları işler.
CaptchaAI'yi tarayıcı otomasyonunuza ekleyin
API anahtarınızı şu adresten alın:captchaai.com. Gizli taramayı güvenilir CAPTCHA çözümüyle birleştirin.