Python में Selenium कैप्चा सॉल्वर: काम करने वाला उदाहरण (2026)
Selenium एक असली ब्राउज़र चलाता है, इसलिए पेज रेंडर होता है और उसकी स्क्रिप्ट वैसे ही चलती है जैसे किसी इंसान के लिए। एक ही चरण जो वह नहीं कर सकता वह है PopularCaptcha विजेट को हल करना। यह गाइड वह चरण जोड़ती है: रेंडर्ड पेज से sitekey पढ़ें, एक API कॉल से टोकन लें, उसे फॉर्म में लिखें, और सबमिट करें।
यह गाइड PopularCaptcha विजेट को कवर करती है, जिसे Scarnox आज proxyless आधार पर हल करता है। मुफ्त ट्रायल क्रेडिट के साथ शुरू करें, कार्ड की ज़रूरत नहीं और पहले किसी टेस्ट फ़ॉर्म पर स्क्रिप्ट आज़माएं।
Selenium को क्या करना है
फ़्लो के चार हिस्से हैं:
- पेज लोड करें और विजेट के रेंडर होने का इंतज़ार करें।
- विजेट से
data-sitekeyएट्रिब्यूट पढ़ें। - API से टोकन लें और उसे फॉर्म में रखें।
- टोकन समाप्त होने से पहले फॉर्म सबमिट करें।
कैप्चा को छूने वाला केवल तीसरा चरण है। बाकी सब सामान्य Selenium का काम है।
पैकेज इंस्टॉल करें
pip install selenium requests
Selenium 4.6 और बाद के संस्करण अपने आप मेल खाता ChromeDriver ढूंढ लेते हैं, इसलिए ड्राइवर हाथ से डाउनलोड करने की ज़रूरत नहीं।
पूरी स्क्रिप्ट
import requests
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.ui import WebDriverWait
API_KEY = "scarnox_YOURAPIKEY"
API_URL = "https://api.scarnox.com/api/tasks/create"
PAGE_URL = "https://example.com/signup"
def solve(sitekey: str, page_url: str, invisible: bool = False) -> str:
body = {
"captcha_type": "PopularCaptchaTaskProxyless",
"site_key": sitekey,
"site_url": page_url,
}
if invisible:
body["is_invisible"] = True
r = requests.post(
API_URL,
headers={"Authorization": f"Bearer {API_KEY}"},
json=body,
timeout=185, # टोकन तैयार होने तक रुकता है
)
data = r.json()
if data.get("errorId") != 0:
raise RuntimeError(f"{data.get('errorCode')}: {data.get('errorDescription')}")
return data["solution"]["token"]
INJECT_TOKEN_JS = """
const token = arguments[0];
let field = document.querySelector('[name="h-captcha-response"]');
if (!field) {
field = document.createElement("textarea");
field.name = "h-captcha-response";
field.style.display = "none";
document.querySelector("form").appendChild(field);
}
field.value = token;
let extra = document.querySelector('[name="g-recaptcha-response"]');
if (!extra) {
extra = document.createElement("textarea");
extra.name = "g-recaptcha-response";
extra.style.display = "none";
document.querySelector("form").appendChild(extra);
}
extra.value = token;
"""
def main() -> None:
driver = webdriver.Chrome()
try:
driver.get(PAGE_URL)
widget = WebDriverWait(driver, 15).until(
EC.presence_of_element_located((By.CSS_SELECTOR, "[data-sitekey]"))
)
sitekey = widget.get_attribute("data-sitekey")
invisible = widget.get_attribute("data-size") == "invisible"
token = solve(sitekey, driver.current_url, invisible=invisible)
# पहले बाकी फ़ील्ड भरें, फिर सबमिट से ठीक पहले टोकन डालें,
# क्योंकि टोकन लगभग दो मिनट में समाप्त हो जाता है।
driver.find_element(By.NAME, "email").send_keys("you@example.com")
driver.execute_script(INJECT_TOKEN_JS, token)
driver.find_element(By.CSS_SELECTOR, "form button[type=submit]").click()
WebDriverWait(driver, 15).until(EC.url_changes(PAGE_URL))
print("Submitted. Now at:", driver.current_url)
finally:
driver.quit()
if __name__ == "__main__":
main()
proxyless PopularCaptcha सॉल्व के लिए स्क्रिप्ट को प्रॉक्सी की ज़रूरत नहीं है। proxy फ़ील्ड छोड़ दें, ताकि साइट आपका सामान्य कनेक्शन देखे।
ऑपरेशन का क्रम वही हिस्सा है जो सबसे ज़्यादा गलत होता है। पहले फॉर्म के बाकी हिस्से भरें, फिर सॉल्व करें, फिर टोकन डालें, फिर क्लिक करें। अगर आप दूसरे फ़ील्ड में टाइप करने से पहले सॉल्व करते हैं, तो धीमा पेज या धीमा फॉर्म सबमिट को टोकन की उम्र के बाद धकेल सकता है। सॉल्व और क्लिक के बीच का अंतराल जितना हो सके छोटा रखें, और कैप्चा पास होने मान लेने से पहले नतीजा पेज पर एरर जांचें।
टोकन JavaScript से क्यों डाला जाता है
ज़्यादातर PopularCaptcha विजेट, जब एक इंसान उन्हें हल करता है, तो टोकन h-captcha-response नाम के छिपे textarea में लिखते हैं। चूंकि Selenium किसी इंसान को नहीं देखता, स्क्रिप्ट वही फ़ील्ड खुद लिखती है। INJECT_TOKEN_JS स्निपेट दो काम करता है:
- अगर विजेट ने पहले से textarea बनाया है, तो उसी को दोबारा इस्तेमाल करता है।
- अगर पेज ने नहीं बनाया, तो textarea बनाता है और उसे फॉर्म में जोड़ता है।
यह g-recaptcha-response भी भरता है, क्योंकि कई साइटें संगतता के लिए उस नाम को पढ़ती हैं।
Invisible विजेट
Invisible विजेट में कोई चेकबॉक्स नहीं होता। वह पृष्ठभूमि में चलता है और आम तौर पर फॉर्म सबमिट पर ट्रिगर होता है। स्क्रिप्ट data-size="invisible" जांचती है, और उसे दिखने पर is_invisible: true भेजती है। कुछ साइटें विजेट से JavaScript callback भी जोड़ती हैं। अगर टोकन डालने के बाद भी फॉर्म वहीं रहता है, तो data-callback एट्रिब्यूट देखें और उस फ़ंक्शन को टोकन के साथ कॉल करें। इस स्थिति को अदृश्य कैप्चा गाइड कवर करती है।
टेस्ट में इस्तेमाल
Selenium end-to-end टेस्ट के लिए भी आम उपकरण है। अगर आपकी अपनी staging साइट पर कैप्चा दिखता है, तो वही कोड टेस्ट को उसे पास करने देता है। टेस्ट वातावरण को प्रोडक्शन से अलग रखें, और उन साइटों पर न चलाएं जो आपकी नहीं हैं। टेस्ट सूट का सेटअप ऑटोमेटेड टेस्ट में कैप्चा में है।
आम समस्याएं
- विजेट कभी दिखता ही नहीं। प्रतीक्षा बढ़ाएं, या जांचें कि विजेट किसी iframe के अंदर है या नहीं। अगर है, तो पहले
driver.switch_to.frame(...)से उस फ़्रेम पर जाएं। - फॉर्म सबमिट होता है, पर साइट टोकन अस्वीकार करती है। जांचें कि टोकन उसी पेज के लिए भेजा गया है जहां विजेट दिखाया गया था।
driver.current_urlपेज के असली URL से मेल खाना चाहिए, क्वेरी स्ट्रिंग सहित। - टोकन समाप्त हो गया।
solveकॉल को सबमिट चरण के पास ले जाएं। टोकन लगभग दो मिनट चलता है। - API से टाइमआउट एरर। स्क्रिप्ट की तरह लगभग 185 सेकंड का टाइमआउट रखें। रिट्राई का तर्क कैप्चा सॉल्वर एरर हैंडलिंग में है।
कीमत
आप हर सफल सॉल्व के लिए भुगतान करते हैं। विफल सॉल्व का शुल्क नहीं लगता। दरों के लिए मौजूदा कीमतें देखें, और मुफ्त ट्रायल क्रेडिट के साथ शुरू करें, कार्ड की ज़रूरत नहीं।