Selenium ile CAPTCHA çözücü kullanın
solvethree kullanarak bir reCAPTCHA Enterprise token'ı alın, ardından Selenium ile solution.token değerini uygulamanızın formuna yerleştirip formu gönderin. SDK görevi çözer; tarayıcı formunu sizin yerinize doldurmaz.
Örnek, token alanı ve gönder düğmesi içeren bir HTTPS formu kullanır. Bu seçicileri test ettiğiniz uygulamaya uyarlayın.
Bu sayfada
Formu ve Python ortamını hazırlayın
- 1.
Bağımlılıkları yükleyin
Chrome ile Python 3.10 veya üzerini kullanın. pip aracılığıyla
seleniumpaketini yükleyin, ardından resmî solvethree Python SDK'sını indirilebilir wheel dosyasından yükleyin. Python entegrasyonundaki doğrudan indirme yoluyla kurulum talimatlarını kullanın; bunun yerine paket kayıt deposundan kurulum yapılabileceğini varsaymayın. - 2.
Hedef profili yapılandırın
Size ait formun ana makine adını solvethree konsolunda ayarlayın ve profilinin çalışma alanınız için etkin olduğundan emin olun. Bir görevde ana makine adı göndermek bu profili oluşturmaz. Örnek,
logineylemini ister; uygulamanız farklı bir eylem kullanıyorsa bunu değiştirin. - 3.
Ortam değişkenlerini ayarlayın
TARGET_URLdeğişkenini tam HTTPS form URL'nize,SOLVETHREE_PROXYdeğişkenini HTTP veya HTTPS proxy URL'nize veSOLVETHREE_API_KEYdeğişkenini çalışma alanınızın API anahtarına ayarlayın. Anahtarı sayfanın JavaScript kodunda değil, Python sürecinde tutun.
Önce çözün, ardından Chrome'u döndürülen kimlikle başlatın
Bu Chrome örneği, kullanıcı adı veya parola kullanmayan ve erişimi IP izin listesiyle sağlanan bir proxy gerektirir. Kimlik bilgileri içeren proxy URL'lerini reddeder ve kimlik doğrulamalı proxy kurulumu uygulamaz.
Görev, TARGET_URL içinden çıkarılan ana makine adını, login eylemini ve tek bir proxy'yi kullanır. solve hazır bir sonuç döndürdükten sonra Chrome, aynı proxy ve döndürülen userAgent ile başlatılır. Örnek, gezinmeden önce döndürülen secChUa üstbilgisini de ayarlar.
# Install selenium and the official solvethree Python SDK first.
import os
from urllib.parse import urlsplit
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from solvethree import Solvethree
target = os.environ["TARGET_URL"] # Your configured HTTPS form page.
proxy_url = os.environ["SOLVETHREE_PROXY"]
proxy = urlsplit(proxy_url)
if proxy.username or proxy.password:
raise ValueError("This Chrome example requires an IP-allowlisted proxy without URL credentials")
client = Solvethree(os.environ["SOLVETHREE_API_KEY"])
result = client.solve({"site": urlsplit(target).hostname, "action": "login", "proxy": proxy_url})
solution = result["solution"]
options = webdriver.ChromeOptions()
options.add_argument("--proxy-server=" + proxy_url)
options.add_argument("--user-agent=" + solution["userAgent"])
driver = webdriver.Chrome(options=options)
try:
driver.execute_cdp_cmd("Network.enable", {})
driver.execute_cdp_cmd("Network.setExtraHTTPHeaders", {
"headers": {"sec-ch-ua": solution["secChUa"]}
})
driver.get(target)
# Adapt the field and button to your application's form contract.
field = WebDriverWait(driver, 20).until(
lambda browser: browser.find_element(By.NAME, "g-recaptcha-response")
)
driver.execute_script("""
arguments[0].value = arguments[1];
arguments[0].dispatchEvent(new Event('input', {bubbles:true}));
""", field, solution["token"])
driver.find_element(By.CSS_SELECTOR, 'button[type="submit"]').click()
# Check your application's success response here.
finally:
driver.quit()Solvethree.solve, görevi bir kez oluşturur ve görev hazır olana veya hata fırlatana kadar durumunu sorgular. Tarayıcı ancak bundan sonra forma gider. Betik token alanını bekler, solution.token değerini atar, bir input olayı tetikler ve gönder düğmesine tıklar. Chrome, finally bloğunda kapatılır.
Demonun form varsayımlarını değiştirin
TARGET_URL, uygulamanızın form sayfasıdır. Görevinsitedeğeri tam URL değil, bu sayfanın ana makine adıdır; reCAPTCHA istekleriurlveyatypealanı kullanmaz.login, örnek eylemdir. Bunu uygulamanın ve yapılandırılmış profilinin kullandığı eylemle değiştirin.By.NAME,g-recaptcha-responseile kullanıldığında demodaki textarea'yı bulur. Uygulamanızın gerçekten okuduğu alanı veya gönderim parametresini kullanın. Değeri atamak ve bir input olayı tetiklemek, demonun aktarım yöntemidir; evrensel bir reCAPTCHA geri çağrısı değildir.button[type="submit"], demonun gönder düğmesini tanımlar. Bunu formunuz için belirsizliğe yer bırakmayan bir seçiciyle değiştirin ve uygulamanın gerektirdiği oturum, CSRF ve geri çağrı davranışını koruyun.
Örnekteki 20 saniyelik açık bekleme, yalnızca textarea'nın var olup olmadığını kontrol eder. Gönder'e tıkladıktan sonra uygulamanızın başarı durumu veya doğrulama hatası gibi gerçek sonucunu bekleyen koşullu bir bekleme ekleyin. Çözücü zaman aşımından ayrı olarak tarayıcı akışının tamamı için bir süre sınırı kullanın; durum kontrollerinin yerine sabit beklemeler koymayın veya örtük ve açık beklemeleri gelişigüzel karıştırmayın.
Başka bir çözüm satın almadan önce başarısız olan adımı kontrol edin
- Çözücü görevi, Chrome başlamadan önce başarısız oluyor.
Sonlanmış görevin errorCode ve error alanlarını inceleyin. Başarısız bir görevi HTTP isteği hatasından ayırt edin.
Şunu deneyin: Yeniden denemeden önce bildirilen girdi, profil veya bağlantı sorununu düzeltin. Başarısız bir görevin durumunu sorgulamayı bırakın; değişmemiş geçersiz girdiler başka bir istekle düzelmez.
- Selenium, textarea'yı ararken zaman aşımına uğruyor.
Chrome'un amaçlanan forma ulaştığını ve sayfanın gerçekten demodaki adlandırılmış alanı içerdiğini doğrulayın.
Şunu deneyin: Demonun yer bulucusunu uygulamanızın token aktarımına uyarlayın ve bu aktarımın kullanılabilir olduğu durumu bekleyin. Daha uzun bir zaman aşımı, yanlış seçiciyi düzeltmez.
- Token hazır, ancak uygulama gönderimi reddediyor.
Önce giden uygulama isteğini inceleyin. Görev kimliği veya eski bir değer değil, solution.token içerdiğini ve eylem, proxy, tarayıcı kimliği ile oturumun amaçlanan akışla eşleştiğini kontrol edin.
Şunu deneyin: Başka bir token istemeden önce gönderilen parametreyi veya uygulama gereksinimlerini düzeltin. Hazır durumdaki bir görev bir çözüm sunar; gönderimin kabul edilip edilmediğini uygulamanın yanıtı belirler.
Kaynaklar ve API referansı
İlk görevinizi çalıştırın.
$5 çalışma alanı kredisiyle başlayın.