इसके लिए captcha solver:
Selenium
Job को फ़ेल होने देने के बजाय run के अंदर ही challenge को हल करें। एक काम करता Python उदाहरण, और वे तीन बातें जो तय करती हैं कि आपका token स्वीकार होगा या नहीं।
import time
import requests
CAPTCHANO_KEY = "cn-YOUR_API_KEY"
HEADERS = {"Authorization": f"Bearer {CAPTCHANO_KEY}"}
def solve(task: dict) -> dict:
"""Block until solved; returns e.g. {"token": "...", "userAgent": "..."}."""
r = requests.post(
"https://api.captchano.com/v1/solve",
params={"wait": 60},
json=task,
headers=HEADERS,
timeout=75,
)
data = r.json()
# A solve can outlast the 60 s wait: poll the task until it finishes.
while data.get("status") in ("queued", "solving"):
time.sleep(5)
data = requests.get(
f"https://api.captchano.com/v1/task/{data['id']}",
headers=HEADERS,
timeout=30,
).json()
if data.get("status") != "ready":
raise RuntimeError(data.get("error") or data)
return data["solution"]
from selenium import webdriver
from selenium.webdriver.common.by import By
driver = webdriver.Chrome()
driver.get("https://example.com/login")
sitekey = driver.find_element(By.CSS_SELECTOR, "[data-sitekey]").get_attribute("data-sitekey")
solution = solve({"type": "recaptcha_v2", "sitekey": sitekey, "url": driver.current_url})
driver.execute_script(
"document.getElementById('g-recaptcha-response').value = arguments[0]",
solution["token"],
)
driver.find_element(By.CSS_SELECTOR, "form").submit()Token स्वीकार होगा या नहीं, यह किन बातों पर निर्भर है
- अपना proxy साथ भेजें। Token उसी exit IP के पीछे बनना चाहिए जो उसे submit करता है। Session-graded सिस्टम के लिए यह अनिवार्य है, केवल ऑप्टिमाइज़ेशन नहीं।
- User agent मिलाएँ। Turnstile और कई anti-bot सिस्टम token को एक user agent से बाँध देते हैं। हम इस्तेमाल किया गया user agent लौटाते हैं ताकि आप उसे बिल्कुल वैसा ही दोहरा सकें।
- देर से request करें। Token लगभग 120 सेकंड में expire हो जाते हैं। जब आप submit करने के लिए तैयार हों, तभी token माँगें।
Blocking या polling
उदाहरण में ?wait=60 का इस्तेमाल है, इसलिए call पूरा solve लौटाता है और आपका Selenium स्टेप सीधा-सादा रहता है। अगर आप कनेक्शन खुला नहीं रखना चाहते, तो यह parameter हटा दें, लौटाया गया id रख लें, और हर पाँच सेकंड में GET /v1/task/{id} poll करें। जिस token का आपने भुगतान किया है वह दस मिनट तक प्राप्त किया जा सकता है, इसलिए कनेक्शन टूटने पर भी आपका solve बेकार नहीं जाता।
लागत
हर सफल reCAPTCHA v2 solve के लिए $0.00598, असफल solve पर कभी चार्ज नहीं। हर challenge टाइप के लिए कीमतें देखें, या पूरे request फ़ॉर्मेट के लिए API reference देखें।
Selenium में solve कैसे फ़िट होता है
Selenium एक असली browser चलाता है, इसलिए challenge बिल्कुल वैसे ही render होता है जैसे किसी यूज़र को दिखता। DOM से sitekey पढ़ें, token request करें, और submit पर क्लिक करने से पहले execute_script से उसे वापस लिख दें।
- 01पेज लोड करें
Target को उसी proxy और user agent के साथ खोलें जिससे आप submit करेंगे।
- 02Sitekey पढ़ें
[data-sitekey] से find_element करें और attribute पढ़ें, साथ में data-callback भी अगर मौजूद हो।
- 03Solve करें
उसी proxy और user agent के साथ type, sitekey और driver.current_url को /v1/solve?wait=60 पर POST करें।
- 04Inject करें और submit करें
Response फ़ील्ड भरने और callback चलाने के लिए execute_script करें, फिर submit पर क्लिक करें।
Token को पेज में कैसे डालें
driver.execute_script छिपे हुए g-recaptcha-response या cf-turnstile-response फ़ील्ड को सेट करता है और, अगर पेज में widget का callback है, तो उसे call करता है।
इंटीग्रेशन आमतौर पर कहाँ गलत होते हैं
कई पेज widget callback से submit बटन चालू करते हैं। सिर्फ़ फ़ील्ड भरने से बटन disabled ही रहता है।
Response textarea तब बनता है जब widget render होता है। Inject करने से पहले widget iframe का इंतज़ार करें।
Selenium का proxy driver शुरू होते समय सेट होता है। वही proxy string solve को भी दें ताकि token और submit एक ही IP से हों।
Selenium captcha: अक्सर पूछे सवाल
क्या Selenium खुद reCAPTCHA solve कर सकता है?
नहीं। Selenium browser को नियंत्रित करता है लेकिन image challenge का जवाब नहीं दे सकता, और automated browsers को challenge दिखाए जाने की संभावना ज़्यादा होती है। आप solving API से token request करते हैं और उसे inject करते हैं, जैसा इस पेज का उदाहरण करता है।
क्या यह undetected-chromedriver या Selenium Grid के साथ काम करता है?
हाँ। यह इंटीग्रेशन सिर्फ़ DOM पढ़ता है और JavaScript चलाता है, इसलिए यह किसी भी WebDriver session के साथ काम करता है, local हो या remote, बशर्ते आप वही proxy और user agent solve को दें।
Turnstile के लिए token कहाँ डालूँ?
Turnstile फ़ॉर्म के अंदर cf-turnstile-response नाम का एक छिपा हुआ input इस्तेमाल करता है। उसकी value सेट करें और, अगर पेज data-callback में कोई callback बताता है, तो उसे call करें।
जो captcha सिर्फ़ कभी-कभी आता है, उसे कैसे संभालें?
हर navigation के बाद widget की जाँच करें और API को तभी call करें जब वह मौजूद हो। बिलिंग हर सफल solve पर होती है, इसलिए जाँच करने का कोई खर्च नहीं।
उपयोगी गाइड
बनाने के लिए तैयार?
3 दिन के free trial से शुरू करें, फिर ट्रैफ़िक बढ़ने के साथ हर सफल solve के हिसाब से भुगतान करें। Trial के लिए कार्ड की ज़रूरत नहीं।