कोर एसडीके
पूरे पारिस्थितिकी तंत्र का इंजन. capsolver-core किसी पृष्ठ पर कैप्चा का पता लगाने, उनके मापदंडों को पढ़ने, उन्हें CapSolver AI सेवा के माध्यम से हल करने और टोकन को वापस भरने के लिए शुद्ध पायथन का उपयोग करता है। उच्च-स्तरीय capsolver-agent और capsolver-mcp पैकेज दोनों इसके शीर्ष पर बनाए गए हैं।
केवल टोकन मोड। यह एसडीके कैपसॉल्वर एपीआई (reCAPTCHA v2/v3, क्लाउडफ्लेयर टर्नस्टाइल) से टोकन का अनुरोध करके हल करता है। यह छवि ग्रिड पर क्लिक नहीं करता है या पेज पर स्लाइडर्स को नहीं खींचता है।
1. अवलोकन
capsolver-core “कैप्चा को हल करने” को चार स्पष्ट चरणों में तोड़ता है, जो एक ही पाइपलाइन में बंधा हुआ है:
- पता लगाएं (
detect) - पहचानें कि पृष्ठ पर कौन से कैप्चा प्रकार मौजूद हैं। - पैरामीटर पढ़ें (
get_captcha_info) - लाइव पेज से सीधे प्रत्येक कैप्चा (प्रकार, साइट कुंजी, यूआरएल, और इसी तरह) के संरचित पैरामीटर पढ़ें। - हल करें (
solve) - पैरामीटर्स को CapSolver की AI सेवा को सौंपें और उपयोग करने योग्य टोकन वापस प्राप्त करें। - वापस भरें (
solve_on_page) - टोकन को पृष्ठ DOM में वापस लिखें ताकि साइट सत्यापन को पारित मान ले।
इस पाइपलाइन के आसपास, यह कई इंजीनियरिंग सुविधाएं जोड़ता है:
- ✅ पूरी तरह से एसिंक एपीआई -
async/awaitपर निर्मित, ताकि आप एक साथ बड़ी संख्या में सॉल्व चला सकें। - ✅ कनेक्शन का पुन: उपयोग और सफाई - एक आंतरिक HTTP कनेक्शन पूल बनाए रखता है और एक एसिंक संदर्भ प्रबंधक के रूप में काम करता है।
- ✅ प्लग करने योग्य हैंडलर रजिस्ट्री - प्रत्येक कैप्चा प्रकार को एक हैंडलर द्वारा नियंत्रित किया जाता है, जिसे आप कस्टमाइज़ या ओवरराइड कर सकते हैं।
- ✅ ग्रैन्युलैरिटी के दो स्तर - पैरामीटर ज्ञात होने पर शुद्ध एपीआई पर जाएं; जब आपके पास केवल पेज हो तो प्लेराइट ब्राउज़र मोड का उपयोग करें।
आपको सीधे core का उपयोग कब करना चाहिए? जब आप स्वयं कोड को नियंत्रित करते हैं और एलएलएम में समाधान को उजागर करने की आवश्यकता नहीं होती है।
2. स्थापना
capsolver-core GitHub पर खुला स्रोत है और अभी तक PyPI पर प्रकाशित नहीं हुआ है, इसलिए इसे git के माध्यम से इंस्टॉल करें:
pip install git+https://github.com/capsolver-ai/capsolver-core.git
# With Playwright support (for detect / solve_on_page)
pip install "capsolver-core[playwright] @ git+https://github.com/capsolver-ai/capsolver-core.git"
playwright install chromiumअपनी कुंजी सेट करें:
export CAPSOLVER_API_KEY="your-capsolver-api-key"नोट: एसडीके
[playwright]अतिरिक्त के बिना काम करता है - उस स्थिति में केवल टोकन मोड (solve) उपलब्ध है, और ब्राउज़र-निर्भर विधियांdetect/get_captcha_info/solve_on_pageअनुपलब्ध हैं क्योंकि Playwright गायब है।
3. एपीआई और दो मोड
3.1 एक ग्राहक बनाएँ
create_capsolver(**options) (या Capsolver(**options) ) एक ग्राहक लौटाता है।
| विकल्प | डिफ़ॉल्ट | विवरण |
|---|---|---|
api_key | — | कैपसॉल्वर क्लाइंट कुंजी (समाधान के लिए आवश्यक) |
service | https://api.capsolver.com | एपीआई आधार यूआरएल |
default_timeout | 120 | कुल मतदान बजट, सेकंड में |
polling_interval | 5 | परिणाम सर्वेक्षणों के बीच का अंतराल, सेकंड में |
request_timeout_ms | 30000 | एकल HTTP अनुरोध के लिए टाइमआउट |
app_id | — | डेवलपर/संबद्ध आईडी |
handlers | सभी अंतर्निर्मित | पंजीकृत कैप्चा हैंडलर को ओवरराइड करें |
source | — | ट्रैफ़िक-स्रोत पहचानकर्ता |
version | — | क्लाइंट संस्करण टैग |
on_error | — | गैर-घातक त्रुटियों के लिए कॉलबैक |
Capsolver एक आंतरिक HTTP कनेक्शन पूल रखता है, इसलिए कनेक्शन जारी होने को सुनिश्चित करने के लिए इसे एसिंक संदर्भ प्रबंधक के रूप में उपयोग करना सबसे अच्छा है:
async with create_capsolver(api_key="YOUR_API_KEY") as cap:
solution = await cap.solve(info)
# or call await cap.aclose() explicitly when you're done3.2 विधियाँ एक नज़र में
| विधि | पैरामीटर्स | रिटर्न | विवरण |
|---|---|---|---|
solve(info, wait_options?) | CaptchaInfo , WaitOptions? | Solution | मापदंडों से हल करें |
detect(page) | नाटककार page | list[CaptchaType] | पेज पर कौन से कैप्चा हैं |
get_captcha_info(page) | नाटककार page | list[CaptchaInfo] | प्रत्येक विजेट के लिए संरचित पैरामीटर |
solve_on_page(page, options?) | page , SolveOnPageOptions? | list[SolveOnPageResult] | पता लगाएं → हल करें → वापस भरें |
get_balance() | — | BalanceResp | खाता शेष |
register(handler) | CaptchaHandler | — | रजिस्ट्री में एक हैंडलर जोड़ें |
get_supported_captchas() | — | list[str] | समर्थित प्रकारों की सूची बनाएं |
get_handler(key) | स्ट्र / CaptchaType | CaptchaHandler | None | कुंजी द्वारा एक हैंडलर खोजें |
3.3 इनपुट हल करें: CaptchaInfo
solve() का मुख्य इनपुट CaptchaInfo है। type , website_url , और website_key आवश्यक हैं (एक खाली website_url या website_key ValueError को बढ़ाता है); बाकी कैप्चा प्रकार के आधार पर वैकल्पिक हैं:
| पैरामीटर | प्रकार | आवश्यक | पर लागू होता है | विवरण |
|---|---|---|---|---|
type | CaptchaType | हाँ | सभी | RECAPTCHA_V2 / RECAPTCHA_V3 / CLOUDFLARE |
website_url | स्ट्र | हाँ | सभी | कैप्चा होस्ट करने वाले पेज का पूरा यूआरएल |
website_key | स्ट्र | हाँ | सभी | साइट सार्वजनिक कुंजी (reCAPTCHA की data-sitekey / टर्नस्टाइल की साइटकी) |
version | स्ट्र | नहीं | रीकैप्चा | "v2" या "v3" ; आमतौर पर स्वतः पता लगाया जाता है |
page_action | स्ट्र | नहीं | रीकैप्चा v3 | v3 क्रिया नाम (उदा. "login" ) |
min_score | तैरना | नहीं | रीकैप्चा v3 | वांछित न्यूनतम स्कोर (0.0-1.0) |
invisible | बूल | नहीं | रीकैप्चा v2 | क्या यह अदृश्य v2 है |
enterprise | बूल | नहीं | रीकैप्चा | क्या एंटरप्राइज़ संस्करण का उपयोग करना है |
s | स्ट्र | नहीं | रीकैप्चा एंटरप्राइज | एंटरप्राइज़ s टोकन |
cdata | स्ट्र | नहीं | क्लाउडफ्लेयर | टर्नस्टाइल का cdata कस्टम पैरामीटर |
proxy | स्ट्र | नहीं | सभी | प्रॉक्सी, user:pass@host:port या host:port के रूप में |
user_agent | स्ट्र | नहीं | सभी | कस्टम उपयोगकर्ता-एजेंट |
container_id | स्ट्र | नहीं | ब्राउज़र फ़िल-बैक | DOM आईडी का उपयोग फिल-बैक के दौरान विजेट कंटेनर का पता लगाने के लिए किया जाता है |
callback | स्ट्र | नहीं | ब्राउज़र फ़िल-बैक | हल करने के बाद ट्रिगर करने के लिए कॉलबैक फ़ंक्शन का नाम |
binded_button_id | स्ट्र | नहीं | ब्राउज़र फ़िल-बैक | संबंधित सबमिट बटन की DOM आईडी |
extra | हुक्म | नहीं | सभी | उन क्षेत्रों के लिए पास-थ्रू जिन्हें अभी तक मॉडल नहीं किया गया है |
solve_on_page() के विकल्प SolveOnPageOptions द्वारा नियंत्रित होते हैं:
| विकल्प | प्रकार | डिफ़ॉल्ट | विवरण |
|---|---|---|---|
autofill | बूल | True | क्या को हल करने के बाद स्वचालित रूप से टोकन को पृष्ठ DOM में भरना है |
throw_on_error | बूल | False | एकल कैप्चा विफलता पर, क्या अपवाद उठाना है या इसे error फ़ील्ड में रिकॉर्ड करना है |
timeout | तैरना | क्लाइंट डिफ़ॉल्ट | इस कॉल के लिए कुल मतदान बजट, सेकंड में |
polling_interval | तैरना | क्लाइंट डिफ़ॉल्ट | इस कॉल के लिए मतदान अंतराल, सेकंड में |
solve() (WaitOptions) के लिए wait_options में केवल दो वैकल्पिक फ़ील्ड हैं, timeout और polling_interval, जिनका उपयोग एकल समाधान के लिए क्लाइंट के वैश्विक डिफ़ॉल्ट को ओवरराइड करने के लिए किया जाता है।
3.4 रिटर्न प्रकार
| प्रकार | फ़ील्ड | विवरण |
|---|---|---|
Solution | token | हल किया गया टोकन - वह क्रेडेंशियल जो आप लक्ष्य साइट पर सबमिट करते हैं |
captcha_type | कैप्चा प्रकार जिसे हल किया गया था | |
expire_time | टोकन की समाप्ति सेकंड में (केवल तभी मौजूद होती है जब सेवा इसे लौटाती है) | |
user_agent | यूए का उपयोग हल करने के लिए किया जाता है (केवल तभी मौजूद होता है जब सेवा इसे लौटाती है) | |
raw | कच्चा TokenSolution (इसमें g_recaptcha_response आदि शामिल हैं) | |
SolveOnPageResult | info | उस कैप्चा के लिए CaptchaInfo |
solution | Solution ; असफलता पर None | |
filled | क्या टोकन वापस पृष्ठ में भर दिया गया था | |
error | असफलता का कारण; सफलता पर None | |
BalanceResp | balance | खाता शेष (फ्लोट) |
packages | योजनाओं/सदस्यता पैकेजों की सूची |
detect() list[CaptchaType] लौटाता है, और get_captcha_info() list[CaptchaInfo] लौटाता है।
3.5 प्रत्येक मोड इन एपीआई का उपयोग कैसे करता है
दोनों मोड के बीच एकमात्र अंतर यह है कि ** पैरामीटर कहां से आते हैं** - यही कारण है कि वे अलग-अलग एपीआई कहते हैं:
टोकन मोड (आप साइट कुंजी पहले से ही जानते हैं) - केवल solve() का उपयोग करता है। आप स्वयं CaptchaInfo का निर्माण करते हैं और एक टोकन वापस प्राप्त करते हैं:
info = CaptchaInfo(type=CaptchaType.RECAPTCHA_V2, website_url=..., website_key=...)
solution = await cap.solve(info)ब्राउज़र मोड (नाटककार के साथ पेज चलाना) - detect() / get_captcha_info() / solve_on_page() का उपयोग करता है। ऑल-इन-वन solve_on_page() में पता लगाना, समाधान करना और वापस भरना शामिल है; या आप प्रत्येक चरण को स्वयं नियंत्रित करने के लिए चरणों को अलग-अलग चला सकते हैं:
results = await cap.solve_on_page(page) # all in one call
# or step by step:
types = await cap.detect(page)
infos = await cap.get_captcha_info(page)
solution = await cap.solve(infos[0])4. प्रत्येक एपीआई को कॉल करना: अनुरोध और प्रतिक्रियाएँ
यह अनुभाग व्यक्तिगत रूप से प्रत्येक विधि से चलता है - वास्तविक कॉल, पास करने के लिए पैरामीटर, एक नमूना प्रतिक्रिया, और प्रतिक्रिया फ़ील्ड का स्पष्टीकरण।
4.1 solve — हल करें (टोकन मोड)
उदाहरण कॉल और प्रतिक्रिया:
import asyncio
from capsolver_core import create_capsolver, CaptchaType, CaptchaInfo
async def main():
cap = create_capsolver(api_key="YOUR_API_KEY")
info = CaptchaInfo(
type=CaptchaType.RECAPTCHA_V2, # required: CAPTCHA type
website_url="https://example.com", # required: page URL
website_key="6Lc...", # required: site public key (data-sitekey)
# v3 also takes page_action / min_score; Enterprise takes enterprise/s; Cloudflare takes cdata
)
solution = await cap.solve(info)
print(solution.token)
asyncio.run(main())नमूना प्रतिक्रिया (Solution):
Solution(
token="03AFcWeA6f...", # the credential to submit to the target site
captcha_type=CaptchaType.RECAPTCHA_V2,
expire_time=120,
user_agent="Mozilla/5.0 ...",
raw=TokenSolution(...),
)प्रतिक्रिया फ़ील्ड:
token- हल किया गया टोकन; इसे reCAPTCHA के लिएg-recaptcha-responseया टर्नस्टाइल के लिएcf-turnstile-responseके रूप में सबमिट करें।captcha_type- कैप्चा प्रकार जिसे हल किया गया था।expire_time- सेकंड में टोकन समाप्ति; केवल तभी प्रस्तुत करें जब सेवा इसे वापस कर दे, अन्यथाNone।user_agent- हल करने के लिए यूए का उपयोग किया जाता है; केवल तभी प्रस्तुत करें जब सेवा इसे वापस कर दे, अन्यथाNone।raw- कच्चाTokenSolution, जिसमेंg_recaptcha_response/token/user_agent/expire_timeहोता है।
4.2 solve_on_page - संपूर्ण पृष्ठ पता लगाना + हल करना + पुनः भरना (ब्राउज़र मोड)
कॉल और पैरामीटर: इनपुट एक नाटककार page है, एक वैकल्पिक SolveOnPageOptions के साथ।
import asyncio
from capsolver_core import create_capsolver
from playwright.async_api import async_playwright
async def main():
cap = create_capsolver(api_key="YOUR_API_KEY")
async with async_playwright() as p:
browser = await p.chromium.launch()
page = await browser.new_page()
await page.goto("https://example.com/login")
results = await cap.solve_on_page(page) # or pass options=SolveOnPageOptions(...)
for r in results:
print(r.info.type, r.solution.token if r.solution else None, r.filled, r.error)
asyncio.run(main())नमूना प्रतिक्रिया (list[SolveOnPageResult]):
[
SolveOnPageResult(
info=CaptchaInfo(type=CaptchaType.RECAPTCHA_V2, website_url=..., website_key=...),
solution=Solution(token="03AF...", captcha_type=CaptchaType.RECAPTCHA_V2),
filled=True,
error=None,
),
]प्रतिक्रिया फ़ील्ड (प्रति आइटम):
info- उस कैप्चा (प्रकार और पैरामीटर) के लिएCaptchaInfo।solution-Solution; विफलता परNone.filled- क्या टोकन सफलतापूर्वक पृष्ठ में वापस भर दिया गया था।error- विफलता कारण स्ट्रिंग;Noneसफलता पर।
4.3 detect - पता लगाएं कि पृष्ठ पर कौन से कैप्चा हैं
कॉल और पैरामीटर: इनपुट एक नाटककार page है।
types = await cap.detect(page)नमूना प्रतिक्रिया/फ़ील्ड (list[CaptchaType]):
[<CaptchaType.RECAPTCHA_V2: 'reCaptchaV2'>]पृष्ठ पर पाए गए कैप्चा-प्रकार के एनम की एक सूची लौटाता है; खाली सूची का मतलब है कि कोई नहीं मिला।
4.4 get_captcha_info — संरचित पैरामीटर पढ़ें
कॉल और पैरामीटर: इनपुट एक नाटककार page है।
infos = await cap.get_captcha_info(page)
for info in infos:
print(info.type, info.website_url, info.website_key)
solution = await cap.solve(infos[0]) # once read, can be solved directlyनमूना प्रतिक्रिया/फ़ील्ड (list[CaptchaInfo]):
# [CaptchaInfo(type=CaptchaType.RECAPTCHA_V2,
# website_url="https://example.com",
# website_key="6Lc...")]4.5 get_balance — शेष राशि जांचें
कॉल और पैरामीटर: कोई इनपुट नहीं।
balance = await cap.get_balance()
print(balance.balance, balance.packages)नमूना प्रतिक्रिया/फ़ील्ड (BalanceResp):
BalanceResp(balance=12.34, packages=[])balance- खाता शेष (फ्लोट)।packages- योजनाओं/सदस्यता पैकेजों की सूची; यदि कोई नहीं है तो एक खाली सूची।
4.6 get_supported_captchas / get_handler — रजिस्ट्री पहुंच
कॉल और प्रतिक्रिया:
cap.get_supported_captchas() # → ['reCaptchaV2', 'reCaptchaV3', 'cloudflare']get_supported_captchas()- वर्तमान में समर्थित प्रकार स्ट्रिंग्स की एक सूची लौटाता है।