Python में reCAPTCHA v3 कैसे हल करें और एक Action सेट करें

solve recaptcha v3 in python - How to Solve reCAPTCHA v3 in Python and Set an Action

reCAPTCHA v3 कभी कोई चैलेंज नहीं दिखाता। यह बैकग्राउंड में चलता है और साइट को एक टोकन देता है, जिसे साइट फिर सर्वर साइड पर वेरिफाई करती है। आपके कोड की दृष्टि से इसका मतलब है कि क्लिक करने या देखने के लिए कुछ नहीं है, इसलिए पूरा काम एक ऐसा टोकन बनाना है जिसे साइट स्वीकार करेगी। Python में यह वही recaptcha वही method जो आप v2 के लिए इस्तेमाल करेंगे, एक version flag के साथ।

जो हिस्सा लोगों को उलझाता है वह है action।

Setup

# Python 3.10 or newer.
pip install capskip
from capskip import CapSkip

solver = CapSkip(
    host="127.0.0.1",
    port=8080,
    recaptchaTimeout=300,   # seconds, shared with Turnstile and GeeTest
)

CapSkip आपकी अपनी मशीन पर चलता है, इसलिए इनमें से कुछ भी काम करने से पहले desktop app खुला होना चाहिए।

बुनियादी call

result = solver.recaptcha(
    sitekey="6Lc...YOUR_SITEKEY",
    url="https://example.com/checkout",
    version="v3",
    action="submit",
)

print(result["code"])   # the v3 token

v2 से दो चीज़ें अलग हैं। version="v3" आवश्यक है, और action उससे मेल खाना चाहिए जो पेज पास करता है grecaptcha.execute। अगर आप इसे छोड़ देते हैं तो default है verify.

action क्यों मायने रखता है

v3 actions वे labels हैं जो साइट हर सुरक्षित interaction से जोड़ती है, ताकि एक login और एक checkout को अलग-अलग score किया जा सके। साइट का अपना backend आमतौर पर जाँचता है कि लौटाए गए token पर मौजूद action उस endpoint के लिए अपेक्षित action से मेल खाता है।

गलत वाला भेजें और token तकनीकी रूप से वैध होता है लेकिन किसी अलग इंटरैक्शन के लिए लेबल किया हुआ पहुँचता है, जिसे कई backend सीधे अस्वीकार कर देते हैं। अनुमान लगाने के बजाय असली मान पेज से पढ़ें:

import re
import requests

html = requests.get("https://example.com/checkout").text

# Sites usually call execute() with the action as a literal string.
match = re.search(r"execute\([^,]+,\s*\{\s*action:\s*['\"]([^'\"]+)", html)
action = match.group(1) if match else "verify"

result = solver.recaptcha(
    sitekey=sitekey, url=page_url, version="v3", action=action,
)

सामान्य मान हैं login, submit, homepage और checkout, लेकिन वे मनमानी स्ट्रिंग्स हैं जिन्हें साइट बनाने वाले ने चुना।

Enterprise v3

Enterprise एक अलग उत्पाद के बजाय एक ऑर्थोगोनल flag है, इसलिए यह ऊपर से जुड़ जाता है:

result = solver.recaptcha(
    sitekey=sitekey,
    url=page_url,
    version="v3",
    enterprise=1,
    action="submit",
)

आप Enterprise को स्टैंडर्ड से पेज द्वारा लोड की जाने वाली स्क्रिप्ट से पहचान सकते हैं। Enterprise खींचता है enterprise.js, standard खींचता है api.js। ग़लत अंदाज़ा लगाने से किसी ख़राब token के लौटने के बजाय हल विफल हो जाता है, इसलिए जाँचना सस्ता है।

token सबमिट करना

import requests

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

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

बल्क में हल करना

Python ही एकमात्र CapSkip SDK है जहाँ AsyncCapSkip यह किसी alias के बजाय एक असली async client है, इसलिए यह वाकई काम को overlap करता है:

import asyncio
from capskip import AsyncCapSkip

async def main():
    solver = AsyncCapSkip()
    tokens = await asyncio.gather(*[
        solver.recaptcha(sitekey=sitekey, url=u, version="v3", action="submit")
        for u in urls
    ])
    return [t["code"] for t in tokens]

asyncio.run(main())

Errors

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

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

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

अगर मैं action छोड़ दूँ तो क्या होता है?

यह इस पर डिफ़ॉल्ट होता है verify। यह उन साइट्स पर काम करता है जो action की जांच कभी नहीं करतीं, और उन पर नाकाम रहता है जो करती हैं। चूंकि page से असली value पढ़ना कुछ ही लाइनों का काम है, इसलिए default पर भरोसा करने के बजाय इसे करना बेहतर है।

क्या मैं सबमिट करने से पहले score जांच सकता हूं?

नहीं। score Google के पास रहता है और तभी site owner को दिखाया जाता है जब उनका backend token सत्यापित करता है। client side से आपको एक token मिलता है और कुछ नहीं, इसलिए सबमिट करने से पहले score का निरीक्षण करने या उस पर फ़िल्टर करने का कोई तरीका नहीं है।

एक v3 token कितने समय तक वैध रहता है?

लगभग दो मिनट, और single use, v2 की तरह ही। किसी pool को जमा करने के बजाय जिस request को इसकी ज़रूरत है उससे ठीक पहले हल करें।

सारांश

Pass version="v3", सेट करें action उससे जो पेज वास्तव में इस्तेमाल करता है, जोड़ें enterprise=1 जब पेज लोड होता है enterprise.js, और टोकन को जल्दी सबमिट करें क्योंकि यह लगभग दो मिनट में एक्सपायर हो जाता है।

अन्य भाषाएँ यहाँ शामिल हैं reCAPTCHA v3 सॉल्वर पेज, Enterprise की बारीकियाँ इस पर the Enterprise सॉल्वर पेज, और व्यापक Python सतह यहाँ Python कैप्चा सॉल्वर पेज। आप हमारे यहाँ एक असली v3 token को जनरेट होते देख सकते हैं v3 डेमो, और CapSkip खुद एक है असीमित कैप्चा सॉल्वर जो लोकल रूप से चलता है।