
Rajinder Singh
Deep Learning Researcher
प्रकाशित Oct 23, 2026
अद्यतन Oct 23, 2026 · मिनट पढ़ने का समय

एक सेल्फ‑होस्टेड ब्राउज़र सही पेज तक नेविगेट कर सकता है, फिर भी आपका वर्कफ़्लो CAPTCHA पर अटका रह सकता है। अगर आप Steel लोकल पर चला रहे हैं, तो सिर्फ क्लाउड सर्विस का सॉल्विंग फ़्लैग जोड़ना काफ़ी नहीं होता: लोकल और क्लाउड डिप्लॉयमेंट्स की क्षमताएँ अलग‑अलग हैं।
यह गाइड दिखाती है कि सेल्फ‑होस्टेड Steel Browser में CAPTCHA सॉल्वर कहाँ फिट होता है, साथ ही एक छोटा‑सा Python कनेक्शन चेक। उदाहरण एक लोकल डेवलपमेंट पेज और Google की पब्लिक reCAPTCHA टेस्ट की का उपयोग करता है। यह किसी थर्ड‑पार्टी वेबसाइट को टारगेट नहीं करता और न ही किसी AI मॉडल की ज़रूरत पड़ती है।
Steel Browser, डेवलपर्स के लिए एक ब्राउज़र API है जो वेब एजेंट और ऑटोमेशन एप्लिकेशन बनाते हैं। यह ऐसा ब्राउज़र सेशन मैनेज करता है जिसे क्लाइंट परिचित ऑटोमेशन टूल्स से कंट्रोल कर सकते हैं। आधिकारिक Steel रिपॉज़िटरी में सेल्फ‑होस्टिंग और Playwright, Puppeteer, तथा Selenium से कनेक्शन की डाक्यूमेंटेशन है।
अधिकृत फ़ॉर्म वर्कफ़्लो चलाने वाले डेवलपर के लिए काम का बँटवारा सीधा है। Steel ब्राउज़र देता है। Playwright पेज पर नेविगेट करता है और इंटरैक्ट करता है। CAPTCHA सॉल्वर, सपोर्टेड चैलेंज आते ही उसे हैंडल करता है। फिर आपका वर्कफ़्लो चेक करता है कि एप्लिकेशन ने इच्छित ऐक्शन स्वीकार किया या नहीं।
यह ट्यूटोरियल CAPTCHA स्टेप के लिए CapSolver Core SDK का उपयोग करता है। SDK, Playwright पेज को इंस्पेक्ट कर सकता है और एक अलग सॉल्विंग ऑपरेशन एक्सपोज़ करता है। इन कंपोनेंट्स को जोड़ने के लिए किसी LLM को जोड़ने की ज़रूरत नहीं है।
उपयोगी सीनारियो वह सेल्फ‑होस्टेड ब्राउज़र जॉब है जिसमें पहले से CAPTCHA ऑपरेशन की ज़रूरत है। जिस सॉफ़्टवेयर के आप मालिक हैं, उसकी रुटीन टेस्टिंग के लिए CAPTCHA वेंडर की टेस्ट सेटिंग्स काफ़ी हो सकती हैं। जब आपका अधिकृत वर्कफ़्लो सच‑मुच CAPTCHA की माँग करे, तभी सॉल्वर वाला रास्ता अपनाएँ, न कि हर ब्राउज़र नेविगेशन को पेड रिक्वेस्ट पर निर्भर बना दें।
Steel Local में क्लाउड प्रोडक्ट वाली बिल्ट‑इन CAPTCHA सॉल्विंग शामिल नहीं है। Steel की लोकल‑वर्सस‑क्लाउड फीचर मैट्रिक्स दोनों डिप्लॉयमेंट्स को साफ‑साफ अलग‑अलग दिखाती है।
यह फ़र्क इम्प्लीमेंटेशन को प्रभावित करता है। क्लाउड ट्यूटोरियल सेशन बनाते समय सॉल्विंग इनेबल कर सकते हैं, जबकि सेल्फ‑होस्टेड इंटीग्रेशन को गायब ऑपरेशन खुद सप्लाई करना पड़ता है। यह न मानें कि क्लाउड का कोई कॉन्फ़िगरेशन फ़ील्ड, लोकल सर्वर में भी वही फ़ीचर चालू कर देता है।
यहाँ इस्तेमाल किया गया रास्ता:
websocketUrl पढ़ें।तीसरे स्टेप में कोई असंबंधित ब्राउज़र लॉन्च करने से बचें। दूसरा ब्राउज़र Steel से लौटे सेशन जैसा नहीं होगा, और आप एक पेज को इंस्पेक्ट करते रहेंगे जबकि आपका असली जॉब दूसरे में रुका रहेगा।
एक रनिंग, समर्पित Steel Local इंस्टेंस और Python 3.12 से शुरू करें। वेरिफ़ाइड सेटअप में Steel API 0.5.3 (रिपॉज़िटरी रिविज़न 8362bbd), Playwright 1.64.0 और macOS पर capsolver-core 0.1.1 का उपयोग किया गया।
अपने डिप्लॉयमेंट के लिए रिपॉज़िटरी की लोकल सेटअप इंस्ट्रक्शंस फ़ॉलो करें। यहाँ इस्तेमाल किए गए सोर्स‑बेस्ड सर्वर में API HOST=127.0.0.1, PORT=3300 और CDP_REDIRECT_PORT=9323 के साथ स्टार्ट हुई। ये टेस्ट एनवायरनमेंट के पोर्ट हैं, न कि ज़रूरी डिफ़ॉल्ट्स। अपना डेवलपमेंट API केवल इच्छित क्लाइंट से ही पहुँच योग्य रखें।
Python डिपेंडेंसीज़ एक आइज़ोलेटेड एनवायरनमेंट में इंस्टॉल करें:
python -m pip install "playwright==1.64.0" "capsolver-core==0.1.1" "httpx==0.28.1"
ब्राउज़र Steel स्टार्ट करता है, इसलिए यह क्लाइंट दूसरा Chromium इंस्टेंस लॉन्च नहीं करता। Playwright का CDP कनेक्शन मेथड पहले से चल रहे Chromium‑बेस्ड ब्राउज़र से अटैच होता है और उसका डिफ़ॉल्ट कॉन्टेक्स्ट एक्सपोज़ करता है।
क्लाइंट को लौटे WebSocket एड्रेस तक भी पहुँच चाहिए। अगर Steel किसी कंटेनर में या दूसरी मशीन पर चल रहा है, तो पक्का करें कि Python से वह एड्रेस रीचेबल हो; 127.0.0.1 उस मशीन को संदर्भित करता है जो कनेक्शन बना रही है।
नीचे दिए डिटेक्शन चेक के लिए किसी CapSolver क्रेडेंशियल की ज़रूरत नहीं है। वास्तविक सॉल्विंग के लिए आपकी खुद की वैध API की और अकाउंट रिसोर्सेज़ चाहिए होंगे। पेड सॉल्विंग, टोकन फ़िल‑बैक, और एप्लिकेशन ऐक्सेप्टेंस इस गाइड के लिए चलाए नहीं गए। उसे अपनी डिप्लॉयमेंट चेकलिस्ट में एक अलग वेरिफ़िकेशन स्टेप के रूप में रखें।
स्क्रिप्ट एक असली Steel सेशन बनाती है, उसके ब्राउज़र से कनेक्ट करती है, और आधिकारिक SDK के ज़रिए एक डेवलपमेंट विजेट पढ़ती है। इसे steel_sdk_check.py के नाम से सेव करें और Python से चलाएँ।
उदाहरण डिफ़ॉल्ट रूप से पोर्ट 3300 पर लोकल सर्वर मानकर चलता है। अगर आपका सर्वर कोई और एड्रेस उपयोग करता है, तो STEEL_URL सेट करें। समर्पित इंस्टेंस का उपयोग करें: सेशन का बनना और रिलीज़ होना उसी इंस्टेंस के सक्रिय ब्राउज़र सेशन को बदल देगा।
पेज Playwright रूट के ज़रिए सप्लाई होता है, इसलिए 8765 पोर्ट पर किसी वेब सर्वर की ज़रूरत नहीं। Google का विजेट स्क्रिप्ट फिर भी नेटवर्क ऐक्सेस माँगता है। पब्लिक साइट की, Google की reCAPTCHA टेस्टिंग गाइडेंस में डाक्यूमेंटेड है और डेवलपमेंट के लिए है, प्रोडक्शन के लिए नहीं।
import asyncio
import json
import os
import httpx
from capsolver_core import create_capsolver
from playwright.async_api import async_playwright
STEEL_URL = os.environ.get("STEEL_URL", "http://127.0.0.1:3300")
TEST_URL = "http://127.0.0.1:8765/"
HTML = """<!doctype html><html><head><title>Steel CAPTCHA check</title></head>
<body><h1>Owned development page</h1>
<div class="g-recaptcha" data-sitekey="6LeIxAcTAAAAAJcZVRqyHh71UMIEGNQ_MXjiZKhI"></div>
<script src="https://www.google.com/recaptcha/api.js" async defer></script>
</body></html>"""
async def main():
async with httpx.AsyncClient(base_url=STEEL_URL, timeout=90) as api:
response = await api.post("/v1/sessions", json={"headless": True})
response.raise_for_status()
session = response.json()
try:
async with async_playwright() as playwright:
browser = await playwright.chromium.connect_over_cdp(session["websocketUrl"])
try:
context = browser.contexts[0]
page = await context.new_page()
await page.route(TEST_URL, lambda route: route.fulfill(
content_type="text/html", body=HTML))
await page.goto(TEST_URL)
await page.wait_for_function(
"() => !!window.___grecaptcha_cfg && "
"Object.keys(window.___grecaptcha_cfg.clients || {}).length > 0",
timeout=30000)
async with create_capsolver() as cap:
infos = await cap.get_captcha_info(page)
result = [{"type": info.type.value,
"url": info.website_url,
"site_key": info.website_key} for info in infos]
print(json.dumps({"session_id": session["id"],
"captcha_parameters": result}))
assert result and result[0]["type"] == "reCaptchaV2"
finally:
await browser.close()
finally:
released = await api.post(f"/v1/sessions/{session['id']}/release")
released.raise_for_status()
print(json.dumps({"released": released.json().get("success")}))
if __name__ == "__main__":
asyncio.run(main())
चलाए गए चेक ने एक reCaptchaV2 डिस्क्रिप्टर लौटाया, जिसमें लोकल पेज URL और पब्लिक टेस्ट साइट की शामिल थी। अंतिम रिलीज़ रिस्पॉन्स ने true रिपोर्ट किया। ये ऑब्ज़र्वेशन असली Steel सेशन, CDP कनेक्शन, पेज ऐक्सेस और SDK के पैरामीटर‑रीडिंग रास्ते की पुष्टि करते हैं।
ये यह स्थापित नहीं करते कि किसी पेड CAPTCHA को हल किया गया। डेवलपमेंट की प्रोडक्शन चैलेंज नहीं है, और स्क्रिप्ट जानबूझकर कोई सॉल्यूशन टोकन रिक्वेस्ट नहीं करती।
कोड पेज को Steel के मौजूदा ब्राउज़र कॉन्टेक्स्ट में ही रखता है। क्लीनअप क्लाइंट कनेक्शन बंद करता है और डिटेक्शन फेल होने पर भी सर्वर से सेशन रिलीज़ करने को कहता है। अगर आप इसे किसी शेयर की हुई सर्विस में अपनाते हैं, तो सेशन लाइफ़टाइम की ज़िम्मेदारी एक ही कंपोनेंट को दें, ताकि असंबंधित जॉब्स एक‑दूसरे के काम के सेशन रिलीज़ न कर दें।
CAPTCHA सॉल्विंग कॉल को तब जोड़ें जब आपका अधिकृत एप्लिकेशन पेज अपना सपोर्टेड CAPTCHA लोड कर चुका हो, और ब्राउज़र कनेक्शन और SDK क्लाइंट अभी तक खुले हों। लोकल डेवलपमेंट फ़िक्स्चर को अपने एप्लिकेशन वर्कफ़्लो से बदलें; टेस्ट की को प्रोडक्शन इनपुट के रूप में उपयोग न करें।
SDK क्लाइंट को डाक्यूमेंटेड api_key ऑप्शन के साथ बनाएँ और यह क्रेडेंशियल अपनी अप्रूव्ड सीक्रेट कॉन्फ़िगरेशन से लोड करें। CapSolver चैलेंज रिक्वेस्ट को संभालता है; Steel ब्राउज़र सेशन का मालिक बना रहता है।
नीचे दी गई लाइन बिना बदला हुआ आधिकारिक ब्राउज़र‑मोड कॉल है। इसके लिए कॉन्फ़िगर्ड API की की ज़रूरत होती है, और इस Steel कनेक्शन के ज़रिए पेड एक्सीक्यूशन इस ट्यूटोरियल के लिए टेस्ट नहीं हुआ:
results = await cap.solve_on_page(page)
कॉल को लाइव क्लाइंट कॉन्टेक्स्ट के अंदर ही रखें। उदाहरण के क्लीनअप के बाद इसे पेस्ट करने से यह बंद ब्राउज़र और क्लाइंट का रेफ़रेंस बनने लगेगा।
वर्कफ़्लो आगे बढ़ाने से पहले हर रिटर्न किए गए रिज़ल्ट को इंस्पेक्ट करें। SDK, error, संभव solution और filled के ज़रिए यह रिपोर्ट करता है कि फ़िल‑बैक हुआ या नहीं। खाली रिज़ल्ट या गायब सॉल्यूशन इस बात का सबूत नहीं हैं कि आपका एप्लिकेशन CAPTCHA पास कर गया।
Core SDK का डाक्यूमेंटेड टोकन मोड reCAPTCHA v2/v3 और Cloudflare Turnstile को कवर करता है। यह न मानें कि वही कॉल CapSolver API में और कहीं लिस्ट किए हर चैलेंज टाइप को सॉल्व कर देती है। reCAPTCHA v2 टास्क डाक्यूमेंटेशन में उस सपोर्टेड रास्ते की टास्क‑स्पेसिफ़िक आवश्यकताएँ दी गई हैं।
वर्कफ़्लो तभी पूरा होता है जब एप्लिकेशन अपने इच्छित स्टेट तक पहुँच जाए। टोकन रिस्पॉन्स, भरा हुआ फ़ील्ड, और सफल फ़ॉर्म सबमिशन—ये तीनों अलग‑अलग ऑब्ज़र्वेशन हैं।
जिस एप्लिकेशन को आप कंट्रोल करते हैं, उसके लिए कोई ठोस सफलता सिग्नल चुनें, जैसे कन्फ़र्मेशन मैसेज या अपेक्षित रिस्पॉन्स। नॉर्मल फ़ॉर्म ऐक्शन के बाद उसी सिग्नल का इंतज़ार करें। अगर वह न दिखे, तो बिना समझे‑बूझे दोहराए गए सॉल्विंग रिक्वेस्ट भेजने के बजाय एप्लिकेशन रिस्पॉन्स को इंस्पेक्ट करें।
ऑपरेशन के दौरान पेज आइडेंटिटी स्थिर रखें। सॉल्व चलते समय नेविगेट न करें, टैब बंद न करें, या सेशन रिलीज़ न करें। अगर एप्लिकेशन विजेट को फिर से लोड करता है, तो पुराने पेज स्टेट की बजाय मौजूदा चैलेंज को दोबारा इंस्पेक्ट करें।
CAPTCHA शब्दावली वेरिफ़िकेशन कॉन्सेप्ट को समझाती है, जबकि CAPTCHA टोकन और कुकीज़ पर गाइड अलग‑अलग आउटपुट में फ़र्क़ समझने में मदद करता है। न कोई ब्राउज़र कुकी और न ही टोकन स्ट्रिंग, आपके एप्लिकेशन की सफलता चेक का विकल्प होना चाहिए।
ट्रबलशूटिंग वहीँ से शुरू करें जहाँ सबसे पहला ऑपरेशन फेल हुआ हो, ताकि कनेक्शन प्रॉब्लम फालतू सॉल्वर रिक्वेस्ट में न बदल जाएँ।
| लक्षण | क्या जाँचें |
|---|---|
| सेशन क्रिएशन फेल | कन्फ़र्म करें कि Steel API चल रहा है और HTTP स्टेटस व सर्वर लॉग इंस्पेक्ट करें। |
| CDP कनेक्शन फेल | देखें websocketUrl Python प्रोसेस से रीचेबल है और मौजूदा सेशन का ही है या नहीं। |
| विजेट कभी इनिशियलाइज़ नहीं होता | ब्राउज़र से Google की डेवलपमेंट स्क्रिप्ट तक ऐक्सेस चेक करें और कन्फ़र्म करें कि अपेक्षित पेज लोड हुआ। |
| डिटेक्शन कोई डिस्क्रिप्टर नहीं देता | कोई पेड सॉल्व करने से पहले मौजूदा पेज और सपोर्टेड CAPTCHA टाइप इंस्पेक्ट करें। |
| सॉल्यूशन रिटर्न हुआ लेकिन वर्कफ़्लो अटक गया | फ़िल‑बैक, नॉर्मल एप्लिकेशन ऐक्शन और एप्लिकेशन रिस्पॉन्स चेक करें। |
| दूसरे जॉब का ब्राउज़र सेशन खो जाता है | लोकल इंस्टेंस शेयर करने से पहले सेशन ओनरशिप और रिलीज़ कॉल्स रिव्यू करें। |
डायग्नॉस्टिक लॉग छोटे रखें। स्टेज और रिडैक्टेड एरर रिकॉर्ड करें, न कि API कीज़, रिस्पॉन्स टोकन या पूरा ब्राउज़र स्टोरेज। पहले किसी एक पेज पर टेस्ट करें, और रिट्राइ बिहेवियर तभी जोड़ें जब किसी ऐसी टेम्पररी विफलता की पहचान हो जाए जिसे रिट्राइ वाजिब तौर पर ठीक कर सकता हो।
Steel Local इंटीग्रेशन को मैनेज्ड ब्राउज़र पेज से CAPTCHA ऑपरेशन तक एक साफ़‑सुथरा हैंडऑफ़ चाहिए। काम करता हुआ कनेक्शन चेक यह हैंडऑफ़ बिना पेड रिक्वेस्ट के स्थापित करता है। प्रोडक्शन में जाने से पहले, अपनी क्रेडेंशियल से सॉल्विंग वेरिफ़ाई करें और अधिकृत एनवायरनमेंट पर एप्लिकेशन का नतीजा भी चेक करें।
सेशन को उसके अपने काम के लिए खुला रखें और काम पूरा होते ही रिलीज़ कर दें। इससे आपको ट्रबलशूटिंग और भविष्य के पैकेज अपग्रेड, दोनों के लिए एक उपयोगी सीमा मिलती है।
अपने Steel वर्कफ़्लो में सपोर्टेड CAPTCHA स्टेप पर CapSolver को कनेक्ट करें। वेरिफ़ाइड डिटेक्शन पाथ से शुरू करें, फिर अपनी क्रेडेंशियल‑बेस्ड ऑपरेशन को वेलिडेट करके ही वर्कलोड बढ़ाएँ।
CapSolver आज़माएँ। कैंपेन की शर्तों के तहत 5% बोनस के लिए बोनस कोड CAP26 उपयोग करें।

