
Rajinder Singh
Deep Learning Researcher

sessions: write अनुमति नहीं है, जो 403 लौटाती है, और टूल के पहले पैरामीटर पर पायडेंट बेसमॉडल अनोटेशन की कमी है, जो एक ValidationError ट्रिगर करती है।इस गाइड में CapSolver को कॉम्पोसियो के रूप में एक एजेंट टूल के रूप में एक reCAPTCHA v2 वर्कफ़्लो पूरा करने के लिए एकजुट किया गया है। टोकन के बजाय, टूल पूरा पेज अनुक्रम चलाता है और पेज के वास्तविक प्रतिक्रिया को सफलता की स्थिति के रूप में लेता है। [ओपनएआई एजेंट सीडीके] (https://www.capsolver.com/blog/ai/how-to-solve-recaptcha-in-openai-agents-sdk) निर्णय लेता है कि किस टूल को कॉल करना है, जबकि [प्लेयराइट ब्राउज़र ऑटोमेशन] (https://www.capsolver.com/integration/playwright-captcha-solver) प्रस्तुति और सत्यापन के लिए उपयोग किए गए पेज संदर्भ को सीधा रखता है।
कानूनी, तार्किक, जिम्मेदार और उपयोगकर्ता-अनुमोदित वर्कफ़्लो के लिए ही इस पैटर्न का उपयोग करें। तकनीकी क्षमता निजी, सीमित, संवेदनशील या अनुमोदित डेटा तक पहुंच के अनुमति नहीं देती है; डेप्लॉयमेंट से पहले संबंधित [AI ऑटोमेशन गाइडेंस] (https://www.capsolver.com/faq/ai-and-automation) की समीक्षा करें।
वर्कफ़्लो:
स्क्रिप्ट चलाएं
-> ओपनएआई एजेंट सीडीके निर्णय लेता है कि कौन सा टूल कॉल करना है
-> कॉम्पोसियो कस्टम टूल: complete_recaptcha_v2
-> प्लेयराइट पेज खोलता है
-> capsolver.solve(...) ग्रेकैपचा रिस्पॉन्स लौटाता है
-> टोकन को g-रिकैपचा-रिस्पॉन्स में लागू करें
-> प्लेयराइट जमा करता है और पेज की प्रतीक्षा करता है
-> पेज को पढ़ें और स्वीकृति निर्धारित करें
-> टूल {"स्वीकृत": ..., "संदेश": ...} लौटाता है
-> एजेंट स्वीकृति से परिणाम रिपोर्ट करता है
घटकों की निम्नलिखित जिम्मेदारियां हैं:
| घटक | जिम्मेदारी |
|---|---|
| ओपनएआई एजेंट सीडीके | प्राकृतिक-भाषा निर्देशों को समझता है, टूल कॉल कब करना है निर्णय लेता है, इसे चलाता है और प्रतिक्रिया संगठित करता है |
| कॉम्पोसियो | एक मानक पायथन कार्यक्रम को एजेंट-कॉल करने योग्य टूल के रूप में पंजीकृत करता है |
| प्लेयराइट | पेज खोलता है, परिणाम लागू करता है, फॉर्म जमा करता है और परिणामी पेज स्थिति पढ़ता है |
| कैपसॉल्वर सीडीके | एक ही solve() कॉल के माध्यम से कैप्चा परिणाम लौटाता है |
pip install composio composio-openai-agents openai-agents capsolver pydantic playwright
playwright install chromium
प्रत्येक निर्भरता एक विशिष्ट भूमिका निभाती है:
| पैकेज | उद्देश्य |
|---|---|
| composio | सेशन बनाता है और कस्टम टूल्स को पंजीकृत करता है या लोड करता है |
| composio-openai-agents | कॉम्पोसियो टूल्स को ओपनएआई एजेंट द्वारा कॉल करने योग्य वस्तुओं में परिवर्तित करता है |
| openai-agents | एजेंट, रनर, और एसक्यूएलआईटीएम बहु-बार याददाश्त प्रदान करता है |
| capsolver | आधिकारिक सीडीके के माध्यम से परिणाम लौटाता है और solve() के माध्यम से एक लौटाता है |
| pydantic | टूल इनपुट स्कीमा परिभाषित करता है |
| playwright | पेज खोलता है, परिणाम लागू करता है, फॉर्म जमा करता है और प्रतिक्रिया पढ़ता है |
# एपीआई कुंजियाँ।
COMPOSIO_API_KEY = "ak_..."
OPENAI_API_KEY = "sk-..." # आपका आधिकारिक ओपनएआई एपीआई कुंजी।
os.environ["OPENAI_API_KEY"] = OPENAI_API_KEY # ओपनएआई सीडीके एपीआई कुंजी को वातावरण से पढ़ता है।
# कैपसॉल्वर और कॉम्पोसियो को कॉन्फ़िगर करें।
capsolver.api_key = "CAP-..."
composio = Composio(
api_key=COMPOSIO_API_KEY,
provider=OpenAIAgentsProvider(),
)
कॉन्फ़िगरेशन नोट्स:
OPENAI_API_KEYको वातावरण में लिखा जाना आवश्यक है क्योंकि सीडीके इसे वातावरण से पढ़ता है;OpenAIAgentsProvidersession.tools()द्वारा लौटाए गए टूल्स को एजेंट के साथ संगत बनाता है; और कॉम्पोसियो कुंजी के पासsessions: writeअनुमति होनी चाहिए या सत्र बनाना 403 लौटाता है।
वर्तमान कॉम्पोसियो ओपनएआई प्रदाता और ओपनएआई एजेंट सीडीके संदर्भ इस कॉन्फ़िगरेशन द्वारा उपयोग किए गए प्रदाता और एजेंट सीमा की व्याख्या करते हैं।
अपने कैपसॉल्वर बोनस कोड के लिए बर्न करें
अपने स्वचालन बजट को तत्काल बढ़ाएं!
कैपसॉल्वर खाता में अपने खाते को बढ़ाते समय बोनस कोड CAP26 का उपयोग करें जो प्रत्येक भरोसे पर 5% बोनस देता है — कोई सीमा नहीं।
अपने [कैपसॉल्वर डैशबोर्ड] (https://dashboard.capsolver.com/dashboard/overview/?utm_source=offcial&utm_medium=blog&utm_campaign=integrate-capsolver-composio-ai-browser-automation) में अब इसे बर्न करें
रोकने की स्थिति: टूल केवल तभी सफलता की रिपोर्ट करता है जब पेज में अपेक्षित सफलता पाठ होता है।
finallyब्लॉक दोनों सफलता और विफलता मार्ग में ब्राउज़र को बंद करता है।
import os
from typing import List, cast
import capsolver
from agents import Agent, Runner, SQLiteSession
from composio import Composio
from composio.core.models.custom_tool import CustomTool
from composio.core.models.tool_router import ToolRouterExperimentalConfig
from composio_openai_agents import OpenAIAgentsProvider
from playwright.sync_api import sync_playwright
from pydantic import BaseModel, Field
# एपीआई कुंजियाँ।
COMPOSIO_API_KEY = "ak_..."
OPENAI_API_KEY = "sk-..." # आपका आधिकारिक ओपनएआई एपीआई कुंजी।
os.environ["OPENAI_API_KEY"] = OPENAI_API_KEY
# कैपसॉल्वर और कॉम्पोसियो को कॉन्फ़िगर करें।
capsolver.api_key = "CAP-..."
composio = Composio(
api_key=COMPOSIO_API_KEY,
provider=OpenAIAgentsProvider(),
)
# कस्टम टूल के लिए इनपुट स्कीमा; कॉम्पोसियो के लिए पायडेंट बेसमॉडल आवश्यक है।
class CompleteRecaptchaInput(BaseModel):
target_url: str = Field(
default="https://www.google.com/recaptcha/api2/demo",
description="reCAPTCHA v2 डेमो वाला पेज URL",
)
website_key: str = Field(
default="6Le-wvkSAAAAAPBMRTvw0Q4Muexq9bi0DJwx_mJ-",
description="वर्तमान पृष्ठ से reCAPTCHA v2 वेबसाइट कुंजी",
)
# पूरा फ्लो एक कॉम्पोसियो टूल के रूप में पंजीकृत करें जिसे एजेंट कॉल कर सकता है।
# पहले पैरामीटर के प्रकार अनोटेशन की आवश्यकता होती है क्योंकि कॉम्पोसियो इसके माध्यम से स्कीमा निर्मित करता है।
@composio.experimental.tool(preload=True)
def complete_recaptcha_v2(input: CompleteRecaptchaInput, _ctx):
"""प्लेयराइट के साथ पृष्ठ खोलें, reCAPTCHA v2 हल करें, जमा करें और सत्यापित करें।"""
with sync_playwright() as p:
browser = p.chromium.launch(headless=False) # headless=True खिड़की छिपाने के लिए सेट करें।
page = browser.new_page()
try:
page.goto(input.target_url)
# कैपसॉल्वर से reCAPTCHA v2 चुनौती हल करने के लिए पूछें।
solution = capsolver.solve(
{
"type": "ReCaptchaV2TaskProxyLess",
"websiteURL": input.target_url,
"websiteKey": input.website_key,
}
)
token = solution.get("gRecaptchaResponse")
page.evaluate(
"""
(token) => {
const textarea = document.getElementById('g-recaptcha-response');
if (textarea) {
textarea.value = token;
}
}
""",
token,
)
page.click("#recaptcha-demo-submit")
page.wait_for_load_state("networkidle")
result_page = page.content()
# सफलता केवल तभी होती है जब पृष्ठ वास्तव में सफलता पाठ दिखाता है
accepted = "Verification Success" in result_page
return {
"accepted": accepted,
"message": (
"Verification Success"
if accepted
else "पृष्ठ ने Verification Success रिपोर्ट नहीं किया"
),
}
finally:
browser.close()
def main():
experimental: ToolRouterExperimentalConfig = {
"custom_tools": cast(List[CustomTool], [complete_recaptcha_v2]),
}
session = composio.sessions.create(
user_id="playwright-recaptcha-demo-user",
experimental=experimental,
sandbox={"enable": False}, # टूल को इस प्रक्रिया में चलाएं, एक सैंडबॉक्स में नहीं।
)
agent = Agent(
name="Playwright reCAPTCHA सहायक",
instructions=(
"जब उपयोगकर्ता डेमो चलाने के लिए कहता है, तो डिफ़ॉल्ट मानों के साथ complete_recaptcha_v2 कॉल करें। स्वीकृति सत्य होने पर ही सफलता रिपोर्ट करें।"
),
model="gpt-5.2",
tools=session.tools(),
)
# बहु-बार बातचीत के लिए मेमोरी
memory = SQLiteSession("conversation")
print("Composio + Playwright reCAPTCHA v2 डेमो एक बार चल रहा है...")
user_input = (
"डिफ़ॉल्ट target_url और website_key के साथ complete_recaptcha_v2 अब कॉल करें। पुष्टि न मांगें।"
)
result = Runner.run_sync(
starting_agent=agent,
input=user_input,
session=memory,
)
print(f"सहायक: {result.final_output}\n")
if __name__ == "__main__":
main()
समान पैटर्न एक मानक छवि-पाठ CAPTCHA के साथ काम कर सकता है जब एक दूसरा कॉम्पोसियो टूल पंजीकृत करता है। इस उदाहरण में BotDetect CAPTCHA डेमो का उपयोग किया गया है: छवि तत्व #demoCaptcha_CaptchaImage, इनपुट #captchaCode है, और सत्यापन बटन #validateCaptchaButton है।

ImageToTextTask अनुरोध में body के माध्यम से बेस64 छवि प्रस्तुत करता है। टोकन-आधारित कार्यों के विपरीत, इस कार्य के परिणाम में सीधे पहचाने गए पाठ लौटाए जाते हैं और अलग से पॉलिंग लूप की आवश्यकता नहीं होती है।
image_src = page.locator("#demoCaptcha_CaptchaImage").get_attribute("src")
if not image_src or "," not in image_src:
raise RuntimeError("एक वैध कैप्चा छवि डेटा यूआरएल नहीं मिला")
base64_image = image_src.split(",", 1)[1] # "data:image/...;base64," प्रारूप को हटाएं।
class CompleteImageCaptchaInput(BaseModel):
target_url: str = Field(
default="https://captcha.com/demos/features/captcha-demo.aspx",
description="छवि कैप्चा डेमो पृष्ठ URL",
)
module: str = Field(
default="common",
description="कैपसॉल्वर ImageToTextTask स्वीकृति मॉड्यूल",
)
@composio.experimental.tool(preload=True)
def complete_image_captcha(input: CompleteImageCaptchaInput, _ctx):
"""प्लेयराइट के साथ पृष्ठ खोलें, छवि कैप्चा स्वीकृति करें, जमा करें और सत्यापित करें।"""
with sync_playwright() as p:
browser = p.chromium.launch(headless=False)
page = browser.new_page()
try:
page.goto(input.target_url)
page.wait_for_selector("#demoCaptcha_CaptchaImage", state="visible")
# छवि स्रोत पहले से ही डेटा यूआरएल है; प्रारूप को हटाकर बेस64 प्राप्त करें।
image_src = page.locator("#demoCaptcha_CaptchaImage").get_attribute("src")
if not image_src or "," not in image_src:
raise RuntimeError("एक वैध कैप्चा छवि डेटा यूआरएल नहीं मिला")
base64_image = image_src.split(",", 1)[1]
solution = capsolver.solve(
{
"type": "ImageToTextTask",
"websiteURL": input.target_url,
"module": input.module,
"body": base64_image,
}
)
captcha_text = solution.get("text")
if not isinstance(captcha_text, str) or not captcha_text:
raise RuntimeError("कैपसॉल्वर ने पहचाने गए पाठ नहीं लौटाया")
page.fill("#captchaCode", captcha_text) # पहचाने गए पाठ लिखें।
page.click("#validateCaptchaButton")
page.wait_for_load_state("networkidle")
result_page = page.content()
# डेमो पृष्ठ "Correct!" पर सफलता दिखाता है, "Incorrect!" पर असफलता।
accepted = "Correct!" in result_page
return {
"accepted": accepted,
"recognized_text": captcha_text,
"message": "Correct!" if accepted else "पृष्ठ ने Correct! रिपोर्ट नहीं किया",
}
finally:
browser.close()
फ्लो सारांश:
प्लेयराइट कैप्चा पृष्ठ खोलता है
-> #demoCaptcha_CaptchaImage दृश्य होने तक प्रतीक्षा करें
-> src (डेटा यूआरएल) पढ़ें और प्रारूप हटाएं ताकि बेस64 मिले
-> capsolver.solve(ImageToTextTask) पाठ लौटाता है
-> page.fill रिकॉर्ड किए गए पाठ को #captchaCode में लिखता है
-> page.click #validateCaptchaButton को सक्रिय करता है
-> page.content Correct! या Incorrect! जांचता है
-> finally ब्राउज़र बंद करता है
module पैरामीटर वैकल्पिक है और डिफ़ॉल्ट common है। यदि कैप्चा में केवल संख्याएं हैं, तो number का उपयोग करें। विशिष्ट शैलियां उपयुक्त समय पर एक स्वतंत्र मॉडल का उपयोग कर सकती हैं।

उदाहरण के लिए, संख्या-केंद्रित स्वीकृति के लिए अपरिवर्तित स्रोत कोड का उपयोग करें:
solution = capsolver.solve({
"type": "ImageToTextTask",
"module": "number",
"images": [base64_image],
})
answers = solution["answers"]
number मॉडल एक ही उपलब्धि में बहुत सारी छवियां समर्थित करता है, और images में अधिकतम नौ बेस64 स्ट्रिंग हो सकती हैं। समर्थित मॉडल नाम और उपयोग मामले ऊपर दिए गए कैपसॉल्वर ImageToTextTask पृष्ठ में सूचीबद्ध हैं।
experimental.tool: "complete_recaptcha_v2" के पहला पैरामीटर एक पायडेंट बेसमॉडल सबक्लास के साथ एनोटेट किया जाना चाहिए। प्राप्त: <class 'inspect._empty'>
कॉम्पोसियो पहले पैरामीटर के प्रकार अनोटेशन से इनपुट स्कीमा का अनुमान लगाता है, इसलिए input: CompleteRecaptchaInput छोड़ा नहीं जा सकता। यह एक कार्यात्मक अनोटेशन है, एक वैकल्पिक प्रकार टिप्पणी नहीं है। पायडेंट बेसमॉडल रेफरेंस मॉडल प्रकार के वर्णन करता है जिसका स्कीमा के लिए उपयोग किया गया है।
सेशन बनाना निम्न त्रुटि लौटा सकता है:
403 APIKey_InsufficientPermissions
इस रूट के लिए "सेशन" लिखने की अनुमति की आवश्यकता है
कारण यह है कि composio.sessions.create() के लिए सेशन के लिए प्रोजेक्ट-की लिखने की अनुमति की आवश्यकता है, जबकि वर्तमान की केवल पठनीय अनुमति है। की सही है, लेकिन इसका स्कोप अपर्याप्त है, इसलिए त्रुटि 401 के बजाय 403 है।
समाधान के चरण:
sessions: write के साथ एक नई की बनाएं और स्क्रिप्ट के शीर्ष पर COMPOSIO_API_KEY को बदल दें।इस एकीकरण का केंद्र एक पूर्ण व्यावसायिक वर्कफ़्लो है जिसे एक कॉम्पोसियो टूल के रूप में पैक किया गया है:
कॉम्पोसियो टूल = प्लेयराइट पृष्ठ क्रियाएं + कैपसॉल्वर परिणाम + पृष्ठ-स्थिति सत्यापन
केवल आपके द्वारा स्वामित्व या अनुमति द्वारा स्वचालित किए जाने वाले पृष्ठों और प्रक्रियाओं पर उदाहरण चलाएं। पहचानकर्ता के लिए पर्यावरण चर या एक सीक्रेट मैनेजर का उपयोग करें, जब पृष्ठ अपेक्षित व्यावसायिक स्थिति तक नहीं पहुंचता है तो रोकें, और अनंत बार पुन: प्रयास के बजाय दोहराए गए असफलताओं की समीक्षा करें।
अनुमति वाले कॉम्पोसियो एजेंट वर्कफ़्लो के लिए एक केंद्रित CAPTCHA बुनियादी ढांचा आवश्यक है, अपने नियंत्रित पृष्ठों के साथ CapSolver का परीक्षण करें और प्रत्येक हल के बाद एप्लिकेशन परिणाम की पुष्टि करें।
इस एकीकरण में कॉम्पोसियो क्या संभालता है?
कॉम्पोसियो पायथन फ़ंक्शन को एजेंट-कॉल करने योग्य कस्टम टूल के रूप में पंजीकृत करता है, सेशन बनाता है, टूल स्कीमा को प्रस्तुत करता है और ओपनएआई एजेंट से निष्पादन के मार्गदर्शन करता है।
पहले टूल पैरामीटर को पायथन बेसमॉडल क्यों होना चाहिए?
कॉम्पोसियो इस अनोटेशन का उपयोग टूल के इनपुट स्कीमा के अनुमान के लिए करता है। इसे छोड़ देने से स्कीमा निर्माण रोक दिया जाता है और ब्राउज़र वर्कफ़्लो शुरू होने से पहले एक सत्यापन त्रुटि उत्पन्न होती है।
क्या reCAPTCHA v2 टूल कैपसॉल्वर द्वारा टोकन लौटाने के बाद रुक जाता है?
नहीं। अपरिवर्तित कोड टोकन लागू करता है, डेमो फॉर्म जमा करता है, परिणामी एचटीएमएल पढ़ता है और केवल जब पृष्ठ में अपेक्षित सत्यापन सफलता लेख होता है तो सफलता रिपोर्ट करता है।
क्या ImageToTextTask के लिए अलग से पॉलिंग लूप की आवश्यकता है?
नहीं। इस वर्कफ़्लो में, आधिकारिक SDK सीधे पहचाने गए पाठ को लौटाता है। टूल फिर से इनपुट भरता है, पृष्ठ जमा करता है और सही! के रूप में बंद करने की शर्त की जांच करता है।
क्या इस वर्कफ़्लो का उपयोग किसी भी वेबसाइट पर किया जा सकता है?
नहीं। कानूनी, तार्किक, जिम्मेदार और उपयोगकर्ता-अनुमति वाले ऑटोमेशन के लिए ही इसका उपयोग करें। वेबसाइट की शर्तों, लागू कानूनों, दर-सीमा और डेटा-अनुप्रयोग की आवश्यकताओं का सम्मान करें।
एक एआई एजेंट रिकैपचा वी 3 सॉल्वर केवल तभी विश्वसनीय होता है जब एजेंट कार्य, पृष्ठ, ब्राउजर सत्र और चुनौती के कारण अधिकार प्रमाणीकरण संदर्भ को बरकरार रखता है। कैपसॉल्वर कोर SDK, एजेंट टूल्स और एमसीपी के माध्यम से दस्तावेजीकृत कैप्चा इंफ्रास्ट्रक्चर लेयर प्रदान करता है। एजेंट अभी भी मूल कार्य की नीति, पुन: प्रयास और पुष्टि के मालिक हैं। यह गाइड रिकैपचा वी 3 के लिए उत्पादन एकीकरण के बारे में समझाता है, एंटरप्राइज के साथ, बिना वापस आए टोकन को अंतिम सफलता के रूप में माने।

जब एक एआई एजेंट कैप्चा काम नहीं कर रहा रिपोर्ट आती है, तो वाक्य कई अलग-अलग विफलताओं को छिपाता है। डिटेक्शन गलत हो सकता है, एजेंट अनुपलब्ध टूल पर राउट हो सकता है, ब्राउजर परिणाम वापस आने से पहले नेविगेट कर सकता है, या एप्लिकेशन तकनीकी रूप से उत्पन्न एक परिणाम को अस्वीकृत कर सकता है। कैपसॉल्वर दस्तावेजीकृत कैप्चा इंफ्रास्ट्रक्चर प्रदान करता है, जबकि आपके ओर्केस्ट्रेटर को साक्ष्य बरकरार रखना चाहिए और सही बरीस्टर ब्रांच चुनना चाहिए। यह गाइड एक अस्पष्ट घटना को एक लेयर्ड में बदल देता है
