CapSkip SDK के साथ Python में reCAPTCHA v2 कैसे हल करें

solve recaptcha v2 in python - How to Solve reCAPTCHA v2 in Python With the CapSkip SDK

reCAPTCHA v2 के तीन variants हैं, और Python में वे अलग-अलग keyword arguments वाले एक ही फ़ंक्शन हैं। Checkbox सीधी कॉल है, Invisible और Enterprise flags हैं, और दोनों एक साथ सेट किए जा सकते हैं। Python इकलौता CapSkip SDK भी है जिसमें सचमुच एक अलग async client है, जो तब मायने रखता है जब आप एक साथ एक से ज़्यादा हल कर रहे हों।

Setup

# Python 3.10 or newer.
pip install capskip

CapSkip लोकल रूप से हल करता है, इसलिए पहले डेस्कटॉप ऐप शुरू करें, फिर client को उसकी settings से मिले port की ओर इंगित करें:

from capskip import CapSkip

solver = CapSkip(
    apiKey="capskip",        # any string when key validation is off
    host="127.0.0.1",
    port=8080,
    recaptchaTimeout=300,    # seconds
)

production में, इनके बजाय उन्हें environment से पढ़ें:

import os
from capskip import CapSkip

solver = CapSkip(
    apiKey=os.getenv("CAPSKIP_API_KEY", "capskip"),
    host=os.getenv("CAPSKIP_HOST", "127.0.0.1"),
    port=int(os.getenv("CAPSKIP_PORT", "8080")),
)

तीन variants

Variantजोड़ने के लिए Keyword
Checkboxnone
Invisibleinvisible=1
Enterpriseenterprise=1
Invisible Enterpriseदोनों
# Checkbox: the baseline call.
result = solver.recaptcha(
    sitekey="6Lc...YOUR_SITEKEY",
    url="https://example.com/login",
)

print(result["code"])   # g-recaptcha-response token

# Invisible.
result = solver.recaptcha(sitekey=sitekey, url=page_url, invisible=1)

# Enterprise, and both together.
result = solver.recaptcha(sitekey=sitekey, url=page_url, enterprise=1)
result = solver.recaptcha(sitekey=sitekey, url=page_url, enterprise=1, invisible=1)

return value एक plain dict है, इसलिए result["code"] token है। यह भी है result["captchaId"] अगर आप लॉग करना चाहते हैं कि किस आंतरिक हल ने इसे उत्पन्न किया।

sitekey और URL सही करना

sitekey है data-sitekey widget container पर attribute, या इसका पहला argument grecaptcha.render जब कोई container नहीं होता। यह हमेशा इससे शुरू होता है 6L और सार्वजनिक है।

URL वही पेज होना चाहिए जिस पर widget render होता है। अपना form handler या कोई post-login redirect पास करना ऐसे token का सबसे आम कारण है जो ठीक से हल हो जाता है और फिर validation में फ़ेल हो जाता है।

token सबमिट करना

import requests

response = requests.post(
    "https://example.com/login",
    data={
        "g-recaptcha-response": result["code"],
        "username": "...",
        "password": "...",
    },
)

Tokens लगभग दो मिनट तक चलते हैं और single use होते हैं, इसलिए flow में जितनी देर से हो सके उतनी देर से हल करें। अगर site token को किसी form field के बजाय किसी JavaScript callback को सौंपती है, तो हल करना एक जैसा ही होता है लेकिन submission अलग होता है, जिसे हमारा reCAPTCHA v2 callback सॉल्वर page कवर करता है।

एक साथ कई हल करना

यहीं Python अन्य CapSkip SDKs से अलग होता है। AsyncCapSkip एक असली async इम्प्लीमेंटेशन है, कोई alias नहीं, इसलिए यह वाकई हल को ओवरलैप करता है:

import asyncio
from capskip import AsyncCapSkip

async def main():
    solver = AsyncCapSkip()
    r1, r2 = await asyncio.gather(
        solver.recaptcha(sitekey=key_a, url="https://a.example.com"),
        solver.recaptcha(sitekey=key_b, url="https://b.example.com"),
    )
    print(r1["code"], r2["code"])

asyncio.run(main())

Node.js और .NET SDKs में AsyncCapSkip केवल एक alias है, और PHP में यह बस इसलिए है ताकि port किया गया कोड compile हो जाए। Python वह है जहां इस पर स्विच करना वास्तव में व्यवहार बदल देता है।

Errors

from capskip import (
    CapSkip, ValidationException, NetworkException,
    ApiException, TimeoutException,
)

try:
    result = solver.recaptcha(sitekey=sitekey, url=page_url)
except ValidationException:
    pass   # missing or malformed arguments
except NetworkException:
    pass   # CapSkip is not running
except ApiException:
    pass   # bad sitekey or pageurl
except TimeoutException:
    pass   # exceeded recaptchaTimeout

चारों एक सामान्य आधार से निकलते हैं, इसलिए except CapSkipError सब कुछ पकड़ लेता है अगर आप failures को एक ही जगह संभालना पसंद करें।

प्रॉक्सी का उपयोग

result = solver.recaptcha(
    sitekey=sitekey,
    url=page_url,
    proxy={"type": "HTTPS", "uri": "user:[email protected]:3128"},
)

प्रॉक्सी reCAPTCHA, Turnstile और GeeTest के लिए काम करती हैं। image CAPTCHAs के लिए इनका समर्थन नहीं है, जो image bytes से हल होते हैं और कभी target site तक नहीं पहुँचते।

अक्सर पूछे जाने वाले सवाल

क्या मुझे परिणाम के लिए पोल करने की ज़रूरत है?

नहीं। SDK आंतरिक रूप से पोल करता है और पूरा हुआ टोकन लौटाता है, इसलिए CAPCHA_NOT_READY कभी आपके कोड तक नहीं पहुँचता। यह 250ms के बाद जाँचना शुरू करता है और पीछे हट जाता है, जो आम तौर पर हाथ से लिखे loop से बेहतर है।

क्या एक अकेले हल के लिए AsyncCapSkip इस्तेमाल करना सही है?

वास्तव में नहीं। यह तब मायने रखता है जब कई हल आपस में ओवरलैप करते हों, या जब आप पहले से ही किसी event loop के अंदर हों और एक blocking कॉल उसे अटका देगी। किसी script में एक हल के लिए sync client अधिक सरल है।

कौन-से Python संस्करण समर्थित हैं?

3.10 और नए। पैकेज की कोई भारी निर्भरताएँ नहीं हैं, इसलिए यह अतिरिक्त चीज़ों का पेड़ खींचे बिना एक मौजूदा स्क्रैपिंग या ऑटोमेशन प्रोजेक्ट में समा जाता है।

सारांश

एक function, तीन variants, इसके साथ चुने गए invisible और enterprise। पढ़ें result["code"], इसे इस रूप में सबमिट करें g-recaptcha-response, और इस्तेमाल करें AsyncCapSkip जब आप bulk में हल कर रहे हों।

व्यापक Python surface यहाँ है Python कैप्चा सॉल्वर पेज, अन्य भाषाएँ यहाँ reCAPTCHA v2 सॉल्वर पेज, और एक है लाइव v2 डेमो जिसके विरुद्ध परीक्षण किया जाए। CapSkip एक है कैप्चा सॉल्वर जो आपकी अपनी मशीन पर चलता है।