Python ile reCAPTCHA Enterprise çözün
Resmî Python SDK ile bir reCAPTCHA v3 Enterprise token'ı isteyin, ardından solution.token değerini döndürülen tarayıcı kimliği ve aynı proxy ile gönderin. Python 3.10 veya üzeri, bir çalışma alanı API anahtarı ve hedef site için etkin bir profil gerekir.
Bu sayfada
SDK'yı yükleyin ve sitenizi yapılandırın
Resmî Python SDK'yı yükleyin:
python -m pip install https://solvethree.com/downloads/solvethree_sdk-0.1.0-py3-none-any.whl- 1.
Site profilini oluşturun
solvethree konsolunda hedef ana makine adını yapılandırın ve profilinin etkin ve çalışma alanınızda kullanılabilir olduğundan emin olun. Çözüm isteğinde bir ana makine adı göndermek profil oluşturmaz. Henüz bir profil yapılandırmadıysanız site profili kurulumu kılavuzuna bakın.
- 2.
SOLVETHREE_API_KEY değerini ayarlayın
Betiği çalıştıracak kabukta veya dağıtım ortamında
SOLVETHREE_API_KEYdeğerini çalışma alanınızın API anahtarına ayarlayın. Anahtarı sunucuda tutun; tarayıcı koduna veya sürüm kontrolüne kaydedilmiş bir kaynak dosyasına koymayın. - 3.
SOLVETHREE_PROXY değerini ayarlayın
SOLVETHREE_PROXYdeğerini çözüm işleminin ve sonraki uygulama isteğinin kullanacağı proxy URL'sine ayarlayın. Örnek tek bir proxy kullandığından ayrıcaproxyCandidateseklemeyin.
Enterprise token'ını isteyin
Bu örneği solve.py olarak kaydedin. accounts.example.com yerine yapılandırdığınız ana makine adını şema veya yol olmadan, login yerine de hedef sayfanın kullandığı eylemi yazın.
import os
from uuid import uuid4
from solvethree import Solvethree, SolvethreeError, TaskFailedError
client = Solvethree(os.environ["SOLVETHREE_API_KEY"])
request = {
"site": "accounts.example.com", # Use your configured hostname.
"action": "login", # Use the page's actual action.
"proxy": os.environ["SOLVETHREE_PROXY"],
"requestId": str(uuid4()),
}
try:
result = client.solve(request, timeout=180)
except TaskFailedError as error:
raise SystemExit(f"Task failed: {error.error_code}") from None
except SolvethreeError as error:
# Keep these IDs so an interrupted request can be recovered.
raise SystemExit(f"Recover request {error.request_id}, task {error.task_id}") from None
solution = result["solution"]
token = solution["token"]
user_agent = solution["userAgent"]
client_hints = solution["secChUa"]
print("Ready task:", result["id"]) # Do not print the token or proxy password.İstek varsayılan olarak enterprise-v3 kullanır; bu nedenle recaptchaType alanı gerekmez. type veya url eklemeyin; bunlar reCAPTCHA istek alanları değildir.
Solvethree senkron çalışır. client.solve görevi bir kez oluşturur, ardından hazır bir sonuç dönene veya bir istisna oluşana kadar durumu sorgular. Burada timeout=180, istemcinin bekleme süresini 180 saniyeyle sınırlar. İşlem başarılı olduğunda betik, hassas değerleri yazdırmadan token'ı, kullanıcı aracısını ve istemci ipuçlarını alır.
Token'ı uygulamanıza gönderin
Çözüm işleminden sonra aynı betikte devam edin. Örnekte belirtildiği gibi requests paketini ayrıca yükleyin. Giriş URL'sini ve form verilerini, gerekli kimlik bilgileri, CSRF token'ı ve oturum çerezleri dahil olmak üzere uygulamanızın gerçek isteğine göre değiştirin.
# Continue after client.solve(). Install requests separately: pip install requests.
import requests
# This example endpoint accepts the standard reCAPTCHA form field.
# Use your application's real URL, form fields, CSRF token and session.
response = requests.post(
"https://accounts.example.com/login",
data={"g-recaptcha-response": solution["token"]},
headers={
"User-Agent": solution["userAgent"],
"sec-ch-ua": solution["secChUa"],
},
proxies={"http": request["proxy"], "https": request["proxy"]},
timeout=30,
allow_redirects=False,
)
# Inspect the application's response to determine whether it accepted the request.
print("Application HTTP status:", response.status_code)Bu örnek, uygulamanın token'ı g-recaptcha-response alanında kabul ettiğini varsayar. Alan adını varsaymak yerine gerçek isteği kontrol edin. Form mevcut bir oturuma bağlıysa yeni ve çerezsiz bir istek yapmak yerine o oturum üzerinden gönderin.
Döndürülen userAgent ve secChUa değerlerini koruyun ve çözüm isteğinde sağladığınız proxy'yi kullanın. IP değiştirmek veya ilgisiz bir tarayıcı kimliği kullanmak isteğin başarısız olmasına yol açabilir.
Bir görevin hazır olması, uygulamanın çözümü kabul ettiği değil, bir çözüm üretildiği anlamına gelir. Uygulamanın yanıtını ve oluşan oturumu inceleyin; HTTP durumu tek başına başarılı bir giriş yapıldığını göstermez. Token reddedilirse başka bir çözüm için ödeme yapmadan önce giden isteği kontrol edin: istek, görev kimliğini veya eski bir token'ı değil, solution.token değerini içermelidir. Reddedilen token'ı teşhis etme kılavuzuna bakın.
Yeni bir görev oluşturmadan kesintiye uğrayan çözüm işlemine devam edin
Örnek, betik her başladığında yeni bir requestId üretir. Süreç yeniden başlatıldığında işleme devam edebilmeniz gerekiyorsa solve çağrısından önce bu kimliği ve özgün isteği kaydedin. Betiği yalnızca yeniden çalıştırmak yeni bir mantıksal istek oluşturur.
- Bir istisna
task_idiçeriyorsa o görevin durumunu sorgulamaya devam etmek içinget_taskkullanın. Sırf bağlantı zaman aşımına uğradı diye yeni bir görev oluşturmayın. - Oluşturma işlemi kesintiye uğradıysa ve elinizde yalnızca
request_idvarsa aynı görev isteğini aynırequestIdile yeniden gönderin. Bu, mevcut görevi döndürür; aynı kimliği yeniden kullanırken görev girdilerini değiştirmek çakışmaya yol açar. TaskFailedErrordurumunda o görevin durumunu sorgulamayı bırakın. Yeniden denemeden önceerrorCodeveerrordeğerlerini inceleyin; değiştirilmemiş geçersiz girdiler başka bir çözüm işlemiyle düzelmez. Başarısız çözüm işlemlerinin ücretleri iade edilir.
SDK, görev oluşturmayı otomatik olarak yeniden denemez. Ancak çözüm için belirlenen süre içinde geçici durum sorgulama hatalarında Retry-After değerine uyar. Bekleme ve kesintiden sonra devam etme üzerinde daha fazla kontrol için görev durumu sorgulama ve zaman aşımları kılavuzuna bakın.
Kaynaklar ve API referansı
İlk görevinizi çalıştırın.
$5 çalışma alanı kredisiyle başlayın.