प्र.: क्या सेल्फ‑होस्टेड Steel Browser अपने‑आप CAPTCHA सॉल्व कर देता है?
नहीं। Steel की आधिकारिक तुलना में Steel Local के लिए कोई बिल्ट‑इन CAPTCHA सॉल्विंग लिस्ट नहीं है। क्लाउड प्रोडक्ट की सॉल्विंग फ़ीचर एक अलग क्षमता है।
प्र.: क्या इस उदाहरण के लिए मुझे Steel Cloud अकाउंट चाहिए?
नहीं। उदाहरण किसी रनिंग लोकल इंस्टेंस से कनेक्ट होता है। उसे स्टार्ट करने और चलाने की ज़िम्मेदारी आपकी ही है।
प्र.: Playwright Chromium लॉन्च करने के बजाय CDP से कनेक्ट क्यों करें?
CDP, Steel द्वारा मैनेज किए गए ब्राउज़र से Python को अटैच कर देता है। दूसरा ब्राउज़र लॉन्च करने से अलग सेशन बन जाएगा, जो इस उदाहरण के इरादे वाले सेशन से अलग होगा।
प्र.: क्या डिटेक्शन चेक CapSolver क्रेडिट ख़र्च करता है?
जांच केवल विजेट पैरामीटर पढ़ती है और कोई पेड सॉल्विंग रिक्वेस्ट नहीं करती। अलग सॉल्विंग कॉल के लिए एक वैध CapSolver क्रेडेंशियल की आवश्यकता होती है।
प्रश्न: क्या यहां पूरा पेड-सॉल्विंग फ्लो टेस्ट किया गया है?
नहीं। वास्तविक रन ने सेशन क्रिएशन, CDP कनेक्शन, SDK डिटेक्शन और रिलीज़ को वेरिफाई किया। पेड सॉल्विंग, फिल-बैक, और एप्लिकेशन एक्सेप्टेंस के लिए अब भी एक अलग क्रेडेंशियल्ड टेस्ट की ज़रूरत है।
प्रश्न: क्या यह आधिकारिक Steel पार्टनरशिप या नेटिव इंटीग्रेशन है?
नहीं। यह Steel के पब्लिक ब्राउज़र इंटरफेस और CapSolver के ऑफिशियल SDK का उपयोग करने वाला एक टेस्टेड कनेक्शन उदाहरण है। यह भविष्य के रिलीज़ के लिए कोई पार्टनरशिप या कंपैटिबिलिटी गारंटी स्थापित नहीं करता।

Rajinder Singh
Deep Learning Researcher
Making CAPTCHA solving more reliable in automated workflows.
लेखक के बारे में
Rust में वेब स्क्रैपिंग के स्केलेबल आर्किटेक्चर सीखें, reqwest, scraper, असिंक्रोनस स्क्रैपिंग, हेडलेस ब्राउज़र स्क्रैपिंग, प्रॉक्सी रोटेशन, और संगत CAPTCHA का निपटारा।

CapSolver के साथ RoxyBrowser के एकीकरण करें ताकि ब्राउज़र के कार्यों को स्वचालित किया जा सके और reCAPTCHA, Turnstile और अन्य CAPTCHAs को बायपास किया जा सके।
