Python ile reCAPTCHA Enterprise çözün

solvethree tarafından3 dk okuma

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 SDK’sını yükleme
python -m pip install https://solvethree.com/downloads/solvethree_sdk-0.1.0-py3-none-any.whl
  1. 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. 2.

    SOLVETHREE_API_KEY değerini ayarlayın

    Betiği çalıştıracak kabukta veya dağıtım ortamında SOLVETHREE_API_KEY değ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. 3.

    SOLVETHREE_PROXY değerini ayarlayın

    SOLVETHREE_PROXY değerini çözüm işleminin ve sonraki uygulama isteğinin kullanacağı proxy URL'sine ayarlayın. Örnek tek bir proxy kullandığından ayrıca proxyCandidates eklemeyin.

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.

Python · solve.py
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.

Python requests · hazır bir çözümü uygulama
# 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_id içeriyorsa o görevin durumunu sorgulamaya devam etmek için get_task kullanı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_id varsa aynı görev isteğini aynı requestId ile 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.
  • TaskFailedError durumunda o görevin durumunu sorgulamayı bırakın. Yeniden denemeden önce errorCode ve error değ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.

İlk görevinizi çalıştırın.

$5 çalışma alanı kredisiyle başlayın.

Çalışma alanı oluşturun
Python ile reCAPTCHA Enterprise çözün · solvethree