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

Robot Framework का कोई ब्राउज़र टेस्ट असफल हो सकता है क्योंकि पेज वह कंटेंट दिखाने के बजाय CAPTCHA दिखा रहा हो, जिसकी अगली assertion अपेक्षा कर रही थी। सिर्फ़ generic timeout बढ़ाने से इस बदलाव को समझाया नहीं जा सकता। एक विशेष CAPTCHA जाँच टेस्ट को उपयोगी परिणाम दे सकती है: उस challenge का प्रकार और पैरामीटर, जिनकी किसी अनुमोदित solver वर्कफ़्लो को आवश्यकता होगी।
Robot Framework एक ओपन‑सोर्स फ़्रेमवर्क है जो acceptance testing और robotic process automation के लिए उपयोग होता है। इसकी कीवर्ड सिंटैक्स टीमों को चेक लिखने देती है, जबकि Python लाइब्रेरीज़ असल ऑपरेशनों को इम्प्लीमेंट करती हैं। यह ट्यूटोरियल एक Python कीवर्ड को CapSolver के आधिकारिक Core SDK से जोड़ता है और यह सुनिश्चित करता है कि Robot को ब्राउज़र पेज से वास्तविक detection परिणाम मिल रहे हैं।
CAPTCHA detection किसी ज्ञात पेज चेकपॉइंट पर होनी चाहिए, उससे पहले कि टेस्ट ब्लॉक की गई पेज को सामान्य एप्लिकेशन रेस्पॉन्स मान ले।
उदाहरण के लिए, किसी अनुमत ब्राउज़र वर्कफ़्लो को एक सर्च फ़ॉर्म की अपेक्षा होती है, लेकिन उसकी जगह challenge मिल जाता है। उपयोगी पहला सवाल यह है कि क्या कोई समर्थित CAPTCHA मौजूद है। फिर recognition परिणाम अगला नियंत्रित कदम तय कर सकता है: documented solving integration का उपयोग, मानव हस्तक्षेप के लिए रुकना, या किसी विशेष टेस्ट‑फ़ेल्योर को रिकॉर्ड करना।
यह हर missing element को CAPTCHA मान लेने से अलग है। कोई पेज इस वजह से भी असफल हो सकता है कि उसकी एप्लिकेशन स्क्रिप्ट लोड नहीं हुई, उसका route बदल गया, या कोई selector ग़लत है। CAPTCHA detection को इन निदानों से अलग रखें।
Robot Framework user guide Python टेस्ट लाइब्रेरीज़ और कीवर्ड execution को डॉक्यूमेंट करता है। नीचे दी गई छोटी लाइब्रेरी उसी एक्सटेंशन पॉइंट का उपयोग करती है। यह एक उदाहरण इंटीग्रेशन है, यह दावा नहीं कि Robot Framework किसी native CapSolver लाइब्रेरी के साथ आता है।
Robot Framework, Playwright और Core SDK को एक ही Python environment में इंस्टॉल करें ताकि टेस्ट रनर सभी को इम्पोर्ट कर सके।
उदाहरण में Python 3.12, Robot Framework 7.5, Playwright 1.64.0 और capsolver-core 0.1.1 उपयोग किए गए हैं। फ़्रेमवर्क की official repository इसके प्रोजेक्ट बैकग्राउंड और समर्थित इंस्टॉलेशन तरीकों का स्रोत है।
python -m pip install robotframework==7.5 playwright==1.64.0 capsolver-core==0.1.1
python -m playwright install chromium
इंस्टॉलेशन और टेस्ट, दोनों के लिए एक ही interpreter उपयोग करें। एक आम सेटअप‑त्रुटि यह है कि ब्राउज़र लाइब्रेरी को एक environment में इंस्टॉल किया जाता है और Robot दूसरे से चलाया जाता है। तब import पेज खुलने से पहले ही असफल हो जाता है।
यह उदाहरण केवल एक widget को detect करता है और उसके public पैरामीटर पढ़ता है। पेड solving के लिए एक वैध solver API key, अकाउंट readiness, और अलग से अनुमोदित वर्कफ़्लो की आवश्यकता होगी। नीचे दिया गया टेस्ट कोई पेड परिणाम उत्पन्न नहीं करता।
index.html को किसी समर्पित fixture डायरेक्टरी में बनाएँ और उसे अपनी मशीन पर सर्व करें।
Google अपनी automated testing guidance में सार्वजनिक reCAPTCHA v2 टेस्ट‑की डॉक्यूमेंट करता है। यह fixture उसी की का उपयोग करता है ताकि किसी प्रोडक्शन साइट की कॉन्फ़िगरेशन के बिना ही एक पहचानने योग्य widget लोड किया जा सके।
<!doctype html><html><head><title>Owned CAPTCHA test fixture</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>
उस डायरेक्टरी से एक लोकल सर्वर शुरू करें:
python -m http.server 8766 --bind 127.0.0.1
Widget स्क्रिप्ट को अभी भी Google तक नेटवर्क एक्सेस चाहिए। यदि fixture का widget लोड नहीं होता, तो किसी खाली detection परिणाम की व्याख्या करने से पहले इस पूर्व‑आवश्यकता की जाँच करें। लोकल सर्वर fixture को केवल loopback इंटरफ़ेस पर एक्सपोज़ करता है।
कोई टेस्ट‑की wiring और recognition की जाँच के लिए उपयोगी होती है। यह प्रोडक्शन challenge की कठिनाई, पेड solving performance, या एप्लिकेशन acceptance के लिए प्रतिनिधिक सबूत नहीं है। इन्हें रिलीज़ चेकलिस्ट में अलग‑अलग टेस्ट के रूप में रखें।
निम्न लाइब्रेरी को CaptchaCheck.py नाम से अपने Robot टेस्ट फ़ाइल के पास सेव करें।
यह लाइब्रेरी Core SDK के documented get_captcha_info मेथड को कॉल करती है। Robot‑विशेष wrapper जानबूझकर छोटा रखा गया है: यह एक event loop शुरू करता है, ब्राउज़र खोलता है, जानकारी पढ़ता है, और finally ब्लॉक में ब्राउज़र बंद करता है।
import asyncio
from robot.api.deco import keyword
from capsolver_core import create_capsolver
from playwright.async_api import async_playwright
@keyword("Inspect CAPTCHA Page")
def inspect_captcha_page(url):
return asyncio.run(_inspect(url))
async def _inspect(url):
async with async_playwright() as pw:
browser = await pw.chromium.launch(headless=True)
try:
page = await browser.new_page()
await page.goto(url, wait_until="networkidle")
async with create_capsolver() as cap:
infos = await cap.get_captcha_info(page)
return [{"type": item.type.value, "url": item.website_url,
"site_key": item.website_key} for item in infos]
finally:
await browser.close()
रिटर्न किया गया लिस्ट plain dictionaries से बना होता है, जो Robot assertions के लिए सुविधाजनक है। खाली लिस्ट का अर्थ है कि इस inspection ने कोई matching जानकारी नहीं पाई। इसे यह दावा बनाने में न बदलें कि वर्कफ़्लो में कहीं भी कोई संभव challenge मौजूद नहीं है।
यह page‑load wait इस छोटे fixture के लिए उचित है। कोई प्रोडक्शन एप्लिकेशन, जिसमें स्थायी network activity है, को अलग, पेज‑विशेष readiness condition की आवश्यकता हो सकती है। networkidle को हर एप्लिकेशन में कॉपी न करें और यह न मान लें कि इससे साबित होता है कि सम्बंधित widget ने रेंडरिंग पूरी कर ली है।
अपना CapSolver Bonus Code रिडीम करें
अपना automation बजट तुरंत बढ़ाएँ!
CapSolver अकाउंट टॉप‑अप करते समय bonus code CAP26 उपयोग करें और हर recharge पर अतिरिक्त 5% बोनस पाएँ — बिना किसी सीमा के।
इसे अभी अपने CapSolver Dashboard में रिडीम करें।
निम्न सामग्री को captcha.robot नाम से लाइब्रेरी के पास सेव करें और तब चलाएँ जब लोकल fixture सर्वर उपलब्ध हो।
*** Settings ***
Library CaptchaCheck.py
Library Collections
*** Variables ***
${PAGE_URL} http://127.0.0.1:8766/
*** Test Cases ***
Identify The Fixture CAPTCHA
${items}= Inspect CAPTCHA Page ${PAGE_URL}
Should Not Be Empty ${items}
${first}= Get From List ${items} 0
Should Be Equal ${first}[type] reCaptchaV2
Log ${items}
python -m robot --outputdir results captcha.robot
टेस्ट यह assert करता है कि detector ने कोई परिणाम लौटाया और fixture को reCaptchaV2 के रूप में पहचाना गया। इसकी लॉग में रिटर्न किया गया page URL और public sitekey मौजूद होते हैं। Robot द्वारा जनरेट की गई report बताएगी कि ये assertions पास हुए या नहीं।
कोई पास एक विशिष्ट chain स्थापित करता है: Robot ने आपका Python कीवर्ड invoke किया, Playwright ने fixture खोला, Core SDK ने असली पेज का निरीक्षण किया, और लौटाया हुआ डेटा Robot की assertions तक पहुँचा। कोड अपवाद होने पर भी ब्राउज़र बंद कर देता है।
विफलताओं को उसी चरण पर पढ़ें जहाँ वे होती हैं। कोई import error dependency समस्या है। कोई navigation error page‑access समस्या है। timeout का अर्थ हो सकता है कि fixture ठीक से settle नहीं हुआ। type assertion असफल होने का अर्थ है कि लौटाया हुआ डेटा fixture अपेक्षा से मेल नहीं खाता। इन स्थितियों के लिए अलग‑अलग सुधारों की आवश्यकता होती है।
Detection solver निर्णय के लिए जानकारी देती है, लेकिन अगला कदम उस page context को सुरक्षित रखे जो task को चाहिए।
Official SDK guide ब्राउज़र solving को अलग ऑपरेशन के रूप में वर्णित करता है। यदि आपके प्रोडक्शन वर्कफ़्लो को उसी पेज पर solve करना और आगे बढ़ना आवश्यक है, तो उस पेज और उसके ब्राउज़र context को पूरे ऑपरेशन के दौरान जीवित रखें। इस लेख का diagnostic कीवर्ड अपना ब्राउज़र बंद कर देता है, इसीलिए यह किसी मौजूदा logged‑in सेशन के लिए drop‑in continuation स्टेप नहीं है।
SeleniumLibrary या Robot Framework Browser पहले से उपयोग कर रही टीमें भी अपने active ब्राउज़र और इस उदाहरण द्वारा खोले गए ब्राउज़र में अंतर स्पष्ट रखें। किसी URL को साझा करने का अर्थ cookies, prior interactions या page object को साझा करना नहीं है। यह दावा करने से बचें कि challenge टेस्ट के active ब्राउज़र में solve हुआ, जबकि असल काम किसी दूसरे ब्राउज़र में हुआ।
साधारण owned‑site regression tests के लिए provider टेस्ट‑keys अक्सर सरल विकल्प होते हैं। वास्तविक solver path का उपयोग केवल तब करें जब टेस्ट उद्देश्य उस integration को validate करना हो। reCAPTCHA test‑key guide इस सीमा को और विस्तार से समझाता है।
किसी पहचाने गए CAPTCHA और generic element failure के बीच अंतर करने के लिए एक छोटा, स्पष्ट checkpoint उपयोग करें। CapSolver इस उदाहरण में detection क्षमता देता है; Robot Framework उसके परिणाम को पठनीय टेस्ट assertion में बदल देता है। पेड solving को केवल एक अलग से सत्यापित स्टेप के रूप में जोड़ें, जहाँ सही page ownership और एप्लिकेशन outcome चेक शामिल हों।
प्र: क्या यह Robot टेस्ट CAPTCHA को हल करता है?
नहीं। यह fixture के CAPTCHA को detect करता है और उसके public पैरामीटर लौटाता है। टेस्ट न तो कोई पेड solution अनुरोध करता है और न ही किसी प्रोडक्शन फ़ॉर्म सबमिशन की पुष्टि करता है।
प्र: क्या यह कोई आधिकारिक Robot Framework प्लगइन है?
नहीं। Python कीवर्ड wrapper Robot Framework की documented लाइब्रेरी मेकैनिज़्म और आधिकारिक Core SDK के इर्द‑गिर्द बना एक उदाहरण है। ठीक‑ठीक wrapper शामिल किया गया है ताकि उसका व्यवहार inspect किया जा सके।
प्र: क्या मैं यही कीवर्ड SeleniumLibrary वाले टेस्ट के अंदर उपयोग कर सकता हूँ?
आप कीवर्ड को कॉल कर सकते हैं, लेकिन यह अलग Playwright ब्राउज़र खोलता है। यह SeleniumLibrary के ब्राउज़र सेशन का निरीक्षण या उसे आगे जारी नहीं रखता। किसी existing‑session इंटीग्रेशन के लिए स्पष्ट, समर्थित handoff की आवश्यकता होगी।
प्र: fixture खाली लिस्ट क्यों लौटाती है?
जाँचें कि widget स्क्रिप्ट लोड हुई या नहीं, अपेक्षित पेज सर्व हो रहा है या नहीं, और SDK उस मौजूद challenge को सपोर्ट करता है या नहीं। अकेला empty result कारण की पहचान नहीं करता।
प्र: क्या मुझे इस उदाहरण के लिए solver API key की ज़रूरत है?
दिखाई गई parameter‑detection जाँच कोई पेड solving task सबमिट नहीं करती। प्रोडक्शन solving स्टेप के लिए उस ऑपरेशन के लिए डॉक्यूमेंट की गई credentials और पूर्व‑आवश्यकताएँ चाहिए होंगी।
प्र: क्या हर automated टेस्ट को CAPTCHA solver को कॉल करना चाहिए?
नहीं। जहाँ उपयुक्त हो, routine owned‑site regression tests के लिए provider की टेस्ट‑मैकेनिज़्म का उपयोग करें। solver integration टेस्ट्स को केवल उस वर्कफ़्लो तक सीमित रखें जिन्हें वे validate करने के लिए बनाए गए हों, और उन्हें सीमाबद्ध रखें।

Rajinder Singh
Deep Learning Researcher
Making CAPTCHA solving more reliable in automated workflows.
लेखक के बारे में
पता लगाएँ कि एक दृश्य CAPTCHA iframe के अंदर क्यों छूट रहा है। दस्तावेज़ संदर्भ, विजेट लोडिंग, साइट पैरामीटर, और आपके सॉल्वर तक ब्राउज़र की हैंडऑफ़ की जाँच करें।

Node.js CAPTCHA परीक्षणों की योजना विक्रेता के टेस्ट कीज़, नियंत्रित सॉल्वर जाँचों और स्पष्ट अभिकथनों के साथ बनाएं। फ़ॉर्म रिग्रेशन को बाहरी सॉल्विंग विफलताओं से अलग रखें।
