Python से reCAPTCHA Enterprise हल करें

solvethree द्वारापढ़ने में 4 मिनट

आधिकारिक Python SDK से reCAPTCHA v3 Enterprise टोकन का अनुरोध करें, फिर लौटाई गई ब्राउज़र पहचान और उसी प्रॉक्सी के साथ solution.token सबमिट करें। आपको Python 3.10 या बाद का संस्करण, वर्कस्पेस API कुंजी और लक्ष्य साइट के लिए एक सक्रिय प्रोफ़ाइल चाहिए होगी।

इस पेज पर

SDK इंस्टॉल करें और अपनी साइट कॉन्फ़िगर करें

आधिकारिक Python SDK इंस्टॉल करें:

Python SDK इंस्टॉल करें
python -m pip install https://solvethree.com/downloads/solvethree_sdk-0.1.0-py3-none-any.whl
  1. 1.

    साइट प्रोफ़ाइल बनाएँ

    solvethree कंसोल में लक्ष्य होस्टनाम सेट अप करें और सुनिश्चित करें कि उसकी प्रोफ़ाइल सक्रिय है और आपके वर्कस्पेस के लिए उपलब्ध है। हल करने के अनुरोध में होस्टनाम भेजने से प्रोफ़ाइल नहीं बनती। अगर आपने अभी तक प्रोफ़ाइल कॉन्फ़िगर नहीं की है, तो साइट प्रोफ़ाइल सेटअप देखें।

  2. 2.

    SOLVETHREE_API_KEY सेट करें

    जिस शेल या डिप्लॉयमेंट एनवायरनमेंट में स्क्रिप्ट चलेगी, उसमें SOLVETHREE_API_KEY को अपनी वर्कस्पेस API कुंजी पर सेट करें। इसे सर्वर पर रखें, ब्राउज़र कोड या कमिट की गई सोर्स फ़ाइल में नहीं।

  3. 3.

    SOLVETHREE_PROXY सेट करें

    SOLVETHREE_PROXY को उस प्रॉक्सी URL पर सेट करें जिसका इस्तेमाल हल करने और उसके बाद एप्लिकेशन अनुरोध में होगा। उदाहरण में एक प्रॉक्सी इस्तेमाल होती है, इसलिए साथ में proxyCandidates न जोड़ें।

Enterprise टोकन का अनुरोध करें

इस उदाहरण को solve.py के रूप में सेव करें। accounts.example.com की जगह अपना कॉन्फ़िगर किया गया होस्टनाम डालें—बिना स्कीम या पाथ के—और login की जगह लक्ष्य पेज का ऐक्शन डालें।

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.

अनुरोध में डिफ़ॉल्ट रूप से enterprise-v3 इस्तेमाल होता है, इसलिए इसमें recaptchaType फ़ील्ड की ज़रूरत नहीं है। type या url न जोड़ें; ये reCAPTCHA अनुरोध के फ़ील्ड नहीं हैं।

Solvethree सिंक्रोनस है। client.solve टास्क एक बार बनाता है, फिर तैयार परिणाम लौटने या अपवाद आने तक पोलिंग करता है। यहाँ timeout=180 क्लाइंट के इंतज़ार की सीमा 180 सेकंड तय करता है। सफल होने पर स्क्रिप्ट संवेदनशील मानों को प्रिंट किए बिना टोकन, यूज़र एजेंट और क्लाइंट हिंट निकालती है।

अपने एप्लिकेशन में टोकन सबमिट करें

हल मिलने के बाद उसी स्क्रिप्ट में आगे बढ़ें। उदाहरण में बताए अनुसार requests अलग से इंस्टॉल करें। लॉगिन URL और फ़ॉर्म डेटा की जगह अपने एप्लिकेशन का वास्तविक अनुरोध डालें, जिसमें सभी ज़रूरी क्रेडेंशियल, CSRF टोकन और सेशन कुकी शामिल हों।

Python requests · तैयार समाधान लागू करें
# 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)

यह उदाहरण मानता है कि एप्लिकेशन g-recaptcha-response में टोकन स्वीकार करता है। इस फ़ील्ड नाम को मान लेने के बजाय वास्तविक अनुरोध जाँचें। अगर फ़ॉर्म किसी मौजूदा सेशन पर निर्भर है, तो कुकी के बिना नया अनुरोध करने के बजाय उसी सेशन के ज़रिए सबमिट करें।

लौटाए गए userAgent और secChUa बनाए रखें और हल करने के अनुरोध में दी गई उसी प्रॉक्सी का इस्तेमाल करें। IP बदलने या किसी असंबंधित ब्राउज़र पहचान का इस्तेमाल करने से अनुरोध विफल हो सकता है।

टास्क तैयार होने का मतलब है कि समाधान बन गया है, न कि एप्लिकेशन ने उसे स्वीकार कर लिया है। एप्लिकेशन का रिस्पॉन्स और उससे बना सेशन जाँचें; केवल HTTP स्टेटस सफल लॉगिन की पुष्टि नहीं करता। अगर वह टोकन अस्वीकार करता है, तो दोबारा हल कराने के लिए भुगतान करने से पहले भेजे जा रहे अनुरोध को जाँचें: उसमें solution.token होना चाहिए, टास्क ID या पुराना टोकन नहीं। अस्वीकृत टोकन की समस्या का निदान देखें।

दूसरा टास्क बनाए बिना बाधित प्रक्रिया बहाल करें

उदाहरण हर बार स्क्रिप्ट शुरू होने पर नया requestId बनाता है। अगर आपको प्रोसेस रीस्टार्ट के बाद प्रक्रिया बहाल करनी है, तो solve कॉल करने से पहले वह ID और मूल अनुरोध सेव करें। सिर्फ़ स्क्रिप्ट दोबारा चलाने से एक नया तार्किक अनुरोध बनता है।

  • अगर किसी अपवाद में task_id है, तो उस टास्क की पोलिंग फिर शुरू करने के लिए get_task इस्तेमाल करें। सिर्फ़ कनेक्शन टाइमआउट होने के कारण उसकी जगह नया टास्क न बनाएँ।
  • अगर टास्क बनाते समय प्रक्रिया बाधित हुई और आपके पास सिर्फ़ request_id है, तो उसी requestId के साथ बिल्कुल वही टास्क अनुरोध दोबारा भेजें। इससे मौजूदा टास्क लौटता है; उसी ID के साथ टास्क इनपुट बदलने पर टकराव होता है।
  • TaskFailedError आने पर उस टास्क की पोलिंग बंद करें। दोबारा कोशिश करने से पहले उसका errorCode और error जाँचें; अमान्य इनपुट बदले बिना दोबारा हल कराने से समस्या ठीक नहीं होगी। विफल प्रयासों का शुल्क वापस मिलता है।

SDK टास्क बनाने की कोशिश अपने-आप दोबारा नहीं करता। हल करने की समय-सीमा के भीतर पोलिंग में अस्थायी विफलताओं के लिए वह Retry-After का पालन करता है। इंतज़ार और बहाली पर अधिक नियंत्रण के लिए टास्क पोलिंग और टाइमआउट देखें।

अपना पहला टास्क चलाएँ।

$5 वर्कस्पेस क्रेडिट के साथ शुरुआत करें।

वर्कस्पेस बनाएँ
Python से reCAPTCHA Enterprise हल करें · solvethree